Embracing the 3-Month Rule: A Practical Approach to Non-Scalable Solutions
In the entrepreneurial world, one advice frequently echoed by thought leaders is Paul Graham’s mantra: “Do things that don’t scale.” However, the challenge often lies in understanding how to apply this principle in the realm of software development. After dedicating eight months to building my AI podcast platform, I have created a straightforward methodology: every non-scalable solution is granted a lifespan of three months. At the end of this period, two outcomes are possible: it either proves its efficacy and warrants further development, or it is discarded.
As engineers, we are instilled with the philosophy of constructing scalable solutions from the outset—think design patterns, microservices, and distributed systems—all designed to accommodate millions of users. However, this mindset is often better suited for larger organizations. In a startup environment, focusing on scalability can turn into a costly exercise in anticipation, addressing user needs that might never materialize. My three-month rule encourages me to create simpler, more direct code that is “bad” by conventional standards but effective in revealing genuine user needs.
Key Infrastructure Strategies and Their Insights
1. Consolidated Operations on a Single VM
Currently, I run my entire infrastructure—including the database, web server, and background jobs—on a single virtual machine for $40 a month. This setup lacks redundancy and relies on manual backups to my local machine, but here lies its brilliance: in just two months, I have gained invaluable insights into my actual resource requirements. My AI-focused platform primarily utilizes 4GB of RAM, meaning the complex Kubernetes environment I almost implemented would have only added unnecessary complexity.
When crashes occur (and yes, they have!), I receive precise feedback on failure points, often revealing unexpected vulnerabilities.
2. Hardcoded Configuration for Simplicity
Instead of utilizing config files or environment variables, I have opted for hardcoded constants such as:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
While this might seem retrogressive, it offers a hidden benefit: quick searches across the codebase for any configuration value can be done in seconds. Each price adjustment is traced in version control, allowing for immediate review.
The time saved is substantial. Building a comprehensive configuration service would take at least a week, whereas I’ve changed these