Embracing the 3-Month Rule: A Scalable Approach to Unscalable Solutions in Tech
In the world of startups, there’s a well-known mantra from Paul Graham: “Do things that don’t scale.” While this advice resonates with entrepreneurs, the challenge emerges when trying to implement it in the realm of software development. After eight months of developing my AI podcast platform, I’ve established a straightforward principle that guides my decisions: any workaround that lacks scalability is given a trial period of three months. At the end of this period, I evaluate whether it has delivered significant value and should be refined or if it will be phased out.
Typically, software engineers are trained to prioritize scalable solutions from the get-go, focusing on intricate architectures, microservices, and distributed systems designed to handle vast user bases. However, in a startup environment, aiming for scalability too early often results in costly delays. My three-month rule compels me to create straightforward, sometimes “imperfect,” code that gets implemented quickly, allowing me to gather valuable insights regarding real user needs.
My Practical Infrastructure Hacks: Smart Solutions for Immediate Learning
1. Centralized Operations on a Single Virtual Machine
I run my entire setup—database, web server, background jobs, and Redis—on a single virtual machine costing just $40/month. While this might seem reckless, the simplicity has offered incredible insights. In just a couple of months, I’ve identified my actual requirements much better than any capacity planning analysis could predict.
Surprisingly, my “AI-intensive” platform only spikes at around 4GB of RAM. Had I continued my initial plan to implement a Kubernetes system, I’d have been managing a cluster of idle containers instead of directly addressing current challenges, especially when my VM crashes—an event that has happened a few times and provided valuable data on where real vulnerabilities lie.
2. Hardcoded Configurations for Efficiency
I utilize hardcoded values throughout my codebase—such as pricing tiers and active user limits. While it lacks the elegance of a configuration service, it allows for quick adjustments via redeployment.
The efficiency lies in my ability to swiftly search and track changes. In three months, I’ve made only a few configuration updates, saving myself hours of engineering work that would have gone into a more elaborate solution that I didn’t need.
3. Utilizing SQLite for Production Environments
It might surprise some, but I have chosen SQLite as my database for a web application supporting multiple users. My entire database is