So the most flattering thing happened to me last week. Someone tweeted at me to ask for advice. For a sec, I was shook. Thought they had the wrong dude. Anyways, I got the question and it is interesting and common enough that I thought it was worth blogging about. In summary, the generalized format of the question is:
I have an idea/dream/need that I feel can be satisfied by building a software product but I don’t have a Computer Science/Software Engineering background. Is it worth my while to pursue an undergraduate education in these fields to realize my dream?
This is not an uncommon question at all and in fact, for many of us is a big part of the reason we went into the industry. However, in this case, and in most cases where this question is asked of me these days, I feel this is not necessarily the right question.
We talk a lot about how technology can/will/is changing the world and while this is not false, it is really an oversimplification of the facts. Actually, people’s applications of technology to solve problems are changing the world. The technology is simply a tool. An extremely powerful tool, but a tool nonetheless. As such, whenever I encounter a problem that I feel is important enough to take on and can be solved with the aid of technology, it is always important to remember to focus on the problem, and more importantly, the solution and not the technology. In fact, in general, I would approach this by simply assuming the technology exists and worrying about other more import aspects of the overall problem such as:
- What do I need to do to achieve my dream?
- What is the problem I am trying to solve and who actually has this problem and needs this solution?
- How has this problem been handled in the past and what are the limitations of those existing solutions?
- Is this a local or a global problem? If local, why is it a problem here and not elsewhere? Are there implementations of solutions to this that have worked in a different context(location, industry, etc) that I might be able to leverage/replicate?
- What knowledge and technology already exist in this space that can be leveraged to solve my problem?
Finding answers to these questions are much more likely to bring you clarity on what you need to do to achieve your goal than the decision of whether or not to pursue an engineering degree. There are many, varied and nuanced reasons for this approach but in the interest of time, I’ll just talk about 3.
- You might not need to build something new: For most problems we encounter that we think we can solve with technology, the technology to bring that solution to life usually already exists. All that is needed, as stated earlier, is for someone to creatively apply those existing technologies in a specific combination in order to tackle the problem before them. As a result, studying software engineering is often tangential to the actual problem being solved as the problem itself doesn’t require the engineering of new software but simply the combination of multiple services and pieces of software to create the solution we need. It is probably a much more worthwhile endeavor to first seek out existing off-the-shelf software that achieves each of the various parts (or maybe even all the parts) of what you are trying to do and try and use that to tackle your problem rather than attempting to reinvent the wheel.
- CS degrees tend to teach you to build software and not products: The difference here is very important. Software is just the instructions that a computer executes. In my undergraduate education I was taught the basic principles of how those instructions work: What they are, how they are processed and how they can/should be put together to get the computer to do what I want. This is a completely different skillset from identifying problems and creating holistic solutions. While it is an essential part of the process of creating solutions, it is by no means the biggest part. There is so much more to building a software-based product/business than that and unless you consciously and actively seek those aspects out, your CS undergraduate degree will not provide them to you. This is like the difference between knowing how to design an engine and building & selling a car. The engine is a critical piece of the car but if all you have is an engine, you’re not driving anywhere. Also, if you know the engine you want in your car, you can always buy it (see previous point) or partner with someone who has engine-building expertise.
- Ride your prevailing tailwinds: When you take on anything big and worthwhile such as this idea you have to change the world, you are going to run into so many roadblocks and challenges along the way. Many of these you cannot yet even conceive of. As such, you want to give yourself as much of a fighting chance as possible and one way you do this is by approaching the problem first from your place of strength. What unique skill, experience or expertise do you have that makes you suited to take on this challenge? Lean into that. More importantly,Invariably, as you go through the process of fleshing out and implementing your idea, you will find that you will necessarily pick up the knowledge, skills and relationships required to move forward. And if it turns out that you absolutely need an engineering degree to take on the problem and that becomes a complete blocker to your progress (extremely unlikely) you will know and at that point, the question will answer itself.
So in summary, do you need an engineering degree to implement your idea? If you have to ask, probably not (yet).