Embracing the 3-Month Rule: A Practical Approach to Building Non-Scalable Solutions
In the world of tech startups, there’s a phrase that often gets repeated: “Do things that don’t scale.” This advice from influential thinker Paul Graham is widely recognized, yet the implementation of this principle, particularly in coding, remains largely uncharted. After dedicating the past eight months to developing my AI podcast platform, I’ve created a straightforward framework: every unscalable solution has a lifespan of precisely three months. At the end of that period, we either invest in a robust version of that solution or let it go.
The Paradox of Scalability in Startups
As engineers, we are systematically trained to pursue scalable solutions from the outset. We idealize sophisticated design patterns, microservices, and distributed systems that can effortlessly support countless users. However, this mindset is often fruitless in a startup environment. Investing time in scalable code can lead to an expensive form of procrastination, as we focus on potential users who may never exist and issues that we might never encounter.
The three-month rule compels me to write straightforward, albeit less-than-perfect, code that is deployable. This approach has been instrumental in revealing the actual needs of my users.
Current Infrastructure Hacks: Why They Make Sense
Let’s break down my unscalable implementations and the lessons they’ve imparted:
1. Consolidation on One Virtual Machine
Everything from the database to the web server runs on a single $40/month virtual machine (VM). There’s no redundancy, and backups are manually done to my local system.
This may sound reckless, but it’s actually brilliant. In just two months, I’ve gained a clearer understanding of my resource requirements than any capacity plan could provide. It has become apparent that my “AI-driven” platform peaks at 4GB of RAM. The intricate Kubernetes architecture I nearly constructed would have only served to manage idle containers.
Whenever the system crashes (twice so far), I gather real insights into the causes. Surprisingly, the failures are never what I anticipated.
2. Hardcoded Configurations
With constants directly embedded in my code, such as:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
I’ve eliminated the need for configuration files or environment variables. Changes require