Embracing the 3-Month Rule: A Practical Framework for Non-Scalable Solutions
In the tech startup world, we often hear the advice, “Do things that don’t scale,” popularized by entrepreneur Paul Graham. Yet, applying this principle in the realm of coding can feel less straightforward. After dedicating eight months to building my AI podcast platform, I’ve developed a straightforward approach to managing these unscalable tasks: the 3-month rule. This framework allows me to give each non-scalable hack a finite lifespan of three months. At the end of this period, I evaluate its effectiveness: if it proves its worth, it gets a proper structure; if not, it’s time to let it go.
As engineers, we’re often conditioned to seek scalable solutions right from the start. We conceptualize intricate architectures and optimize for future demands, striving to accommodate millions of potential users. However, this thought process can lead to wasted time and resources in a startup context, where building scalable solutions may simply be a way to procrastinate. My 3-month rule compels me to write straightforward, albeit imperfect code that is deployable, allowing me to gain insights into actual user needs.
My Current Non-Scalable Solutions and Their Unexpected Benefits:
1. Unified Virtual Machine Deployment
My entire tech stack—database, web server, and background jobs—operates on a single virtual machine priced at $40 per month. This setup deliberately forgoes redundancy and relies on manual backups.
Here’s why this approach makes sense: I’ve gained a clearer understanding of my resource requirements in just two months than I could have from any anticipated capacity planning report. The platform’s peak demand for memory is only 4GB. Had I invested time in a comprehensive Kubernetes setup, I’d have been focused on managing containers that were ultimately unnecessary.
When the system crashes—and it has on two occasions—I gather valuable information about the true failure points, which often differ from my initial assumptions.
2. Hardcoded Configuration Values Accessible Everywhere
In my codebase, configuration values are simply hardcoded constants like this:
plaintext
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
There are no complex config files or environment variables to contend with; changing a value requires a deploy. The advantage? Locating any configuration in my code is swift