Embracing the 3-Month Rule: A Pragmatic Approach for Startups
In the startup world, there’s a well-known mantra from Paul Graham: “Do things that don’t scale.” While this advice resonates deeply, the specifics of putting it into practice—especially in the realm of coding—tend to go unnoticed.
After eight months of building my AI podcast platform, I’ve crafted a straightforward framework that has significantly shaped my development process: each unscalable hack is allowed a lifespan of just three months. Following this period, it must either demonstrate its value and be transformed into a robust solution, or it will be discarded.
The startup Paradigm Shift
As engineers, our training often emphasizes the importance of scalability from the get-go. We dive into design patterns, microservices, and distributed systems—architectural marvels that can support millions of users. However, this perspective is often better suited for larger organizations.
In the startup environment, focusing solely on scalable solutions can lead to costly procrastination. We find ourselves optimizing for hypothetical users and addressing challenges that may never arise. My three-month rule compels me to write simpler, more straightforward code—code that is not only functional but also reveals the actual needs of users.
Insights from My Current Infrastructure Hacks
1. Consolidated Operations on a Single VM
Currently, my entire system—comprising the database, web server, background jobs, and Redis—runs on a single virtual machine costing just $40 a month. Yes, there’s no redundancy, and manual backups are conducted on my local machine.
Why is this a smart move? Within just two months, I gained invaluable insights into my resource requirements—much more than any theoretical capacity planning document could provide. My platform, expected to be resource-intensive, only peaks at 4GB of RAM. Had I pursued a complex Kubernetes setup, I would have been stuck managing idle containers and speculating about usage patterns. When the VM crashes, which it has done twice, I gather real data on failure points—often surprising ones.
2. Hardcoded Configuration Values
Configuration is essentially embedded in the code:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
With constants scattered across files, changing any value necessitates a redeployment, eliminating the fuss of configuration files or environment