Embracing the 3-Month Rule: A Pragmatic Approach to Non-Scalable Solutions
In the tech world, there’s a well-known piece of advice from Paul Graham: “Do things that don’t scale.” While this philosophy is often discussed, the process of applying it in the realm of coding is rarely explored. After dedicating eight months to developing my AI podcast platform, I’ve established an insightful framework that revolves around the concept of a three-month test for every unscalable solution I implement. If a hack demonstrates its value within this timeframe, it gets a robust build-out; if not, it gets retired.
As engineers, there’s a natural inclination to aim for scalable solutions from the outset. We often get caught up in architectural patterns, microservices, and distributed systems designed to accommodate massive user bases. However, this mindset can often lead startups to spend time and resources optimizing for a user base that might not even exist yet. My 3-month rule compels me to write straightforward, albeit imperfect, code that goes live, allowing me to uncover genuine user needs without unnecessary complexity.
Current Infrastructure Strategies: Embracing Simplicity for Efficiency
1. All Operations on a Single VM
I’ve consolidated my database, web server, background jobs, and caching onto just one virtual machine, which costs $40 a month. There’s no redundancy, and backups are done manually.
Why is this approach effective? It has given me invaluable insights into my resource requirements in just two months—far more than any theoretical document could offer. For instance, I’ve discovered that my platform’s maximum RAM usage hovers around 4GB, meaning the complex Kubernetes setup I almost initiated would have been overkill for my current needs. The sporadic crashes I’ve experienced have provided tangible data on what fails—often surprising and not what I initially anticipated.
2. Hardcoded Configurations
Instead of using configuration files or environment variables, I’ve opted for hardcoded constants scattered throughout my codebase:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
Although this might seem basic, it enables swift tracking of any configuration changes through the git history. In the last three months, I’ve made configurations just three times, which took a mere 15 minutes to redeploy—a stark contrast to the week it would take to implement