How to learn to build a software company
Two beliefs that have taught me everything I've needed to know to build companies.
đđ˝ Welcome to A Founderâs Life for Me! Iâm Alek, and Iâll share my experiences building tech companies to provide practical recommendations on building your own thing.
Subscribe to get free access to all past and future posts.
Why Iâm writing this now
Building a company is scary. You are always continuously venturing further into the unknown. Iâm writing this now because I just spent the week overcoming several technical problems I previously had no idea how to solve. It reminded me of some core beliefs that carry me through learning new things.
Iâll focus on technical skills because itâs common for people to be intimidated by âcoding.â But, this mindset toward learning can also be applied to non-technical skills. Iâll write more on that in the future.
Youâll leave this article with a mindset that will carry you through learning new skills and practical examples of how Iâve applied that mindset and acquired skills while working on my companies.
Two beliefs to help your learn anything
Whenever you are tackling a new problem or learning a new skill, the following two beliefs will help carry you through:
Everything youâve never done before is hard. There will be challenges every step of the way.
You are smart and will overcome these challenges one at a time.
These two beliefs have allowed me to learn to code while building my first company and build countless new things.
How these beliefs taught me to code
When I started my first company, GBA, I hit challenges every step of the way. I had done some simple coding for my Physics major. But, nothing I had built couldnât have been done in a fancy Excel spreadsheet. Due to this lack of experience, most people would have said I was unprepared to build an AI that gave advice on how to improve at video games.
Here is a brief sample of some of the many things I had never done before when I set out to start building the GBA technology:
Set up a program to request data from an API (I didnât know what an API was)
Built a computer vision program
Set up a database
Built a website
When learning a new skill, it can be easy to judge yourself on all the things you donât know how to do. Instead of believing I was unprepared to build GBA, I approached it with the mindset of being prepared to learn. As I set out to learn each new thing, there were hundreds more challenges under the hood. For example, when I set out to build the computer vision program, here were some problems hiding under the hood:
âWhat is computer vision?â
âWhere do I start when building a computer vision application?â
âWhat is this âTensorflowâ thing that people are talking about?â
âHow do I use Tensorflow for computer vision?â
âHow do I train the computer vision model?â
âHow much data is enough data to train the model?â
âHow can I train the models more efficiently?â
âHow do I run the model on new data?â
âHow well does the model perform on new data?â
In hindsight, itâs obvious to me that I would need to learn all of these things. But, at the time, I was surprised by the number of things I had to learn every step of the way. When I solved a problem, I often expected it to be smooth sailing to the finish line, and I was demoralized when I encountered more obstacles along the way.
I figured each problem out one at a time. It was tough. There were days when I got so frustrated that I gave up and had to return to it later. The stubborn belief that I was smart enough to solve each problem carried me through these challenging times. For a deeper look into my thought process as I started GBA, feel free to read my first post.
At the time, the best way to figure out each problem was through Google searches. I would ask myself, âWhat is the next thing I need to understand to take this one step further?â Iâd Google it and trial-and-error my way to a solution. Every week, I stacked small bits of progress and skill-building on top of each other. Overcoming each obstacle took brute force, but I eventually built the end-to-end process I envisioned.
Looking back at this experience, I held a stubborn belief that I was smart enough to overcome each challenge. But I hadnât realized how hard it would be to build something Iâd never done before. A learning that I gained from this experience was to expect obstacles when Iâm trying something new. That way, Iâm delighted when it ends up being smooth sailing and unphased when that next obstacle comes along.
How these beliefs taught me to build a desktop application
For SolidlyAI, I wanted to build a desktop application so people could quickly and easily record meetings from their computers without a bot joining their calls. The only problem was that Iâd never built a desktop app before. It had been about six years since I started GBA, and, over time, Iâve incrementally stacked bits of technical knowledge on top of each other to build a pretty good knowledge base for how to build a website. But Iâd never done a desktop app before.
Instead of gawking in intimidation at everything I didnât know how to do, I just started building a desktop app. This time I applied what I learned when building GBA⌠I expected there to be new unforeseen challenges every step of the way. Hereâs a play by play of the challenges, and how I worked through them:
Day 1 - I promised a customer that Iâd have the MacOS version of the Solidly App ready in two weeks. I had a PC version of the Solidly app at the time, but I had never built a Mac app.
Day 2 - I researched whether Iâd be able to build a MacOS app from my normal computer (PC). It turned out the answer was âno.â
Day 3 - I bought a MacBook Air to develop the MacOS version of Solidly. I setup the laptop but, alas, Solidly wouldnât run on the computer. There was logic I had coded onto the app that was PC-specific and didnât carry over.
Day 4 - I made code changes to my application and figured out how to get it to run on my new Mac. I sent the âSolidly Meet.appâ file that was created to another Mac for testing, but it wouldnât launch. After some research I learned that you need to package Mac apps as â.dmgâ (disk image) to send and install it.
Day 5-6 - I figure out how to create the âSolidly Meet.dmgâ file that was needed to distribute the app. But, when I sent it to another Mac the app was blocked. Apple requires that code is âsignedâ and ânotarizedâ in order for your app to be shareable.
Day 7-9 - I signed up for the Apple Developer program so that I could âsignâ and ânotarizeâ my code. I ran into tons of issues, but was eventually able to work out a solution. The application was shareable, but it wasnât prompting the user for access to their microphone (which was required for Solidly Meet).
Day 10-11 - I figured out how to get the Solidly Meet app to request microphone access on a Mac. The app could now run and be distributed with all of the basic functionality. But, it only runs on Macs running M1 chips.
I was never surprised or demoralized when I hit these obstacles. I tackled each one, trying to view them as an âopportunity to learnâ instead of âyet another thing I donât know how to do.â After only 11 days and 8 hours per day of work, I was able to go from âno idea how to build a Mac appâ to âIâve built a Mac app.â It was frustrating at times, for sure, but I powered through and got to the outcome I wanted to achieve.
Notice that I'm also practicing what I preach. I sold the app before building it. This was a strategy I discussed in âThe #1 Way to 10x Your Companyâs Odds of Success.â
There were still plenty of days where I made zero progress, but ChatGPT has made overcoming obstacles much easier. Whenever I encounter a new challenge, I can ask ChatGPT. If I get an error message while coding, I copy and paste it and (generally) get pointed in the right direction toward solving the problem. If I donât understand the next step, I can have a conversation with ChatGPT and gain a base-level understanding of a good approach. ChatGPT allows me to spend less time blocked by each new obstacle and feel more confident that Iâll always be able to find a solution.
Anybody can learn anything
I believe that anybody can learn anything. Some skills may come easier to some people. But, most people are limited by their beliefs when learning new skills.
If you inherently believe that âI am not the type of person who can code,â then when you hit a problem while learning to code, it will reinforce your belief, and you will feel demoralized. Eventually, youâll hit enough issues and decide, âI was right. I am not the type of person who can code,â giving up on learning that skill forever.
Instead, if you believe that âI am the type of person who can code,â youâll tackle the problems you encounter more confidently, overcome them, and positively reinforce the belief. Eventually, youâll have solved enough problems and prove to yourself, âI was right. I am the type of person who can code.â
Whatâs the hardest thing youâve ever had to learn? When learning a new skill, consider positioning it against the most challenging thing youâve learned, âIf I can learn [most challenging thing Iâve ever learned], I can learn [new skill].â With this inherent belief that you can learn a new skill, the question becomes, âIs it worth my time to learn this skill?â
In a later post, Iâll share my views on the cost-benefit of learning new skills.1 But, most people convolute what they are capable of with whatâs worth their time. To automatically receive notifications on posts like this, please consider subscribing!
You can learn anything
Whenever you are tackling a new problem or learning a new skill, the following two beliefs will help carry you through:
Everything youâve never done before is hard. There will be challenges every step of the way.
You are smart and will overcome these challenges one at a time.
These two beliefs have carried me through learning to code and building both of my startups.
Recommendation: The next time you look at a problem you donât know how to solve, consider the two beliefs above. Are you avoiding or delegating the problem because you donât think youâre the type of person who is capable of solving it? Consider the most challenging thing youâve ever had to learn and think, âIf I can learn [most challenging thing Iâve ever learned], I can learn [new skill].â If you believe you can learn the skill needed to solve the problem, then why not solve it?
If you are interested in more content like this, subscribe through the link below. If you want to discuss how to apply this, email me at newsletter@alekhagopian.com.
[SPOILERS] Iâm very âforâ learning new skills.