The 3-Month Rule: A Pragmatic Approach to Developing Unscalable Solutions
In the tech world, it’s a well-known piece of advice that often gets thrown around: “Do things that don’t scale,” popularized by entrepreneur Paul Graham. However, implementing this principle effectively—especially in coding—remains a topic less frequently discussed.
After spending eight months building my AI podcast platform, I have formulated a straightforward method: each hack that lacks scalability is given a window of three months to demonstrate its worth. If it doesn’t demonstrate value in that timeframe, it’s time to move on.
The Context: A startup Mindset
As software developers, we are often conditioned to strive for scalable architectures right from the outset. Terms like design patterns, microservices, and distributed systems dominate our thinking, as we prepare to accommodate millions of users. However, in the startup environment, chasing scalability can sometimes mean delaying progress and wasting resources.
My three-month rule encourages me to produce simple, direct, and sometimes imperfect code that I can get out into the market quickly. This approach helps me uncover what users truly require, rather than spending time optimizing for hypothetical scenarios.
Key Infrastructure Decisions and Their Surprising Wisdom
1. Consolidation on One Virtual Machine
I’ve consolidated all my services—including the database, web server, background jobs, and Redis—onto a single $40/month virtual machine without redundancy or frills. I perform manual backups locally.
This strategy has yielded valuable insights: in just two months, I’ve learned about my resource needs far beyond what traditional capacity planning could have provided. My platform currently peaks at 4GB of RAM! If I had set up an elaborate Kubernetes architecture, I would have merely been managing wasted resources.
When the system crashes—something that has happened twice—I get meaningful data about the failure points, which are usually unexpected.
2. Hardcoded Configurations
In my codebase, configuration values like pricing tiers and maximum users are hardcoded rather than stored in separate config files or environment variables.
This might seem counterintuitive, but the ability to quickly search for any config value across my entire code base has proven invaluable. Changing these constants requires a quick redeployment, which takes about 15 minutes compared to the 40 hours it would take to implement a configuration service.
3. Leveraging SQLite for Production
I’m currently using SQLite as the database for my multi-user web application, which impressively manages