#💡reflection There are myriad ways to implement even a small software development task. Each approach has its pros and cons — and its cost, which can vary from almost nothing to a fortune. Software developers and tech companies usually strive to build the highest-quality solutions they can. But it's important to note that the 'highest quality' may not be high enough, it may be exactly what's needed, or it may be a complete waste of time and money. That depends on the level of engineering expertise and the startup stage. Thus, to be lean, fast, and efficient, a startup must change its development focus at each stage of its evolution. And as a founder — even if you’re not technical — you need to understand how to control them at every stage. --- ## Seed: search for market fit This is the beginning when the new organization is searching for its marketplace. The ultimate goal at this stage is to try new business models as fast as possible, without paying too much attention to quality. During this period, the requirements can be dramatically changed many times. Probably, most of the code will eventually be thrown away. The influence of bugs is low, as there are few to no clients, usually friends and family. It's useless to invest much money in quality at this phase. Paying for good quality is dangerous, as it slows down the velocity of market research and burns money. **Priority**: Speed **Guidelines**: - Search for the fastest way to try your ideas. "Quick and dirty" is the best motto for this stage. - Research available tools and services. Try to use them to pilot your idea. - Be warned when you hear talks about solution quality, performance, scalability, and other forms of rocket science, take some notes on the non-functional requirements for the future and forget about them for now. - Watch yourself, as you’ll always believe that your current idea will succeed and tend to invest in good quality too early. - After finding your clients and moving to the next stage, be ready to hear from new team members how fragile your code is. They will often mutter about how great it would have been to use one architectural approach or another from the beginning. It’s better to start in that way than to burn out all the money and create a perfect product that nobody needs. ## Tree: gain the niche Now the startup has found its market and started acquiring more and more clients.  At this stage, the changes in the existing requirements become less dramatic. New features are usually added. However, the influence of bugs grows as more and more clients arrive.  The platform users must see that the solution is stable and is constantly evolving. Hence the platform quality comes to the fore. **Priority**: Quality of the development process. **Guidelines**: - Start investing more in the platform quality. - Ensure the following must-haves for the development processes: - A steady flow of frequent releases. - Automated deployments. - The mandatory code review stage. - Mature functional and regression testing. - Prepare the solution for the main architecture changes during the next phase. ## Forest: scale globally The startup has a successful business model. Now it’s time to scale it. At this stage, the existing requirements are rarely changed. New features still appear, but non-functional requirements like throughput, responsiveness, and availability become the most important. The influence of bugs is extremely high, and the robustness of the platform is crucial. **Priority**: Architecture quality. **Guidelines**: - It's time for the biggest investments in the platform quality. - Reimplement some modules to improve architecture if necessary. - Ensure the following must-haves for the development process: - Mature non-functional testing. - Vertical teams - teams can implement and release new features independently. - Horizontal scaling - the solution is split into small independent blocks, and each one can be scaled by adding more instances. - Canary deployments - new features can be tested on a small fraction of users. --- ## Summary Know your stage and make sure that every teammate understands the current priority.  Make a habit of generating a list of options differentiated by time, cost, and quality before making any decisions. Choose the best option according to your stage: - Cut corners and make changes fast when searching for market fit. - Improve the development process and provide a stable flow of new features when growing. - Upgrade the platform architecture and boost the platform quality to scale globally. >[!tldr] PS The startup evolution is not always so straightforward. Moving from one stage to another requires time and effort. A successful MVP on the **Seed** stage may not work for a broader audience in the **Tree** phase. Or an efficient solution on the **Tree** phase may not scale on the new market. All those cases lead back to the **Seed**, and the development priority must be changed accordingly. --- <font style="color: #F86759">Contributors:</font> *[[Oleksandr]]* <font style="color: #F86759">Last edited:</font> *2024-05-03*