How Learning to Code Changed My Approach to Startups
When we launched our first product, I knew almost nothing about coding. I was the “business” guy who had an idea and just wanted to build it. Our launch was now six years ago, and things have changed quite a bit. The errors in judgment that arose from my ignorance of development are now quite obvious, so I thought this would be a good time to share how my perspective on building tech products has evolved. If you’re starting in a similar situation, the following points are just a few of the unexpected benefits you might experience as a consequence of learning to code.
Improved Problem Solving
Learning any new skill has the unbelievable side effect of physically rewiring our brains, a phenomenon known as neuroplasticity. At first, I didn’t fully grasp how this experience would impact my thought process more generally.
Programming requires constant use of deductive (and inductive) reasoning. We often start with some overarching goal or problem and need to break it down into smaller, more manageable tasks. For instance, if we wanted to automate some tedious web research — my first solo project — we would need to define the specific steps a program should execute. We might need some way to access the internet, navigate to a website, grab the content we’re interested in, and then store it somewhere for later. As we solve each subtask, it may become apparent that we overlooked some essential steps, and with our increased awareness, we can include them to complete the program, accomplishing our larger goal.
The benefits of these reasoning skills extend far beyond the realm of programming. We can approach business strategy, goal setting, customer acquisition, design, business model development, or virtually any other problem in much the same manner. Programming just so happens to be one of the best ways I’ve found to practice this kind of reasoning, as it provides a controlled environment and nearly immediate feedback loop.
It’s kind of a no-brainer that learning to code enables better communication with developers. Good communication is an abstract benefit, but it has very practical implications.
One area where communication has a direct impact is design. At a fundamental level, product design is communication. Designs detail much of the functionality, user experience, and visual properties of the product to be built.
Our first product was designed in a manner that led to more development effort than required. Immediately after launching, we had to rebuild ~90% of the functionality based on customer feedback. This was time wasted and put the project at significant risk, all of which could have been avoided with a better understanding -- and communication -- of product requirements.
When viewing product design through the lens of a developer, we can avoid some of these mistakes. Instead of looking at ten different features in isolation, we can see one core feature that addresses a class of problem. This single feature may then have ten different scenarios where behavior is slightly modified. Communicating a single feature with ten use cases versus ten stand-alone features can drastically impact how developers architect a solution. It takes a simple shift in perspective to save our project from over-engineering while simultaneously increasing flexibility when it inevitably comes time to change or extend these features further.
More Compelling Vision
Before learning to code, most of my product ideas revolved around user experience (UX), with technology serving more of an enablement role. In essence, these ideas focused on creating a better mousetrap.
The problem with better mousetraps is that they don’t provide a very compelling product vision on their own. Creating a clear, realistic vision requires that we look into the future and extrapolate the state of technology and the market.
The market part of the equation wasn’t so much of a problem. Technology is the component that left the notion of a product vision a bit hazy in my mind. Thought leaders will laud the potential benefits of tools like Machine Learning and the blockchain, but they are often high-level descriptions without realistic guidance for incorporating the technologies into the product we’re building today. I was stuck grasping at straws with some vague concept of AI and how we could use it to automate some part of the service we provide customers.
Programming has given me a more technical foundation for understanding what's possible. Instead of viewing a buzzword like Machine Learning as a catchall, I had the (bare minimum) tools to start grasping specific, concrete ways it can be used today. This deeper understanding offered a more substantial basis for extrapolating the state of technology over the medium-term.
In the case of cutting-edge technologies, learning to code isn’t the only topic to understand, but without this skill, I would be far less capable of developing a vision of the future that could convince and inspire the talented developers we’ll need to bring it to fruition.