Embracing the 3-Month Rule: A Pragmatic Approach to Non-Scalable Solutions
When it comes to startup development, many of us have heard the famous advice from Paul Graham: “Do things that don’t scale.” Yet, there’s a lack of guidance on how to put this principle into practice, particularly when coding. After eight months of working on my AI podcast platform, I’ve established a simple yet effective strategy: I allow any non-scalable workaround a lifespan of just three months. If it proves its worth, I’ll invest in scaling; if not, it gets the axe.
The Conflict of Scaling from the Start
As engineers, we often find ourselves trained to design with scalability in mind from the get-go—think along the lines of microservices, complex architecture, and distributed systems. However, this mindset is more characteristic of larger corporations. In a startup setting, aiming for scalable solutions too early can lead to unnecessary expenses and delayed decision-making. My three-month rule encourages me to produce straightforward, albeit imperfect, code that quickly validates what users truly need.
Current Infrastructure Strategies and Their Wisdom
1. Consolidated Resources on One VM
I operate my database, web server, and background jobs from a single virtual machine at a cost of $40 a month. While this approach lacks redundancy and relies on manual backups to my local machine, it has provided remarkable insights. In just two months, I’ve gained a clearer understanding of my resource requirements than any theoretical document could offer. It turns out my “AI-heavy” platform peaks at a mere 4GB RAM, suggesting that the elaborate Kubernetes setup I was contemplating would have involved managing largely unnecessary resources.
When issues inevitably arise—twice so far—I gain valuable feedback regarding the root causes, which are never what I initially anticipated.
2. Hardcoded Configuration Choices
My configuration is as straightforward as it gets:
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
With constants peppered throughout my files, any adjustments necessitate a redeployment. This may seem archaic, but its efficiency is undeniable. I can quickly search my entire codebase for any variable value, and every change is logged in my Git history. In the past three months, I’ve altered these values just three times, resulting in a total of 15 minutes spent redeploying