This is never a question that I get to ask myself, but instead, the right question to ask is: How long can I stay in this game?
Trying to build a business alone demands a lot of sacrifice, discipline and especially stamina. I no longer count the number of nights where I spent trying to debug some weird and obscure bugs for my application SewaYou.
If you take a look at SewaYou, it's a location-based language exchange app, and one of the reason that I built it was that I wanted to learn how to the Google Map API back when I started to get into the web development world. I was a lot inspired by how Airbnb has built their house searching directly on the map.
SewaYou started as a MVC Django web app written in Python and not using anything else than jQuery and Bootstrap. I couldn't even write proper CSS, and was just trying to plug some Codepen examples/templates I found on the internet, and put them together for the design.
At that time, I didn't ask myself: how far can this go?, but rather: what's the next step, the next features that I should build?.
If you start to ask the question on how far you can go, your brain will try to find some, any excuses to prevent you from making stuff, and rather, push you to find some external help. That will just push you off from actually trying to do the work. Don't get me wrong, asking for help or outsource works is essential and indispensable sometime but not until you somehow already know your craft and have a clear vision of what your products will become.
Trying to stick with your project just by yourself will allow you the explore much more areas that you wouldn't normally do because you tend to just rely on other's people expertise. You won't have to be an expert on every aspect of the business, but you better get some solid foundation on those areas, it will just help you become a much more knowledgeable person, more reliable, but also later, if you want to delegate, it will be much more easier to do so.
As I said, SewaYou started as an old monolith Django MVC project. Most of the features are just modules/packages that were plugged together given that I wasn't entirely capable of implementing them by myself. I wanted to have a way for users to communicate to each other, but building a chat was out of my league, so I just used a Django plugin to enable private emailing inside the app itself. Along the way, authentication is also something that Django (almost) did out of the box for us.
The development of the MVP took place from October 2017, and the first MVP release was in around February 2018. The first MVP looked like this:
Soon after the first release, I realize that in order to extend the app, adding more complex features, it will requires so much changes in the code that the current architecture couldn't support. For example, users on most language exchange apps or usual social apps take for granted the real time chat inside the app. But that wasn't something easy to implement quickly. The architecture itself has to be completely reviewed if I wanted to implement by myself such a solution.
There are also some third party Chat/Messaging as a service, where you can directly almost, as-is, plug a chat in your web app. But most of the time, these solutions are not flexible enough, or required a specific architecture to be supported. Also, the criteria to take into account the most is the fact that you might be locked with them, this is something really common in the software world. You decide to use an already made product/plugin/module, but later you realize that you can't go further with that solution, you can't customize as will in the way you want.
For these reasons, I just decided to implement the real time chat feature by myself. It would also be a great opportunity to learn a new technology and building something from scratch by yourself.
But building this on top of the MVC Django architecture would be a looooot of work and code refactoring, re-architecturing. So instead, after spending some time researching what were available in the web development world, I came across the ReactJS frontend framework. Using React just for the frontend and have a separated backend is something completely new for me. This new paradigm of doing things just opened my world to a much more modern way of building a web app.
Starting from that point, I decided to rebuild from scratch SewaYou, from an old, monolith architecture, uglily coded to a much more modern architecture, more well-thought codes using ReactJS for the frontend and Nodejs for the backend. \\nThen I needed to implement my own authentication system, using Passport.js, and the real time chat using Socket.io. That was also the first time that I really learn how to write proper CSS, like not just copy pasting templates you found on the net, but really designing the design on paper first and then write the CSS for it. Yeah, back then I didn't know that we can design in a pixel-perfect way on software like Figma before actually coding the CSS.
Then a lot of things just follow, I learned how PWA (Progressive Web App) works, how to properly implement notification etc...
Then SewaYou started to get some traction, and I got to get my hands a little bit into the marketing side of things and trying to grow the product.
And then, I dogfood my own product and found some flaws. I also get the same feedback from actual users: nobody would want to use a website to chat with someone. Yep, your PWA can be the most modern in the world, you'll never change the users' habits. Even if they got some instructions, they'll unlikely to install your website shortcut on their phone home screen. Instead they rather want a native mobile app.
Then along the course, there are some architecture changes as well, that made me rewrite (again..., rewriting and refactoring will never end I guess 🤔) some part of the code, especially when I decided to remove entirely the backend and only use a frontend solution using something like AWS Amplify or Firebase that will handle the authentication mechanism and the database.
And the less time you spend on doing things because you already mastered some critical part, foundation parts of the development of the product. Now that I can really comfortably write proper CSS, designing a new feature that requires design, but not so complicated logic is a walk in a park. Some big features that before, would requires me days or weeks can be done now within hours.
Once you have a good command of your main expertise, in my case coding the application, you can focus and extend your skills to other related areas like design, marketing or growing the product.
So the takeaway of this story is not to drop out and do not question yourself on how far you'd go, but rather until when are you willing to stick with it. Because it is and will be an endless journey, where you get to grow personally yourself along with your product. I remembered that I wanted and almost quit after the release of the first MVP of SewaYou, and realize that I have double the work to do, by rewriting everything again. The time where I have to rewrite the React web version to the React Native mobile version was also a big wall for me, but then I remembered something: I built this product to learn things, and the result is just certifying what I've learned. So if I give up, there won't be any trace left on what I did and spent my endless nights on.
When building a product/business alone, your product/business is the exact reflection of yourself. Your product kind of shows to the world what kind of person you are. Endure the lonely journey and learn along the way because every minute in this process is really worth it.
© 2020, Philippe Khin