Embracing the 3-Month Rule: A Progressive Approach to Non-Scalable Solutions
In the entrepreneurial tech community, there’s a widely recognized mantra by Paul Graham: “Do things that don’t scale.” While this advice resonates with many, implementing it effectively in the realm of coding can be challenging. Having spent the last eight months developing my AI podcast platform, I’ve devised a straightforward yet powerful framework: every non-scalable workaround is given a lifespan of just three months. At the end of this period, we assess its impact—either it proves its worth and evolves into a robust solution, or it’s retired.
Reevaluating Our Engineering Mindset
As software engineers, our instinct is often to prioritize scalable solutions from the outset. We envision grand designs like microservices and distributed systems capable of supporting millions of users. However, this perspective is often more fitting for larger corporations rather than startups where resources are limited. In fact, pursuing scalability too early can lead to unnecessary complexity and hinder real progress. My three-month rule has pushed me to embrace simpler, more direct code. This approach allows me to deliver quickly and, more importantly, gain valuable insights into user needs.
An Insight into My Current Hacks
1. Single VM Architecture
Currently, all components of my application—including the database, web server, and background jobs—operate on a single $40/month virtual machine. While this setup lacks redundancy and relies on manual backups, it has proven to be enlightening. In just two months, I’ve acquired more accurate knowledge about my resource requirements than any theoretical planning could provide. For instance, I discovered that my platform’s peak usage is merely 4GB of RAM. The complex Kubernetes architecture I had nearly deployed would have gone unused.
2. Hardcoded Configurations
Every configuration setting, from pricing tiers to maximum user limits, is hardcoded directly into my codebase. Changes require redeployment, but this method has its advantages. With the ability to quickly search my entire code for any configuration, tracking changes is straightforward. Over three months, I’ve adjusted these values just three times, saving countless hours that would have gone to developing an elaborate configuration service.
3. Using SQLite for a Multi-User App
Believe it or not, SQLite underpins my entire web application, and it’s performing admirably. My database is a mere 47MB and efficiently accommodates up to 50 simultaneous users. This experience has revealed that my application