The Three-Month Rule: A Practical Approach to Non-Scalable Solutions in Tech
In the tech world, there’s a popular adage attributed to Paul Graham: “Do things that don’t scale.” While this wisdom resonates with many startups, the methods for implementing this in the realm of software engineering often go unexplored. As I reflect on my journey of building an AI podcast platform over the past eight months, I’ve created a straightforward framework that I call the “Three-Month Rule.” This principle dictates that every non-scalable hack has precisely three months to prove its worth—after which it either gets developed into something sustainable or is discarded.
As engineers, we’re typically instructed to create solutions that can handle large-scale demands from the outset. We immerse ourselves in design patterns, microservices, and distributed systems aimed at accommodating millions of users. However, this mentality often leads to wasted time and resources in a startup setting. The reality is that writing scalable code too early can lead to expensive delays, optimizing for users that may never materialize. My three-month rule compels me to produce simple, straightforward code that is functional and teaches me more about user needs.
Insights from My Current Technical Practices
1. Consolidated on a Single Virtual Machine
I currently run my entire setup—a database, web server, background jobs, and caching—on a single $40-a-month virtual machine. This setup lacks redundancy, and I take manual backups to my local machine. This might sound reckless, but it’s genius in practice: I’ve gained invaluable insights into my platform’s actual resource usage in just two months. It turns out that my seemingly resource-intensive platform only requires 4GB of RAM at peak times. The complex Kubernetes architecture I almost deployed would have only served to manage underutilized resources. Additionally, when the system crashes (which it has twice), I receive clear data about the actual points of failure—information I couldn’t have predicted.
2. Hardcoded Configurations
For confidentiality purposes, consider the following settings defined directly in my code: pricing tiers, user maximums, and AI model selections are all hardcoded constants. This means any change necessitates a redeployment of the application. The advantage here is remarkable: I can search the entire codebase for any configuration in mere seconds. Each price modification is tracked in Git history, ensuring full accountability. In three months, I’ve refined these values just three times, translating into a meager 15 minutes of rede