Embracing the 3-Month Rule: A Pragmatic Approach to Building Unscalable Solutions
In the world of startups and innovation, a well-known piece of wisdom from Paul Graham resonates: “Do things that don’t scale.” However, the challenge lies in effectively implementing this principle in the realm of software development.
After eight months of building my AI podcast platform, I’ve developed a straightforward but effective framework: every unscalable tactic has a 3-month lifespan. At the end of this period, we evaluate whether the solution has added real value and should be further developed, or if it’s time to let it go.
As software engineers, we are conditioned to aspire toward scalable solutions from the onset—crafting intricate designs that can accommodate millions of users through microservices, distributed systems, and elaborate architectural setups. This is quintessential big-company thinking. However, in the startup environment, pursuing scalability prematurely can often turn into an expensive form of procrastination. Instead of preparing for hypothetical user bases and challenges, my 3-month rule encourages me to adopt simpler, more direct coding practices that yield real-world insights into user needs.
Ingenious Hacks That Work
1. Centralizing Everything on a Single VM
My entire stack—database, web server, background processes, and caching systems—runs on a single $40/month virtual machine with no redundancy and manual backups, stored locally. This setup may seem reckless, but it has allowed me to gain unprecedented clarity about my resource requirements over the past two months. I discovered that my platform usually hovers around 4GB of RAM usage. The Kubernetes architecture I almost went with would have led to managing idle containers and complex configurations.
Experiencing occasional crashes provides invaluable insights about system failures, allowing me to pinpoint real vulnerabilities rather than relying on assumptions.
2. Hardcoded Configuration Values
Configurations are embedded directly within the code base—such as:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
This design, although seemingly primitive, allows me to search through my code for configuration values within seconds. Each change—happening just three times in three months—is accompanied by a quick redeployment, saving me substantial engineering time compared to developing a dedicated configuration management service.
3. Utilizing SQLite in Production
Yes, I’m operating a multi-user web application on