Hello, friends.
This is not the usual weekly newsletter. I am interested to write longer essays and this is the first try. I’m not sure how often I’ll be able to make posts like these.
I hope you like this new format, feedback is always welcome. 😉
Introduction
Technical debt (or friction) poses a significant challenge for startups as they navigate the fast-paced and competitive landscape of their markets. While focusing on achieving product-market fit, startups often encounter a slowdown and unreliability in their software delivery lifecycle over time.
Founders get focused on delivering features fast or onboarding customers, which provide short-term gains, but also result in long-term consequences that hinder a startup's future growth and success. This essay explores the impact of technical debt on startups, highlighting key areas where it can manifest and the challenges it presents.
That Old Story of $STARTUP
A couple of guys have some business or product idea. They read books just like The Lean Startup and Zero to One as guidance. They build a Django or Rails app and heavily rely on early productivity gains these frameworks provide. They go fast to the market and attract customers. The team grows a little. Customers start asking for customizations and engineers start to bend the framework, there is no time to rebuild the app right now. They get funding. They hire a sales team. A considerable number of customers buy the product. The app starts to get slow and unreliable. Outages become frequent and customers start to get angry. The founders finally decide it is time to rebuild it “right“. They multiply their engineering headcount by some factor, start a painful and stressful migration to Microservices™, then brag about how great they are in their tech blog. Some more funding rounds get raised. They launch an IPO and stock price rockets. The founders buy private jets, start philanthropic organizations and go to private islands to influence politics from third-world countries with a privileged landscape view.
This is the story you heard about hundreds of times. This seems like it is the only way to build a profitable high-growth business. But we almost always hear the stories from the victorious, we barely hear from the losers, from the founders that tried this same path but failed in some point along the way.
When technical debt starts to hinder growth
As startups find product-market fit and need to scale fast, they may face a challenging dilemma:
Push for more growth, further deteriorating the codebase, increasing the risk of losing customers and damaging their reputation.
or
Slow down sales to fix structural problems, but get pressure from investors and risk running out of funds.
Sometimes, the technical debt is so crippling that no matter what path they choose, they are doomed either way. I’ve worked for a startup in that situation and it failed miserably.
I believe startups have to work really hard to not be in this position, but it is not a straightforward task. Very often they have to fight to stay afloat and seize any opportunities that come their way. While you can be a highly competent designer, guaranteeing that your domain models and processes account for arbitrary future changes in the business landscape is an almost impossible endeavor.
Rapid growth and tech fragmentation
As startups grow rapidly, different teams may adopt technologies or work in isolation to meet specific objectives. This semi-decentralized process can result in a fragmented technology stack, where various parts of the organization rely on different programming languages, tools, databases, and infrastructure.
Consequently, maintaining and integrating these diverse technologies becomes increasingly complex. It leads to communication gaps, compatibility issues, difficulties to hire culturally-aligned developers, and duplicative efforts.
The resulting technology fragmentation not only slows down development and makes collaboration hard, but also amplifies the accumulation of technical debt, making it challenging to scale efficiently and adapt quickly to market changes.
To avoid this fragmentation, startups can invest early in foundational tooling and developer experience, this leads teams to reuse past efforts and constrains their decisions to achieve high performance.
An alternative to this mess
Startups waste a lot of money on migrations. Early investment in high value practices, thoughtful domain modeling and fearless refactors can generate an extreme business advantage.
Healthy codebases and engineering processes can lead a startup to launch features quickly and outpace their competition.
Instead of building systems over fragile foundations, founders can go an extra mile and start things in a sustainable path.
nice essay :)