The 3-Month Rule: A Pragmatic Approach to Unscalable Practices in startup Development
In the dynamic world of startups, the common wisdom from industry expert Paul Graham to “do things that don’t scale” is often encountered. Yet, a critical question remains: how does one implement this concept within the realm of coding?
As I embark on building my AI podcast platform over the last eight months, I have developed a straightforward framework centered around a pivotal principle: every unscalable solution gets a lifespan of exactly three months. After this period, it must either demonstrate its worth and transition into a robust implementation or be phased out entirely.
The Challenge of Scalability Mindset
Engineers are typically trained to prioritize scalability from the get-go. We craft complex architecture using design patterns, microservices, and distributed systems, aiming to accommodate countless users. However, this mindset often aligns with operating in established companies rather than startups.
In early-stage ventures, building scalable solutions can become an expensive form of procrastination, focused on hypothetical users and addressing challenges that may never materialize. My three-month rule compels me to write straightforward, albeit imperfect, code that not only ships quickly but also enables me to understand actual user needs.
Innovative Infrastructure Hacks: A Smart Approach
1. Utilizing a Single Virtual Machine
Currently, my entire setup — database, web server, background jobs, and Redis — operates seamlessly on a single virtual machine costing $40 per month. While it lacks redundancy and relies on manual backups, this unorthodox choice has proven effective.
What I’ve learned is that I’ve gained insights into my resource requirements in record time. My platform, which I assumed would be resource-intensive, rarely goes beyond 4GB of RAM, meaning the elaborate Kubernetes infrastructure I considered might have been managing unnecessary components.
2. Hardcoding Configuration Values
Take a look at my setup:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
Instead of utilizing configuration files or environment variables, I hardcode constants throughout the system. While this practice entails redeployment for any changes, it affords me the unparalleled advantage of easily tracking every update through my Git history. Over three months, I’ve only had a handful of changes, justifying the simplicity over what could have been an overly complex configuration service.