Embracing the 3-Month Rule: A Practical Approach to Building Scalable Software
When it comes to startup ventures, the familiar advice from Paul Graham resonates: “Do things that don’t scale.” However, the challenge remains — how do we translate this principle into actionable coding strategies?
Over the past eight months, while developing my AI podcast platform, I’ve established a straightforward yet effective framework: unscalable solutions are given a lifespan of three months. After this period, each solution must either prove its worth and be enhanced to meet scalability needs, or it will be phased out.
As engineers, we often cultivate a mindset geared towards developing “scalable” systems from the outset, focusing on sophisticated architecture designed for mass user engagement. However, within the startup context, prioritizing scalability early on can lead to misallocated resources and unnecessary complexity. My three-month rule encourages me to embrace simplicity and get tangible products into the hands of users swiftly, allowing real feedback to guide further development.
Current Infrastructure: Smart Hacks in Action
1. Consolidated Operations on a Single VM
With everything — from the database and web server to background jobs — running on a single $40/month virtual machine, I’ve eliminated redundancy and handle manual backups through local storage.
This approach has provided incredible insights: in just two months, I discovered the actual resource needs of my “AI-heavy” platform, which surprisingly peaks at 4GB of RAM. The complex Kubernetes architecture I had considered would have merely served to manage idle containers.
When failures occur (and they have), I gain valuable data about the failures — illuminating aspects of the application I hadn’t anticipated.
2. Hardcoded Configuration Values
Instead of employing configuration files or environment variables, I’ve opted for hardcoded constants that are easy to find and edit:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
While this may appear cumbersome, the simplicity allows for rapid adjustments tracked through git. Each of the three changes made in the last three months took a mere 15 minutes to redeploy, a stark contrast to the many hours required for building a configuration service.
3. SQLite as a Database Solution
Running a multi-user web application on a 47MB SQLite database might seem unconventional, yet it has proven to handle 50 concurrent users effortlessly.