Embracing the 3-Month Rule: A Practical Approach to Unscalable Solutions
In the world of startups, there’s a well-known mantra from Paul Graham: “Do things that don’t scale.” However, the challenge lies in translating this concept into actionable steps, especially when it comes to software development. After eight months of building my AI podcast platform, I’ve established a simple yet effective methodology: every hack that lacks scalability is given a strict three-month trial period. Following this timeframe, the solution either proves its worth and is enhanced or is retired for good.
Rethinking Scalability
As engineers, we often condition ourselves to create scalable solutions from the outset. We become enamored with advanced design patterns, microservices, and complex distributed systems—all designed to accommodate millions of users. However, this mindset often serves the interests of established companies and can lead startups into costly delays.
For a nascent business, focusing on scalable code may simply equate to procrastinating on essential development. By adhering to my 3-month rule, I refrain from over-optimizing for hypothetical users; instead, I prioritize straightforward, functional code that allows for real-world user feedback and learning.
My Pragmatic Infrastructure Choices
1. Consolidated Resources on a Single VM
My entire stack, including the database, web server, background jobs, and Redis, operates on a single virtual machine costing $40 per month. While this appears risky, it’s ironically genius in practice. In just two months of operation, I’ve gained invaluable insights into my real resource needs. For example, my “AI-heavy” platform only peaks at 4GB of RAM, which means the complex Kubernetes setup I had considered would have been largely unnecessary.
Moreover, every crash (of which there have been two) has provided essential data on system vulnerabilities—insights I couldn’t have anticipated.
2. Hardcoded Configuration Values
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
By forgoing configuration files and environment variables in favor of hardcoded constants, I simplify the development process. Changes necessitate a redeployment, but this has proven to be an efficient trade-off. Since I’ve only altered values three times in three months, I’ve saved myself potentially 40 hours of engineering time in exchange for just 15 minutes of redeployment.