Embracing the 3-Month Rule: A Practical Approach to Developing Non-Scalable Solutions
In startup culture, the mantra often echoes: “Do things that don’t scale.” However, the implementation of this advice in the realm of coding is seldom discussed. Over the past eight months, while developing my AI podcast platform, I’ve formulated a unique framework—the 3-month rule. This guideline dictates that any temporary, non-scalable solution is given three months to prove its worth. After this period, it either evolves into a robust system or is phased out.
The challenge for many engineers is the ingrained mindset of delivering scalable solutions right from the outset. We’re trained to think in terms of design patterns, microservices, and distributed systems that accommodate millions of users. While this approach works well in larger organizations, for startups, it often results in what I like to call “costly procrastination.” Instead of solving real problems, we find ourselves optimizing for hypothetical users who aren’t even on the scene yet. My 3-month rule encourages me to create straightforward, albeit imperfect, code that can be deployed rapidly, enabling me to glean insights into actual user needs.
Current Infrastructure Hacks: Why They Make Sense
Here’s a breakdown of my current technical framework and the rationale behind it:
1. Consolidated Operations on a Single VM
Running everything—including my database, web server, background jobs, and Redis—on a single $40/month virtual machine has been a game changer. While it lacks redundancy and relies on manual backups, it has provided invaluable insights into my resource requirements, revealing that my AI platform only peaks at 4GB RAM. The intricate Kubernetes setup I nearly attempted would have resulted in managing unused containers. When issues arise (and they have), I gain real-world data about failures—insight that often surprises me.
2. Simplistic Hardcoded Configurations
I’ve opted for a consistent approach with hardcoded values throughout my code. By avoiding config files and environmental variables, all configuration changes necessitate a redeployment. The upside? I can quickly search my entire codebase for any configuration value and track changes through version control, all without the overhead of creating a dedicated configuration service. In just three months, this strategy has saved me both time and frustration.
3. Utilizing SQLite for Production
Believe it or not, I’ve employed SQLite in a multi-user web application, managing a modest database size of 47MB while comfortably supporting