Home / Business / The 3-Month Rule: My Technical Framework for Doing Things That Don’t Scale

The 3-Month Rule: My Technical Framework for Doing Things That Don’t Scale

Embracing the 3-Month Rule: A Pragmatic Approach to Iterative Development

In the world of startups and rapid development, the mantra of “Do things that don’t scale,” popularized by Paul Graham, often rings true. However, the question arises: how can we effectively apply this principle in our technical projects, particularly in coding?

Over the past eight months, while developing my AI podcast platform, I have adopted a straightforward framework that I call the “3-Month Rule.” The essence of this rule is simple: every unscalable approach has a lifespan of three months. After this period, it must either demonstrate its worth and be properly integrated or be abandoned.

As engineers, we tend to lean towards building scalable solutions from the very beginning—utilizing design patterns, microservices, and distributed systems to accommodate vast user bases. While this is vital for larger organizations, in the startup ecosystem, such forward-thinking can often equate to expensive delays. By focusing on unscalable methods, I’ve learned to write straightforward, less refined code that actually delivers results, allowing me to better understand my users’ needs.

Practical Infrastructure Hacks and Their Value

1. Consolidating Infrastructure on a Single VM

Currently, all my services—database, web server, background jobs, and Redis—operate on a single $40/month virtual machine. While this approach lacks redundancy and relies on manual backups, it has provided invaluable insights into my resource requirements. Within a short two months, I’ve discovered that my platform’s peak demand is only 4GB of RAM. Any complex orchestration like Kubernetes would have led to unnecessary maintenance of unutilized resources.

Crashes, which have occurred twice, have also enabled me to gather real-time data on system failures—findings that would have been elusive under a more elaborate setup.

2. Simple, Hardcoded Configuration

By forgoing configuration files and environment variables for hardcoded constants like pricing tiers and user limits, I simplify my deployment process. Although this might seem rudimentary, it allows me to track changes easily via Git history and conduct straightforward code reviews. Creating a dedicated configuration service would require over a week of effort, while minor redeployments due to value changes take around just 15 minutes.

3. Leveraging SQLite in Production

I have chosen to run SQLite for my multi-user web app, despite its limitations. With a database size of just 47MB, it comfortably manages

Leave a Reply

Your email address will not be published. Required fields are marked *