Embracing the 3-Month Rule: A Pragmatic Approach to Building Non-Scalable Solutions
In the tech world, the mantra “do things that don’t scale” famously advocated by Paul Graham is often cited. Yet, how do we actually translate this advice into actionable coding practices? Over the past eight months while developing my AI podcast platform, I’ve devised a straightforward system: every non-scalable workaround gets a lifespan of three months. After this period, it either earns its place through demonstrated value or is phased out.
As engineers, we’re typically conditioned to develop scalable solutions from the outset. The allure of design patterns, microservices, and sophisticated architectures seems vital for accommodating millions of users. However, this mindset often belongs to established companies, not startups.
In the early stages of a venture, obsessing over scalability can itself be a form of procrastination. We often end up optimizing for users that don’t yet exist or attempting to solve problems that may not arise. My three-month approach compels me to prioritize straightforward, even “flawed,” coding strategies that actually deliver value and clarify user needs.
Current Infrastructure Practices and Their Benefits
1. All Operations on a Single Virtual Machine
I’ve consolidated my database, web server, background jobs, and caching onto one $40-a-month VM. There’s no redundancy and backups are done manually to my local machine.
Why is this advantageous? Within just two months, I’ve gained more insight into my resource demands than any capacity planning document could provide. Interestingly, my AI-focused platform only peaks at 4GB of RAM. The complex Kubernetes orchestration I nearly set up would have been wasted on empty containers.
When the system crashes—which it has twice—I gather real, actionable data instead of speculation about what might fail.
2. Hardcoded Configurations
No environment variables, no configuration files—just hardcoded constants throughout my codebase, like:
python
PRICE_TIER_1 = 9.99
MAX_USERS = 100
Updating any setting requires a simple redeploy. This simple setup allows me to quickly search through my code for configuration values, enables traceability through version control, and minimizes extensive engineering time. In the last three months, I’ve changed values only three times, saving me countless hours by sidestepping the intricacies of a dedicated config service.
3. SQLite for My Production Environment
Surprisingly, I’ve opted for SQLite in