The Three-Month Experiment: A Framework for Practical Development
In the world of startups, the advice from entrepreneur Paul Graham to “do things that don’t scale” often resonates, yet it rarely discusses the practical application of this concept within the realm of coding. After dedicating eight months to crafting my AI podcast platform, I’ve devised a straightforward approach: I allow every temporary, non-scalable solution to exist for three months. If it doesn’t prove its worth, it’s scrapped.
The startup Paradigm: Why Scalability Can be a Trap
As software engineers, we are conditioned to pursue scalable solutions from the outset—think sophisticated design patterns, intricate microservices, and robust distributed systems. While these methods are essential for large enterprises, they can become costly distractions for startups. Optimizing for a user base that hasn’t yet materialized can often lead to wasted resources and effort.
My three-month rule encourages me to embrace simpler code—what some may deem “bad”—that delivers tangible results and offers insights into user needs.
Current Infrastructure Approaches: Learning Through Simplicity
1. Consolidation on a Single VM
I operate an entire infrastructure—database, web server, background jobs, and caching—on one $40/month virtual machine (VM), accepting the risks of zero redundancy and conducting manual backups to my local system.
Here’s the benefit: within two months, I’ve gained more clarity about my resource utilization than any capacity planning document could ever provide. As it turns out, my platform requires only 4GB of RAM during peak times. The complex Kubernetes architecture I considered? It would have required managing idle containers.
When the system crashes (which has happened twice), I receive genuine feedback on what fails—rarely what I had anticipated.
2. Hardcoded Configurations
Currently, my configurations look like this:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
No extensive config files or environment variables—just hardcoded constants throughout my codebase. Making changes means redeploying, but this simplicity allows me to quickly search for any configuration value, and I can keep track of adjustments in my version history.
While creating a dedicated configuration service might take a week, I’ve only modified these values three times in three months, saving me significant time and energy.