Embracing the 3-Month Rule: A Pragmatic Approach to Unscalable Solutions in Tech
In the tech world, we often hear the advice from Paul Graham: “Do things that don’t scale.” However, the actual implementation of this philosophy, especially within the realm of software development, is rarely discussed.
After spending eight months developing my AI podcast platform, I have established a straightforward framework: any unscalable hack I’ve implemented is granted a lifespan of three months. At the end of that period, it must either demonstrate its worth and be developed into a robust solution, or it will be discarded.
As engineers, we are frequently conditioned to focus on creating scalable solutions from the very beginning. We dive headfirst into concepts like design patterns, microservices, and distributed systems—building robust architectures aimed at supporting millions of users. While this approach is suitable for larger organizations, it can be a costly misstep for startups.
In my experience, striving for scalability can lead to wasted time and resources. After all, you’re often building for users who may not even exist yet. My three-month rule compels me to prioritize crafting simple, direct, albeit imperfect, code that not only gets deployed but also uncovers the real needs of my users.
Inventory of My Current Infrastructure Hacks
1. Consolidated Operations on a Single VM
Currently, my database, web server, background tasks, and cache management are all hosted on a single virtual machine that costs a mere $40 per month. This setup lacks redundancy, and I rely on manual backups to my local machine.
Why is this an intelligent decision? In just two months, I’ve gained more insights into my actual resource requirements than any prior capacity planning document could provide. I’ve learned that my “AI-heavy” platform only peaks at 4GB of RAM—far less than what I would have consumed running a complex Kubernetes setup aimed at managing numerous empty containers.
Moreover, when system crashes occur (and they have, twice), I receive genuine data on what failed. Spoiler alert: the failures were never what I anticipated.
2. Static Configuration for Targeted Efficiency
For instance:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
These constants are embedded throughout my codebase, eliminating the complexity of configuration files and environment variables. While redeployment is required