Embracing the 3-Month Rule: A Pragmatic Approach to Unscalable Solutions in Tech
In the startup landscape, the advice from renowned entrepreneur Paul Graham—”Do things that don’t scale”—often resonates with founders and engineers alike. However, the challenge lies not only in acknowledging this principle but also in effectively implementing it within a technical framework. After eight months of developing my AI podcast platform, I’ve established a straightforward methodology: any unscalable tactic is given a lifespan of three months. At the end of this period, it’s evaluated for its worthiness to be further developed or discarded.
In the realm of engineering, we’re typically inclined to pursue scalable solutions from the outset. We’re conditioned to think in terms of elegant architecture featuring design patterns, microservices, and distributed systems capable of supporting a vast user base. However, this mindset can often be counterproductive in a startup context. Instead of paving the way for future users who may never materialize, I advocate for a framework that allows for straightforward, albeit imperfect, coding practices that can lead to rapid learning about user needs.
Current Infrastructure Hacks: Why They Work
1. Consolidated Operations on a Single Virtual Machine (VM)
My entire stack—database, web server, background jobs, Redis—operates on an economical $40/month VM. While this approach forgoes redundancy and relies on manual backups, it has granted me invaluable insights into my actual resource requirements within just two months. I discovered that my “AI-intensive” platform peaks at merely 4GB of RAM, which spared me the overhead of an unnecessary Kubernetes setup that would have demanded management of empty containers. Each crash has provided me with critical data on failure points that consistently surprise me.
2. Hardcoded Configuration Values
In my codebase, configuration values like pricing tiers and user limits are hardcoded directly into the files. Although this might seem primitive, it has an unexpected advantage. I can swiftly search for any configuration across my entire codebase, allowing me to track changes in git and review updates with ease. The time savings are stark: I’ve altered these values only three times in three months, which translates to a mere 15 minutes of redeployment instead of investing 40 hours in building a configuration service.
3. Using SQLite for Production
Surprisingly, I’ve opted to use SQLite in a multi-user environment, and it has performed exceptionally well. With a database size of only