Embracing the Unscalable: A 3-Month Framework for startup Development
In the entrepreneurial tech landscape, seasoned investors and developers often echo Paul Graham’s mantra: “Do things that don’t scale.” However, guidance on its practical application in software development remains scarce. After dedicating the past eight months to creating my AI podcast platform, I devised a pragmatic strategy: any non-scalable workaround is granted a lifespan of exactly three months. Within that timeframe, it must either demonstrate its worth and warrant further development or be discarded.
Navigating the startup Mindset
As engineers, the instinct is to design scalable solutions from the outset—think microservices, distributed systems, and intricate architectural frameworks tailored to accommodate future surges in user traffic. Yet, in a startup context, focusing solely on scalability often becomes a form of costly procrastination. We risk crafting elaborate solutions for challenges that may never arise and optimizing for prospective users who are yet to materialize.
My 3-month rule compels me to prioritize straightforward, albeit imperfect code that serves as functional, real-world experimentation. This approach fosters a deeper understanding of what users truly require.
Ingenious Infrastructure Hacks
Here are some current infrastructure hacks that underscore the wisdom behind this unconventional strategy:
1. A Single VM Hosting All Components
Instead of leveraging a complex architecture, I run my database, web server, and background jobs on a single $40/month virtual machine, with manual backups to my local device. This seemingly reckless choice has yielded invaluable insights regarding my resource usage over just two months. For frequent peaks, my platform rarely exceeds 4GB of RAM—a revelation that negated the need for the Kubernetes setup I initially considered. When the server crashes (which has happened twice), I gain direct insights into the specific failure points—insights that often differ from my initial assumptions.
2. Hardcoded Configuration Parameters
Rather than employing configuration files or environment variables, I have hardcoded constants throughout my codebase. Each adjustment necessitates a redeployment, but the benefits outweigh the costs. This method grants me the ability to swiftly search my entire codebase for any configuration value, with every price change captured in Git history and subject to my personal review. In three months, I’ve needed to change these values a mere three times—representing 15 minutes of redeployment compared to a potential 40 hours of engineering overhead.
3. Utilizing SQLite in Production
Yes, I’ve opted to use SQLite for my application,