The 3-Month Rule: A Pragmatic Approach to Unscalable Solutions in Tech Development
In the startup ecosystem, the renowned advice from Paul Graham to “do things that don’t scale” often goes unaddressed, particularly when it comes to technical implementation. As an engineer actively developing an AI podcast platform for the past eight months, I’ve crafted a unique framework that champions this concept: every unscalable approach is given a three-month trial period. Post that timeframe, a decision is made—either the method has demonstrated its value and deserves a robust implementation, or it is abandoned.
The reality is, we engineers are conditioned to prioritize scalability right from the outset. We envision sophisticated architecture—think microservices, distributed systems, and all the concepts that facilitate seamless experiences for millions. However, such foresight can lead to costly delays, especially in a startup environment. Often, the quest for scalability becomes a form of procrastination, unnecessarily complicating our processes while we attempt to optimize for hypothetical users and future challenges.
My three-month rule pushes me to adopt a more straightforward, even crude, coding style that prioritizes shipping quickly while gleaning real insights about user needs.
Current Infrastructure Hacks: Practical and Effective
1. Unified Virtual Machine Usage
In my setup, the database, web server, background jobs, and caching run on a single $40/month virtual machine, devoid of any redundancy or complex backups. This seemingly risky configuration has proven insightful; I’ve gleaned more about my true resource demands in two months than any capacity planning document could reveal. My application peaks at 4GB RAM, and the complex Kubernetes infrastructure I nearly built would have only been managing idle resources. Every crash—which has happened twice—offered unexpected, valuable lessons.
2. Hardcoded Configuration Management
Instead of utilizing configuration files or environment variables, I have hardcoded key constants throughout my code:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
The beauty of this approach lies in its simplicity. I can swiftly search my codebase for configuration values, and all changes are meticulously tracked via Git history. Over the past three months, I’ve adjusted these values only three times, significantly reducing both time and engineering resources compared to the time it would take to develop a configuration service.
3. SQLite as Production Database
Yes, I opted