Embracing the 3-Month Rule: A Pragmatic Approach to Unscalable Solutions
In the entrepreneurial world, one iconic piece of advice from Paul Graham resonates deeply: “Do things that don’t scale.” However, the challenge lies in effectively implementing this principle within coding practices, particularly for startups. After dedicating the last eight months to developing my AI podcast platform, I’ve established a straightforward technique: every unscalable “hack” is given a trial period of three months. Post this timeframe, we assess whether it has demonstrated its value and is worth refining, or if it should be discarded.
The conventional wisdom for engineers often emphasizes creating scalable solutions from the outset—envisioning elaborate architectures designed to accommodate vast user bases. However, in the startup ecosystem, focusing too heavily on scalability can sometimes result in unnecessary delays. By adhering to my three-month framework, I am compelled to write straightforward, perhaps imperfect code that delivers real results and reveals genuine user needs.
My Current Infrastructure Strategies: Insights from the Ground Up
1. Consolidation on a Single Virtual Machine
Currently, my entire setup—including the database, web server, and background jobs—resides on a single $40/month virtual machine, which is devoid of redundancy and relies on manual backups.
Why is this approach surprisingly effective? In just two months, I have gleaned invaluable insights about my resource needs that no capacity planning document could provide. My “AI-centric” platform only peaks at around 4GB of RAM, making a complex Kubernetes environment redundant and likely to lead to managing underutilized resources.
Additionally, each instance of downtime (which has occurred twice) supplies tangible insight into actual failure points, often contrary to my initial assumptions.
2. Hardcoded Configuration
In my current setup, critical configurations are hardcoded directly into the application, reinforcing simplicity.
This method, while seemingly old-fashioned, allows me to quickly search for and adjust settings across my codebase. I have a straightforward approach to change pricing or user limits, involving minimal redeployment time—15 minutes instead of wasting countless hours developing a dedicated configuration service.
3. Utilizing SQLite for Production
My choice to leverage SQLite, even for a multi-user web application, has proven effective. With the entire database only occupying 47MB, it effortlessly accommodates around 50 concurrent users.
Through this experience, I have discovered that my application primarily deals with read operations—95% reads and 5% writes—which makes