Embracing the 3-Month Rule: An Engineer’s Guide to Building Learning-Focused Solutions
In the world of startups, one piece of advice stands out: “Do things that don’t scale,” as famously articulated by Paul Graham. Yet, there’s often a gap in understanding how to put this principle into practice, especially within the realm of software development. After eight months of constructing my AI podcast platform, I’ve developed a personal framework that I call the “3-Month Rule,” which focuses on unscalable solutions that serve as quick experiments before committing to more robust architectures.
The essence of this rule is simple: every unscalable approach is given a lifespan of three months. After this period, it needs to demonstrate its value through user feedback, or it gets the axe. This philosophy stands in stark contrast to the conventional mindset of engineers, who are often inclined to build intricate, scalable systems from the very beginning. Yes, concepts such as design patterns, microservices, and distributed systems are impressive, but they can also represent a form of procrastination in a startup context.
startups often find themselves optimizing for a user base that doesn’t exist yet, solving issues that may never arise. By adhering to my 3-Month Rule, I focus on writing straightforward, albeit less elegant, code that actually gets deployed. This not only propels my project forward but also provides invaluable insights into user needs.
Current Infrastructure Hacks: Learning through Simplicity
1. Single VM Setup
All services—including the database, web server, and background processes—run on one $40/month virtual machine. While this setup lacks redundancy and relies on manual backups, it has been instrumental in understanding my resource needs. Within just two months, I’ve realized that my AI platform has peak memory requirements of only 4GB. Had I gone down the route of implementing a complex Kubernetes architecture, I would have been managing a system that wasn’t necessary and filled with idle resources.
Every crash (which has happened twice) has provided real-world data that reveals unexpected points of failure, illuminating areas for improvement.
2. Hardcoded Configuration
By defining configuration directly in the codebase—such as pricing and user limits—I can easily locate and adjust parameters. Although it may seem primitive, this method allows for swift changes with minimal overhead. In just three months, I’ve made only three modifications, which involved less than 15 minutes of redeployment time versus a week of building a configuration management service.