Embracing the 3-Month Rule: A Pragmatic Approach to Building Unscalable Solutions
In the world of startups, the term “do things that don’t scale” might sound familiar, especially if you’ve heard Paul Graham’s famous advice. However, the challenge often lies in translating that sage advice into actionable steps within the realm of software development. After spending eight months developing my AI podcast platform, I’ve come up with a straightforward framework: each unscalable solution I implement is given a lifespan of three months. At the end of this period, it either demonstrates its viability and is rebuilt, or it’s discarded.
As software engineers, we are conditioned to prioritize scalable architecture from the outset. Whether it’s utilizing design patterns, microservices, or distributed systems, we’re often fixated on the ability to handle millions of users. However, this mindset is more suited to established enterprises. In a startup setting, aiming for scalable solutions prematurely can lead to expensive delays, as we find ourselves optimizing for users that don’t exist yet, effectively sidestepping the immediate needs of our current audience.
My three-month rule compels me to adopt a more straightforward coding approach—embracing so-called “bad” code that delivers real insights and allows us to grasp what users genuinely require.
My Current Infrastructure Hacks and the Genius Behind Them
1. Single VM Setup
My entire platform—database, web server, background jobs, and caching—is running on a single $40/month virtual machine. Sure, this setup has zero redundancy and relies on manual backups to my local machine. But here’s the upside: I’ve gained invaluable insights about my resource needs in just two months, insights that no amount of forethought or capacity planning could have provided.
For instance, my platform peaks at just 4GB of RAM. The sophisticated Kubernetes setup I nearly implemented would have required management primarily of empty containers. When my system crashes (which it’s done twice), I’m able to analyze what went wrong—and it’s never what I initially anticipated.
2. Hardcoded Configuration
With constants like:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
I’ve decided against separate configuration files or environment variables. This means that any change necessitates a redeployment, but the trade-off is worth it. I can quickly search through my entire codebase