The Three-Month Framework: A Pragmatic Approach to Building Unscalable Solutions
In the startup world, you often hear Paul Graham’s famous mantra: “Do things that don’t scale.” While this is great advice, the challenge lies in understanding how to apply it effectively, especially in software development. After eight months of working on my AI podcast platform, I’ve adopted a straightforward principle: any temporary, non-scalable solution I implement gets a lifespan of three months. If it proves its value within that time, it transitions into a more robust setup; otherwise, it is phased out.
Why the Three-Month Rule Works
As engineers, many of us are conditioned to think big from day oneΓÇöcreating scalable solutions with sophisticated architectures like microservices and distributed systems. However, in the context of a startup, to focus solely on scalability can often mean delaying progress for problems that may not even exist. My three-month framework encourages me to embrace simpler, more straightforward code that not only gets deployed but also helps uncover the genuine needs of my users.
My Current Infrastructure Strategies and Their Benefits
1. A Single VM for Everything
I run my entire platformΓÇödatabase, web server, background tasks, and cachingΓÇöon a single $40/month virtual machine without redundancy or complex setups. While it may seem reckless, this simplicity has taught me invaluable lessons about my resource needs. For instance, my platform, which I initially anticipated would be data-intensive, only peaks at 4GB of RAM. The intricate Kubernetes architecture I was considering would have simply managed idle containers. When downtime occurs (and it has twice), I gain insights into real issues rather than hypothetical ones.
2. Hardcoded Values for Configuration
In my code, configurations are directly embedded as constants, such as pricing tiers and user limits. While it may be unconventional, it allows me to quickly search for values across the codebase and track changes via Git history. In the three months IΓÇÖve been using this method, IΓÇÖve modified configurations only three times, which means redeploying them was a matter of minutes instead of days of development effort spent on a dedicated configuration service.
3. SQLite for Production Use
Yes, I’m utilizing SQLite for a web application meant for multiple users. Despite having only a modest 47MB database, it manages around 50 active users effortlessly. This approach revealed that my usage was heavily skewed toward reads rather than writes, making SQLite a perfect fit. Rather than grappling with











2 Comments
Thank you for sharing such a practical and iterative approach to building in a startup environment. The Three-Month Rule reminds me of the *build-measure-learn* cycle from Lean Startup methodologyΓÇöit emphasizes rapid experimentation and learning before investing heavily in scalable infrastructure.
I especially appreciate your emphasis on simplicity: starting with a single VM, hardcoded configs, and SQLite helps reduce overhead and accelerates feedback loops. These decisions ensure youΓÇÖre addressing real user needs first, rather than over-engineering prematurely.
One thing to consider as your platform grows is ensuring this approach remains adaptable. For instance, introducing modularity in your codebase early on, even with simple tools, can facilitate smoother transitions when scaling becomes necessary. Also, keeping an eye on potential bottlenecksΓÇölike the SQLite useΓÇöwill help you plan for scalability when needed without sacrificing the rapid iteration thatΓÇÖs central to your strategy.
Overall, this disciplined yet flexible mindset can serve as a valuable blueprint for many early-stage projects. Looking forward to seeing how your platform evolves!
This approach resonates strongly with the pragmatic, lean mindset that often differentiates successful startups from prematurely over-engineered solutions. The Three-Month Rule effectively balances the need for experimentation with the discipline to avoid prolonged commitment to unvalidated architectures.
Your use of simple, cost-effective infrastructure like a single VM and SQLite underscores a crucial principle: starting lightweight allows you to test core assumptions quickly, reduce unnecessary complexity, and gather meaningful user feedback early on. Hardcoded configurations, while unconventional, can accelerate iterationΓÇöespecially when the environment is still in flux.
ItΓÇÖs worth noting that this philosophy aligns with the concept of *incremental scalability*: build just enough to learn, then scale with confidence once validated. As the solution matures, integrating more sophisticated systems (like managed database services or container orchestration) becomes justified, but only when the real, proven needs demand it.
Your methodology exemplifies how focused, time-bound experimentation can help founders avoid paralysis by overplanning and ensure that technical decisions are driven by actual user behavior and evolving requirements. ItΓÇÖs a practical blueprint that many early-stage teams can adapt to foster both agility and learning.