Embracing the 3-Month Rule: A Pragmatic Approach to Software Development
In the world of startups and innovation, the wisdom of Paul Graham rings true: “Do things that don’t scale.” Yet, when it comes to implementing this advice in the realm of software development, few share practical insights. After spending the past eight months creating my AI podcast platform, I’ve devised a straightforward strategy: any unscalable solution is given a lifespan of just three months. Post that period, it either demonstrates its worth and is refined or is discarded.
As programmers, we are often conditioned to prioritize scalability from the outset, focusing on complex architectures like microservices, distributed systems, and other elaborate designs aimed at accommodating millions of users. However, this approach is more aligned with the mindset of large corporations than that of agile startups.
In the fast-paced startup environment, aiming for scalable solutions can often lead to costly delays as you find yourself optimizing for potential users who may not materialize. My three-month rule compels me to develop straightforward, even subpar code that is deployable and provides firsthand insights into user needs.
My Ingenious Infrastructure Hacks
1. Consolidation on a Single Virtual Machine
Currently, everything from the database to the web server and background processing operates on a single $40/month virtual machine with zero redundancy and manual backups to my personal computer.
This arrangement is proving to be incredibly valuable; I’ve gained deeper insights into my resource requirements within just two months than any capacity planning document could offer. For example, I learned that my platform’s peak usage demands only 4GB of RAM. The complicated Kubernetes setup I contemplated would have been a misallocation of resources, only managing idle containers.
When issues do arise, which has happened a couple of times, I gather tangible data about the cause, often revealing surprises in what actually breaks.
2. Simplistic Hardcoded Configuration
Instead of utilizing configuration files or environment variables, I employ hardcoded constants throughout my codebase:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
This straightforward configuration allows me to quickly search for any value in the codebase. Additionally, tracking changes has become streamlined with Git history acting as a log for every modification. Given that I’ve changed values only three times in three months, this approach has saved me significant engineering hours