Embracing the Unscalable: My 3-Month Framework for Smart Engineering
Paul Graham famously advises entrepreneurs to “do things that don’t scale,” a nugget of wisdom that resonates deeply within startup culture. While many embrace this philosophy conceptually, few delve into the practical implementation, especially in the realm of coding.
After dedicating eight months to developing my AI podcast platform, IΓÇÖve crafted a straightforward yet effective framework: any unscalable hack I adopt is granted a lifespan of three months. At the end of this period, each hack either proves its merit and evolves into a robust solution, or it gets retired.
HereΓÇÖs an important insight: as engineers, we are often conditioned to engineer ΓÇ£scalableΓÇ¥ solutions from the outset. We gear ourselves towards sophisticated design patterns, microservices, and distributed systems, constructing architectures that can handle millions of users. Yet, this approach tends to align more with the mindset of large corporations rather than nimble startups.
In a startup environment, aiming for scalability can often translate to delays and unnecessary expenditures. We may find ourselves optimizing for hypothetical users and addressing problems that may never arise in our early stages. By adhering to my three-month rule, I prioritize rapid prototyping with straightforward, functionalΓÇöalbeit imperfectΓÇöcode that delivers immediate insights into user needs.
Current Infrastructure Innovations: Why They Work for Me
1. Consolidated Infrastructure on One VM
I decided to run all critical operations╬ô├ç├╢database, web server, background jobs, and Redis╬ô├ç├╢on a single $40/month virtual machine. This choice may seem reckless, but it has provided invaluable insights into my resource requirements. Within two months, I’ve frequently observed that my “AI-heavy” platform only demands around 4GB of RAM. The Kubernetes setup I nearly pursued? It would have meant managing an architecture that was largely unnecessary.
When the system crashesΓÇötwice to dateΓÇöI gain firsthand understanding of which components fail. Interestingly, itΓÇÖs rarely what I anticipated.
2. Hardcoded Variables Throughout the Codebase
My coding style includes placing configuration parameters directly in the code, such as:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
This approach eliminates the need for configuration files and environment variables. Modifying any setting necessitates a full redeployment.
The beauty of this method lies in its











2 Comments
Thank you for sharing this practical and refreshingly honest approach to building in a startup context. The 3-month rule elegantly balances the need for immediate feedback with a willingness to iterate quickly, which is crucial in early-stage development. I particularly appreciate the emphasis on embracing unscalable hacksΓÇöit reminds me that the fastest way to learn about your users and infrastructure is often through direct experimentation, even if it means operating outside conventional best practices initially.
Your insights on consolidating infrastructure on one VM resonate with the lean startup philosophyΓÇösimplicity fosters agility and reduces unnecessary complexity. While hardcoded variables may seem at odds with scalable, production-grade systems, they serve as excellent tools for rapid iteration and understanding system reactions. As startups grow, transitioning to more manageable configuration management becomes practical, but your approach rightly prioritizes learning and speed at the outset.
Overall, your framework wisely advocates for prioritizing learning and adaptability over perfection in early stages. ItΓÇÖs a compelling reminder that ΓÇ£doneΓÇ¥ beats ΓÇ£perfectΓÇ¥ when it comes to launching and iterating quickly. Thanks again for sharing these valuable perspectives!
This framework beautifully echoes the core idea that rapid learning and adaptability often trump sophisticated, scalable architectures in the early stages of a startup. The three-month rule is a pragmatic approach to contain technical debt while maintaining agility, allowing teams to iterate quickly and validate assumptions without over-investing in potentially unnecessary complexity.
Your emphasis on consolidating infrastructure on a single VM reminds me of the “minimal viable architecture” philosophy╬ô├ç├╢reducing surface area for failure and gaining real-world insights into resource needs before scaling. This aligns with the concept of “building in the small” as advocated by Jason Cohen, where simplicity fosters faster feedback loops.
Moreover, your coding practice of hardcoded variables, while seemingly primitive, can be invaluable in early prototypes for quick experimentation. Of course, as the product matures, transitioning to more flexible configurations becomes crucial.
Overall, integrating these unscalable yet insightful hacks into a structured review cycle ensures continuous learning and prevents premature optimization, fostering a lean and responsive engineering culture. ItΓÇÖs a compelling reminder that sometimes, simplicity and speed are more strategic than perfect scalability in the early days.