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 Unscalable Solutions

In the tech landscape, advice from thought leaders like Paul Graham resonates widely: “Do things that don’t scale.” However, the challenge often lies in translating this philosophy into actionable coding practices. After eight months of developing my AI podcast platform, I have implemented a straightforward framework: every unscalable workaround I develop is given three months to validate its utility. After that period, it either evolves into a robust solution or is discarded.

As engineers, we often rush to build scalable architectures from the outset—think design patterns, microservices, and distributed systems. While these approaches are essential for larger companies to manage millions of users, they can lead startups to overlook immediate, practical needs. In fact, investing resources in scalability too soon can result in costly delays, optimizing for hypothetical users rather than addressing the current demands.

Utilizing my 3-month rule, I have been able to craft efficient yet “imperfect” code that allows for rapid deployment and real-time feedback on user needs. Here’s a breakdown of my current strategies that illustrate why taking a less conventional route can be beneficial:

1. Consolidated Operations on a Single VM

I host my database, web server, background jobs, and Redis on one budget-friendly VM for just $40 a month, foregoing redundancy and performing manual backups to my local machine. This approach, while seemingly risky, has provided invaluable insights into my resource consumption within two months—insights that detailed capacity-planning documents would fail to convey. I’ve discovered my platform demands peak at only 4GB of RAM, revealing that the intricate Kubernetes setup I considered would have resulted in unnecessary complexity.

2. Hardcoded Configuration Values

Instead of managing configurations through separate files or environment variables, I opt for constants integrated throughout my codebase. Modifying any configuration requires a straightforward redeployment. This design has allowed me to easily search and track changes across my code. In three months, I’ve made only three configuration tweaks, saving me countless hours when weighed against the complexity of constructing a dedicated configuration service.

3. Leveraging SQLite in Production

Running SQLite for my multi-user web application has been a strategic choice. With a mere 47MB database managing up to 50 concurrent users effortlessly, I have gleaned crucial insights into my access patterns, which lean heavily toward reading rather than writing. If I had opted for a more complex database system like Postgres

Leave a Reply

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