Embracing the 3-Month Rule: A Pragmatic Approach to Development
In the startup world, the mantra “do things that don’t scale,” popularized by Paul Graham, is well-known, yet few discuss how to practically apply this advice to coding and development practices. Over the past eight months while developing my AI podcast platform, I’ve crafted a straightforward framework—the 3-Month Rule. This principle allows each unscalable workaround a trial period of three months, after which it must either prove its value and evolve into a robust solution or be discarded.
The common training for engineers often emphasizes building scalable solutions from the outset. We’re taught about design patterns, microservices, and distributed systems that can efficiently manage millions of users—advice that seems ideal for large corporations. However, in the world of startups, crafting scalable code can often be a form of costly procrastination. This mindset leads us to invest energy optimizing for users who may not even exist yet, addressing issues we might never face. My 3-Month Rule compels me to write straightforward, even “imperfect” code that gets deployed, allowing me to learn firsthand what users truly need.
Current Infrastructure Hacks: A Strategic Perspective
1. Single Virtual Machine Operation
All essential services—database, web server, background processes, and caching—operate from a single $40/month virtual machine. While this method lacks redundancy and relies on manual backups, it has proven to be incredibly insightful. I’ve gained a clearer understanding of my resource requirements over two months than any extensive planning document could provide. For instance, my “AI-heavy” platform peaks at just 4GB RAM. The intricate Kubernetes architecture I nearly implemented would have involved managing idle containers rather than serving genuine user demand.
When the system does crash—an event that has occurred twice thus far—I gather real data about breaking points, revealing truths I hadn’t anticipated.
2. Hardcoded Configuration
In my setup, configuration settings are contained as constants within the codebase, such as:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
There are no configuration files or environment variables. To change a setting, I need to redeploy the entire application. However, this approach has its advantages: I can rapidly search my entire codebase for any configuration value, and every change made