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 Practical Approach for Startups

In the world of startups and innovation, the mantra “Do things that don’t scale,” famously advocated by Paul Graham, is widely recognized. However, the challenge lies in the practical application of this principle, particularly in the realm of coding. After spending eight months developing my AI podcast platform, I’ve crafted a straightforward framework that prioritizes experimentation: each unscalable workaround is allotted a life span of three months. At the end of that period, I either refine it into a scalable solution or retire it.

The reality for many engineers is that we’re conditioned to create solutions designed for scalability from the outset—focusing on design patterns, microservices, and distributed systems that cater to millions of users. Yet this approach can quickly become a form of procrastination, particularly in a startup environment. Instead of optimizing for hypothetical future users, my three-month rule encourages me to produce straightforward, functional code that speaks to real user needs.

Unconventional Infrastructure Choices: Insights from My Experience

1. Consolidated Operations on a Single VM

I’ve opted to run everything—from the database to the web server and background jobs—on a single $40/month virtual machine. This lack of redundancy may seem risky, but it’s yielding invaluable insights about my resource requirements. Within just two months, I discovered that my platform, which relies heavily on AI, only requires about 4GB of RAM during peak usage. Had I pursued a more complex Kubernetes setup, I would have been managing empty containers instead of addressing real issues.

Each time the server crashes (which has happened twice), I gain concrete data about the failures, revealing that the problems often lie where I least expect them.

2. Hardcoded Configuration for Simplicity

My configuration consists of hardcoded constants rather than external files or environment variables. This means changes require a simple redeployment but allow for immediate visibility of every value in my codebase. By utilizing Git history, I maintain a clear track of price changes and configuration updates. This approach has saved me significant engineering time—about 15 minutes per change as opposed to investing 40 hours in developing a complex configuration service.

3. SQLite as My Production Database

Yes, I’ve chosen to utilize SQLite for my multi-user web application, which only demands 47MB of database size and manages 50 concurrent users seamlessly. Through this experience, I’ve learned that the app’s needs

Leave a Reply

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