Embracing the 3-Month Rule: A Pragmatic Approach to Unscalable Solutions in Tech
In the fast-paced world of technology and startups, the concept of “doing things that don’t scale” often gets tossed around, as famously advised by Paul Graham. However, the execution of this principle in the realm of coding is rarely discussed. After eight months of developing my AI podcast platform, I’ve implemented a straightforward framework: every unscalable solution receives a maximum lifespan of three months. By then, it either demonstrates its worth and evolves into a more robust system or is discarded.
As engineers, we are frequently conditioned to devise scalable solutions from day one. We’re trained to cultivate elegant architectures—complete with design patterns, microservices, and distributed systems—to accommodate millions of users. Yet, this mindset is more suited for established enterprises than startups. In the early stages of a project, chasing scalability can often lead to unnecessary complexity and wasted effort, resulting in high costs without guaranteed user engagement. My strategy compels me to prioritize simplicity and functionality over perfection, allowing me to gain valuable insight into user needs.
Insights from My Current Technical Hacks
Despite their seemingly rudimentary tendencies, here are a few of my current infrastructure hacks and the rationale behind them:
1. Consolidating Resources on a Single VM
I’ve chosen to run my database, web server, background jobs, and Redis on a single $40/month virtual machine (VM) without redundancy, relying on manual backups to safeguard my data.
This approach may seem naïve, but it has provided crucial insights into my actual resource requirements within just two months. My “AI-centric” platform has a peak usage of 4GB of RAM. Had I invested in an intricate Kubernetes framework, I would have only been monitoring inactive containers while missing out on real user data. Each crash (which has occurred twice) has offered valuable lessons about failure points, often revealing surprises rather than predictable issues.
2. Utilizing Hardcoded Configurations
Currently, I utilize hardcoded configurations throughout my application, such as:
plaintext
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
This means no configuration files or environment variables, with constant values placed directly in the code. Changes require a redeployment, but the trade-off is significant: I can