Embracing the 3-Month Rule: A Practical Approach to Building Unscalable Solutions
In the realm of startup culture, one mantra frequently echoed by seasoned entrepreneurs is Paul Graham’s “Do things that don’t scale.” Yet, the practical application of this advice in the world of coding often seems glossed over. After eight months of developing my AI podcast platform, I’ve crafted a straightforward framework that I like to call the 3-Month Rule, which allows unscalable solutions to thrive temporarily before either being scaled up or phased out.
As engineers, we’re often conditioned to pursue scalable solutions right from the get-go. We dream of grand architectural designs involving microservices and distributed systems capable of accommodating millions of users—an ambition that aligns with the mindset of large corporations. However, in a startup environment, dedicating resources to scalability too soon can lead to unnecessary complexity and wasted effort. My 3-Month Rule ensures that I focus on practical, immediate solutions, enabling me to understand my users’ needs effectively.
Current Infrastructure Hacks: Smart Choices in Action
1. Consolidating Resources on One VM
At the moment, I host my entire application—including the database, web server, and background jobs—on a single $40/month VM. While this setup lacks redundancy and requires manual backups, it has provided invaluable insights. Within just two months, I’ve gained a clear understanding of my resource requirements; my so-called “AI-heavy” platform typically operates on only 4GB of RAM. This experience has helped me avoid the pitfalls of over-architecting—had I implemented a complex Kubernetes infrastructure, I would have been merely managing unused resources.
2. Hardcoding Configuration Values
Instead of utilizing configuration files or environment variables, I’ve opted to define constants directly in my codebase, such as:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
This approach might seem outdated, but it simplifies the process considerably. I can quickly search for any configuration value and track changes through Git, making deployment straightforward. In the last three months, I’ve altered these constants just three times, saving a tremendous amount of engineering time compared to setting up a comprehensive configuration service.
3. Utilizing SQLite in Production
Surprisingly, I have chosen to run SQLite for my multi-user web application. With a database size of