Embracing the 3-Month Rule: A Pragmatic Approach to Unscalable Solutions in Tech Development
In the tech world, the renowned advice from Paul Graham, “Do things that don’t scale,” often seems easier said than done, particularly when it comes to coding and development. However, after eight months of working on my AI podcast platform, I’ve developed an actionable framework that guides my approach: every unscalable solution is permitted a lifespan of three months. Following this period, it either stands up to scrutiny and is properly refined, or it is discarded.
As engineers, we are conditioned to aim for scalable solutions from the outset. We invest time in microservices, distributed systems, and intricate architecture designed for millions of users. However, this mindset tends to align more with large corporations rather than startups, where the pursuit of scalability often becomes a costly form of procrastination. Optimizing for non-existent users can lead to overly complex solutions that don’t address immediate needs. My three-month rule encourages a focus on simple and direct coding that actually gets deployed while offering insights into user requirements.
Practical Infrastructure Hacks That Yield Insight
1. Consolidated Resources on a Single Virtual Machine
Rather than dispersing my infrastructure across multiple systems, I opted to house my database, web server, background jobs, and Redis on a single virtual machine costing just $40 per month. This setup has zero redundancy and relies on manual backups to my local machine.
You may wonder how this could be advantageous. The truth is, I’ve gleaned more about my resource needs in these two months than any advanced planning document might have provided. My platform’s peak performance? Just 4GB of RAM. The intricate Kubernetes architecture I nearly implemented would have simply led to managing unused containers. When crashes occur (which they have, twice), I receive immediate feedback on system failures—often in ways I had not anticipated.
2. Simplified Hardcoded Configurations
I use a straightforward method of hardcoding configurations throughout my codebase, including constants for pricing tiers and user limits rather than using configuration files or environment variables.
The benefit here is straightforward: I can quickly search for specific configuration values across my entire codebase. Each price adjustment is captured in git history, and every configuration alteration undergoes a code review—even if it’s just me analyzing my own pull request. Opting to create a configuration service would have required a week’s worth of work, but due to infrequent changes, I’ve managed to deploy