If you have been a programmer for a time, you might have thought, at some point: “I’m going to build my own app!”. I have given this a bit of though. In this article I will try to answer the question “Should I build my own app ?”, highlight the trade-offs and, hopefully, leave you with a better understanding of the process.
Why do I want to build an app?
Let’s start with the first question I should answer, and that is “Why?”. The world is already full of apps and there are ongoing jokes about projects started and abandoned. Why would I want to add another one ?
- I want to learn something! I just discovered this technology / framework / language and I want to give it a shot. The best way to learn programming is to do something with it, so I decided to put my skills to the test and build something. I don’t expect too much to come out of it beyond a learning experience, and I am happy to throw this away once I have learned what I need.
- I have a problem that I want to solve! Lately I found myself doing the same thing over and over again. Since I am a programmer, I am trying to automate the process. I don’t necessarily try and help anyone else beyond me. I am building it for me, so I know what I need and how the finished product should look.
- To help someone else! I want to build an app for someone else. I have an idea that people would use and I want to build it and let it free into the world. Not entirely sure how the finished product is going to look like and I’m ready to pivot if needed and meet the end user where they are.
How do I want to build it?
I have decided why I want to build my project, now it’s time to get to specifics. How do I want to do it ? I am still in the early stages and there is a long road ahead of me. Let’s try and get to the specifics of the project.
What should I use ?
There are a lot of languages out there and I need to settle to one ?! Well, yes (mostly)! But thankfully there are some constraints that help. The type of project I want to build (a website, a native application, a mobile app, a headless API, a script) helps me decide on the programming language that I can / should use.
Then I, probably, have to decide on a database management system, there are a lot of those out there too. I have relational databases, such as MySQL, PostgreSQL, SQLite and a lot of non-relational databases: MongoDB, Neo4j etc.
Depending on my project, type of project and purpose, I need to consider: hosting, releasing, caching and documentation. I may also want to add some tests and CI / CD pipelines to help keep everything nice and tidy.
If I’m part of a team, I may consider putting together in place some processes to keep everything consistent. And reviews, definitely reviews if we’re a team.
What do I need ?
Depending on the type of project I want to build, some of these might not apply. Nonetheless, it’s worth going through the list. I’m trying to summarize what I need from idea to release, and beyond. Even after removing the ones that are not needed for my project (whatever it is), I still think there is enough commonality to extract something useful.
Let’s start with the obvious: If I want to build an app, I need to sharpen my coding foo. I want to help myself, or others, and this means the app I’m planning to build is going to stick around for, hopefully, a long time. I should know how to write the code and how to make it maintainable.
Throwaway prototypes and learning projects are a different story. I can afford my code to be sloppy. As long as I have everything I need (an understanding of the core concepts, or a proof of concept), I don’t care too much how the code ends up.
Management is the process of following through from idea to completion. I can be by myself, or working together with friends, or even be a part of a shiny new startup, the principles remain the same.
I need to think about the project as a whole, think of the scope of what I’m trying to achieve, a timeline and some milestones that I should try to hit. If not done right, I run the risk to spend too much time focusing on the wrong tasks.
This one is fun. If I want my app to be considered a commercial success, I need to convince at least a handful of users to give it a try. This is not as simple as it looks. It takes a bit of practice to identify my target audience and what is the best way to reach them. I will, most certainly, end up with different approaches that get more refined over time. I need to spend some time promoting my app, or I will end up building the best app no one ever heard of.
Following up from the point above, if I managed to convince some people to use my app, it’s safe to assume I can convince them to pay me for it. There are many ways to monetize an app: subscriptions, ads, selling products / service, affiliate links. The moment I do that, I end up in accounting territory.
It doesn’t really matter where I live, when I start making money, the state wants it’s due. The laws vary a lot from place to place, so it’s my job to make sure I follow them and I don’t end up in trouble. The good news is that there are lots of accountants out there who can help me outsource this part.
I may not fully master the skill mentioned above, but there is no better way to learn than to practice.
As a final thought, I noticed an increase of the quality of the “off-the-shelf” technical solutions out there. This makes it easier for someone with little programming experience to build a fully functioning app. This means there is less pressure on the technical skills required to build an app and the focus gently shifts to marketing and management (and other soft skills).