Engineering your startup idea
Tags: beginners, startup, sideprojects
Published: 2022-03-22 08:04:35

I have been a great fan of 'Software Engineering' wherein things are built ground-up but the sheer thought of building a product from a software perspective can be daunting for beginners. 

I have been fooling around web development since early 2015. First, it was plain JS then dynamic PHP, and then gradually learning various frameworks/libraries like React, Node, Flask, Django, Spring, etc. I have also worked on infra tools like cPanel, AWS, Kubernetes, Docker, and many others. 

While I was in college the question of funding the websites was not an issue since the websites I built were developed for college activities and each of them had a budget. As I started working on personal projects with advanced frameworks, I realized that funding them matters, especially when you are young and do not have the privilege of 'seed' funding.

---

There are a few more things that I have understood from all these experiences until now

### Idea validation 
If you currently have just one or two ideas to build around, kick start one of them, don't wait to validate these ideas. Once you start building stuff and put your mind in value-creation mode more ideas would pop up. This seems like an intelligence privilege, but believe me, once you start working on an idea, things start popping up. 
Now, if you do have multiple ideas to work on, do a basic validation of the idea. Talk to people around you, ask them whether they think they have a use for your product in their lives. Don't just directly ask them "I am building XYZ. Would you use it?". They would say "Yes" without giving it much thought. The right question here would be to ask them whether they face the same problem? (the one that your product would solve). Ask them what solution they think could solve this (expect hyper-realistic answers). Now put your solution in front of them. Of course, everyone would be entitled to their opinion, everyone is emotionally attached to their thoughts and everyone thinks that their way is better. Now it is on you to decide what ideas you would incorporate in your solution.

### Idea to POC
Once you have the design ready in your mind (remember, it may not be perfect, you might not have figured out everything, that's fine, what is important is you kickoff) start developing the solution in any language and framework that you are comfortable in. You don't need to build it in Java just because Java is robust. You don't need to build micro-services, a monolith app would do your job. You don't need a Kubernetes cluster or highly-secured network. Understand that your job as a lone engineer is to build the solution first. Once you build it, then think of making it better.

### Tools for quick boot
As I said early, the aim is to quickly build a POC and it can be slow or have vulnerabilities (no one is going to hack you at this point of time). So to get the end-to-end solution up and running, you can use Heroku to host the app, ElephantSQL for PostgreSQL, 000webhost for MySQL, Mongo Atlas for MongoDB, etc. All these platforms provide free services, respectively.

### A view on no-code
No-code tools can help you quickly develop the solution. Though in the long run it would never sustain and you wouldn't be able to build every feature on it.

### Doing what is right
'First principle thinking' is very important in every aspect of life. You should have strong reasoning as to why you are using a certain technology to build something?. For example, if the team has decided to have a website where they can put the basic information about the product or the idea, the best solution here would be to build it within no time using WordPress or Wix. Just because you like Angular, don't invest your time in building the portfolio website using Angular. It is one thing to learn new technology and another to build and deliver something.

### Understand the risk and rewards
Understand the concept of trade-off. The trade-off between the development speed of the engineers and the performance & scalability of the application. The trade-off between using NoSQL & SQL databases, etc. Everything has its pros and cons, try to adapt the best out of each technology and deliver what is needed. Understand the needs and accordingly pick the tools. There is no point in cutting the cake with a sword. A knife has its **utility** and a sword has its own.

### Not all new tech is adaptable
Your product doesn't need to be built using the latest, cutting-edge technologies. Most of the technologies are built on C, C++ & Java, and frameworks that most people would think are old. But again it all boils down to the fundamentals of each and everything. Spring is still used after 20 years because its robustness and other characteristics. (Disclaimer: Node, Go, Python have their fair share and are not evil at all)
[Read this blog by Kailash Nadh](https://nadh.in/blog/fomo-yamo/)

### Remember to start small and grow big
The utmost important thing is to 'Start'. Start from wherever you want, write a simple code, create a minimal web page, and once you gain that momentum, don't stop.

---

Having said these points, one should expect at least a year for the product to be ready for a pilot. If it involves hardware, this time can go beyond 2 years. 

Read blogs published by engineering teams at some of the greatest startups: 
[Zerodha Tech](https://zerodha.tech/)
[Uber Engineering](https://eng.uber.com/)
[Tinder Engineering](https://medium.com/tinder-engineering)
[Airbnb Engineering](https://medium.com/airbnb-engineering)