Embracing the 3-Month Rule: A Pragmatic Approach to Development
In the world of startups, it’s common to hear the advice from Paul Graham: “Do things that don’t scale.” However, translating this mantra into practical coding strategies often goes unaddressed. After eight months of developing my AI podcast platform, I’ve discovered a straightforward framework that I call the 3-Month Rule. Essentially, any hack that isn’t designed to scale will only be in place for three months. After this period, it either proves its worth and receives a more robust implementation or gets discarded.
Why It Matters: The Value of Quick Wins
As engineers, we often focus on building scalable solutions from the outset—think microservices, distributed systems, and intricate architectures capable of supporting millions of users. While this mindset is fundamental in larger organizations, it can become a hindrance in a startup environment. Here, overly complex code can turn into costly procrastination as we chase after hypothetical users and their needs. My 3-Month Rule urges me to embrace simpler, less polished coding—actions that allow me to ship quickly and gather real-world insights into user behavior.
Key Infrastructure Strategies That Have Proven Effective
Let me share some of my current “non-scalable” hacks, emphasizing that they are not just shortcuts, but strategic choices that serve my learning and product development goals.
1. Unified Virtual Machine
I run everything—a database, web server, background jobs, Redis—all on a single $40/month virtual machine. While this model lacks redundancy and relies on manual backups, the benefits are substantial: within just two months, I gained deeper insights into my actual resource needs than any theoretical capacity planning could offer. Underestimating demand has taught me valuable lessons, such as the fact that my platform rarely exceeds 4GB of RAM. The overly complex multi-container orchestration I flirted with would have only added unnecessary maintenance work.
2. Simplified Configuration Management
Instead of complex configuration management, my settings are hardcoded as constants in the codebase. Changing values requires a simple redeploy, but this method has allowed me to track modifications via Git history and quickly locate any configuration using a simple grep command. A dedicated configuration service might seem ideal, but in practice, I’ve only modified these constants three times in three months, justifying my simpler approach.
3. SQLite for a Lightweight Solution
To my surprise, running SQLite for my multi-user web application turned out to be