Title: Embracing the 3-Month Rule: A Practical Approach to Unscalable Coding for Startups
In the entrepreneurial landscape, there’s a well-known adage from Paul Graham: “Do things that don’t scale.” However, the practical application of this wisdom in coding is seldom explored, especially in the fast-paced world of startups. After dedicating eight months to the development of my AI podcast platform, I’ve devised a straightforward framework: any hack that isn’t scalable receives a timeframe of just three months to demonstrate its value. If it fails to prove its worth in that time, it gets the chop.
As engineers, we often find ourselves focusing on building solutions that are designed for scalability from the outset. We immerse ourselves in advanced design patterns, microservices architecture, and distributed systems that can cater to millions of users. However, this mindset is typical for larger companies, while at the startup level, overly scalable code can often become a form of costly procrastination. Instead of solving real problems for future users, my three-month rule encourages the use of simple, direct, and sometimes imperfect code. This approach allows me to learn what my users truly need.
Here’s a glimpse into the current infrastructure strategies I’ve adopted—and why they’re not just practical, but smart:
1. Unified Virtual Machine Environment
All components—my database, web server, background jobs, and even Redis—operate on a single $40-a-month virtual machine with no redundancy and manual backups to my local system.
Why is this a strategic move? In just two months, I’ve gained more insights into my actual resource needs than any capacity planning document could offer. Surprisingly, my “AI-heavy” platform only peaks at 4GB of RAM. Had I pursued a complex Kubernetes setup, I would have wasted time managing idle containers.
When the system experiences crashes (which has happened a couple of times), I obtain invaluable data about true points of failure—often revealing unexpected insights.
2. Hardcoded Configurations
Instead of utilizing configuration files or environment variables, I have constants embedded within my codebase, such as:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
While this may seem primitive, it is incredibly effective: any configuration change simply requires a redeployment, and I can quickly search through my codebase for values.