Embracing the 3-Month Rule: A Pragmatic Approach to Non-Scalable Solutions
In the tech world, the mantra “do things that don’t scale,” popularized by Paul Graham, is often discussed, but how can we apply this principle in real-world coding practices? After dedicating eight months to the development of my AI podcast platform, I’ve created a straightforward framework to facilitate this approach: every non-scalable hack is granted a life span of three months. At the conclusion of this period, each hack either demonstrates its value and evolves into a well-structured solution or gets phased out.
As engineers, we are trained to think about scalability right from the outset, focusing on sophisticated designs that can handle millions of users. While this mindset is essential for large corporations, it can be less beneficial for startups. In reality, scalable code can often turn out to be an expensive form of procrastination, as it addresses problems that may never arise while prioritizing a user base that doesn’t yet exist. This three-month rule compels me to develop simpler, more direct code that can be shipped quickly, allowing me to gain genuine insights into user needs.
A Peek into My Current Technical Practices: Smart Decisions that Empower Growth
1. Streamlining with a Single Virtual Machine
All components of my platform, including the database, web server, and background jobs, operate on a single $40/month virtual machine. This approach offers no redundancy and relies on manual backups to my local system.
Why is this a brilliant choice? Within just two months, I’ve gathered more information about my actual resource requirements than any planning document could have provided. My AI-driven platform typically consumes only up to 4GB of RAM. The intricate Kubernetes architecture I considered building would have meant managing idle containers.
When the system crashes—an occurrence I’ve faced twice—I obtain invaluable data regarding the actual issues. Interestingly, the root cause is often something I least expected.
2. Embracing Hardcoded Configurations
Consider this:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
Instead of using configuration files or environment variables, I utilize constants throughout the codebase. Adjusting any of these constants requires a redeployment.
The advantage? I can swiftly search my entire codebase for any configuration value, tracking all price