Embracing the 3-Month Rule: A Pragmatic Approach to Non-Scalable Solutions in Tech Startups
In the fast-paced world of tech startups, one piece of wisdom often stands out: “Do things that don’t scale,” as famously advised by Paul Graham. However, translating this idea into practical implementation, especially within the realm of coding, poses a unique challenge.
After dedicating eight months to developing an AI podcast platform, I’ve crafted a straightforward strategy: any non-scalable hack is given a lifespan of just three months. At the end of this period, the solution must either demonstrate its value and evolve into a more robust system or face extinction.
The startup Dilemma: Scalable Solutions vs. Practical Coding
As engineers, we are frequently conditioned to prioritize scalable solutions right from the outset. The allure of design patterns, microservices, and intricate architectures that can accommodate millions of users is undeniably strong. Yet, this ‘big company mindset’ can often lead to costly delays in the startup world. For fledgling companies, investing time and resources in optimizing for nonexistent users can be mere procrastination.
The three-month rule I’ve implemented compels me to engage in creating simple, sometimes “messy,” code that can be deployed quickly, allowing me to discover what users genuinely require. Below are some of the unconventional infrastructure strategies I’ve adopted, along with the rationale behind each.
Infrastructure Insights
1. Everything Runs on a Single Virtual Machine
I operate my database, web server, background jobs, and Redis all from one $40/month virtual machine. There’s no redundancy, and I perform manual backups locally.
This approach has its merits: within just a couple of months, I’ve gained insights about my actual resource demands that no capacity planning document could provide. My AI-focused platform only peaks at 4GB of RAM, so I avoided unnecessary complexity like Kubernetes, which would have required managing empty containers. Each crash (yes, it’s happened twice) offers real-time data on what fails—revealing insights I never anticipated.
2. Constant Configuration Across the Board
Rather than utilizing configuration files or environment variables, I rely on hardcoded constants throughout my codebase:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
This method, while seemingly primitive, grants me the