Embracing the 3-Month Rule: A Pragmatic Approach to Unscalable Solutions
In the tech world, the mantra “Do things that don’t scale,” popularized by Paul Graham, is often repeated but not frequently explored in practical terms, especially within the realm of coding. After dedicating eight months to developing my AI podcast platform, I’ve crafted a straightforward framework: any unscalable solution is given just three months to prove its worth. After that period, it either evolves into a more robust, scalable solution or it’s discarded.
As engineers, we’re conditioned to develop scalable solutions from the outset. We often dive headfirst into sophisticated design patterns, microservices, and robust architectures geared for heavy user loads. However, this mindset is more aligned with large companies than with startups. In a startup environment, pursuing scalability too soon can lead to wasted resources. Rather than fixing hypothetical issues for users we don’t yet have, my 3-month rule encourages me to create straightforward, functional code that prioritizes immediate learning over perfection.
Current Infrastructure Strategies: Why They Work
1. Consolidated on a Single VM
Currently, my entire stack—database, web server, background jobs, and Redis—runs on a single, $40/month virtual machine. While this lacks redundancy and relies on manual local backups, it has provided invaluable insights into my actual resource requirements. After two months, I discovered that my platform, which I initially assumed would be resource-heavy, peaks at merely 4GB of RAM. The complex Kubernetes architecture I almost implemented would have only served to manage unused containers.
When the system does crash (it’s happened twice), I gain detailed feedback on fail points—frequently, they’re not what I anticipated.
2. Hardcoded Configuration Constants
In my codebase, configuration values like pricing tiers and user limits are hardcoded as constants. This means changing settings necessitates a redeployment, but the simplicity of this approach has its advantages. I can quickly search my code for specific config values and track them through version control. In the last three months, I’ve made only three changes, which translates to 15 minutes of redeployment instead of an extensive week-long effort to build a configuration management service.
3. SQLite as My Database
Yes, I’m utilizing SQLite for a multi-user application, and it performs admirably. Managing a database size of only 47MB, it smoothly accommodates 50 concurrent users. This