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.