Embracing the 3-Month Rule: A Pragmatic Approach to Building Unscalable Code
In the entrepreneurial landscape, one phrase resonates with many: “Do things that don’t scale.” This invaluable advice from Paul Graham is well-known, yet the practical application of this philosophy in software development remains largely unexplored.
Over the past eight months, as I’ve been developing my AI podcast platform, I’ve implemented a straightforward framework: every unscalable solution is given a three-month trial period. After this time, it either validates its worth, meriting a robust implementation, or it gets phased out.
As engineers, we often consider ourselves trained to prioritize scalability from the outset. We admire sophisticated design patterns, microservices, and distributed systems—architectures capable of supporting millions of users. However, this type of thinking is often more suitable for large enterprises than it is for startups.
In the early stages of a startup, concentrating on scalable code frequently serves as a costly delay. We spend time accommodating imaginary users, addressing potential problems that we may never encounter. My 3-month rule compels me to develop straightforward, albeit imperfect code, which not only gets released but also clarifies user needs more effectively.
My Current Infrastructure Hacks: Pragmatic Choices for Growth
1. Unified Virtual Machine
All components—database, web server, background jobs, and caching—reside on a single $40/month virtual machine. Yes, there’s no redundancy, and backups happen manually.
This approach has proven astute: I’ve gained insights into my actual resource demands in just two months—insights no planning document could provide. My AI-focused platform’s peak resource usage is a mere 4GB of RAM—a far cry from the complex Kubernetes environment I nearly adopted that would have simply occupied space with idle containers. When the system crashes (and it has twice), I gather valuable data on issues I hadn’t anticipated.
2. Hardcoded Configuration
Variables like:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
are scattered throughout my code without the convenience of configuration files or environment variables. Updating these values necessitates a redeployment, but here’s the hidden advantage: I can swiftly search my entire codebase for any variable, and changes are auditable via git history. In just three months, I’ve made
One Comment
Thank you for sharing this practical and insightful approach. The 3-month rule resonates strongly—especially in early-stage startups where speed often trumps perfect scalability. Embracing simple infrastructure, like a single VM, and hardcoded configurations allows for rapid iteration and direct insights into real user behavior and system limitations. It’s a reminder that, in the beginning, building ‘just enough’ and learning from actual usage can save time and resources compared to over-engineering.
One thing I’d add is the importance of planning for flexibility as your product matures. While hardcoded configs are great for speed initially, establishing a habit of systematic parameter management—perhaps through environment variables or lightweight config files—can make scaling easier later. The key is balancing immediate pragmatism with future adaptability. Your framework beautifully highlights that sometimes, doing unscalable things for a defined period can set a solid foundation for meaningful, data-driven growth.