Embracing the 3-Month Rule: A Practical Approach to Unscalable Solutions in Tech Development
When it comes to startup culture, many entrepreneurs are familiar with Paul Graham’s well-known advice: “Do things that don’t scale.” While this concept is often discussed, the practical application within the realm of software engineering is rarely examined.
In my journey of developing an AI podcast platform over the past eight months, I have discovered an effective framework that I call the “3-Month Rule.” This principle allows every unscalable hack to operate for a limited period, specifically three months. After this timeframe, each solution must either demonstrate its value, warranting further development, or be discarded.
Why we gravitate toward scalable solutions
As engineers, we are naturally inclined to design scalable solutions right from the start—think design patterns, microservices, and distributed systems that support millions of users. However, this approach often reflects big-company thinking and can be misaligned with the realities of a startup.
In the early stages of a venture, focusing on scalable code can often lead to costly delays as we create solutions for potential users who may never exist or problems that may never arise. My 3-month rule encourages me to write simple, straightforward code, which might initially seem “bad,” but is instrumental in helping me understand the real needs of my users.
Insights from My Current Setup
1. Unified Virtual Machine Infrastructure
For just $40 a month, my database, web server, background jobs, and Redis all operate on a single virtual machine (VM). While this setup lacks redundancy and relies on manual backups, it has proven to be invaluable. I’ve gained more insight into my actual resource needs in two months than any exhaustive planning document could provide. I’ve discovered, for example, that my AI-focused platform peaks at 4GB of RAM, indicating that the complex Kubernetes architecture I nearly implemented would have been effectively managing empty containers.
Whenever the system crashes (which has happened twice), I gain real, actionable data about failures—none of which were anticipated.
2. Hardcoded Constants for Configuration
My app’s configuration looks something like this:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
No separate configuration files or environment variables—just constants throughout the code. While changing a configuration requires a