Today brings our incredible journey to an end. But not all is at a loss. We leave behind a legacy of great technology and a team that's ready for the next challenge. In the great startup tradition, I decided to write this post to let others learn from our mistakes.
Like so many other startup stories, ours began as a collection of nerds that wanted to change the world. We didn't know how or what we would build, but we were absolutely certain of one thing. We wanted our startup to be a temple of technical excellence. A place where technology comes first and where people can express themselves through the tools that they use.
We talked with hundreds of developers in the industry, we analyzed the trends and read hacker news obsessively until we knew the perfect stack for our project. Saying that we did our research would be an understatement.
Having secured plenty of funding, we set to work. Hiring is a fundamental part of a startup's success, and we excelled at it. We set a high bar - only developers with popular open source projects would be invited to interviews. GitHub stars were our main metric for hiring, and it worked remarkably well.
Very soon we had an incredible team of people who *loved* technology. We felt there wasn't a challenge we couldn't tackle. The team brainstormed ideas for what we would like to build, and set to work.
In no time, we had an incredible architecture in place. An elegant code base, microservices, orchestration and configuration management played like a beautiful symphony. Our application was distributed, load balanced, fault tolerant and monitored, with metrics and dashboards galore.
But we didn't just settle for good. We rewrote our microservices from Node to Go to C++ and then back to Node. On every step, we saw 20% performance improvements. It was breathtaking what our team was capable of.
We pushed back the launch for two months to tweak our build system to perfection. We now used Github Actions, Bitbucket Pipelines, Gitlab CI and a cluster of AWS hosted Jenkins instances. We developed our own distributed management system so that everything was perfectly coordinated. The system itself was delivered using the same build infrastructure. It was truly magical.
The technical challenges were immense, but the team was up to the task. In the few weeks before launch we pushed hard. We worked 10 hour days with no weekends until we had everything in place. It was launch day.
We opened the floodgates. We shared the project on Twitter and Instagram, posted to HN and wrote a medium post. But, try as we might, no one was signing up.
The team's spirits were down - the big launch we were working so hard towards never happened. Emergency meetings were held. Difficult conversations were had. And it was decided.
We had to rewrite everything in $HOTLANG.
Rewriting your entire code base in another language is an immense challenge. But not to our team. We had the brightest engineers, the best test coverage, the most elegant build system. We knew what we were doing.
Fast forward a couple more months of 12 hour shifts and we were done. Everyone knew that this was our last chance. This was our moment to shine.
We launched v2 of our product with a splash. A big social media campaign, live streams, paid sponsorships. We threw everything we had.
But it was not enough. We had a few sign ups by friends and family, but the customers were not there. It was game over for us. We returned the little money we had left to the investors and started to wind things down.
A few months have passed since these fateful events. And we now know what our critical mistake was. It is not about what the perfect tech stack *is*. By the time you get to market, the perfect stack would have changed, and with it, your chances of success.
We were just too late to the market. $HOTLANG had already fallen out of favor by the time of the v2 launch. Had we had more funding, we would have taken the time to rewrite our app in $ELITELANG instead. Our startup could have been a unicorn.