Embracing the 3-Month Approach: A Practical Framework for Non-Scalable Solutions
In the realm of technology startups, one piece of advice rings true: “Do things that don’t scale,” as endorsed by prominent entrepreneur Paul Graham. Yet, the challenge lies in knowing how to apply this wisdom, especially when it comes to coding.
After dedicating eight months to the development of my AI podcast platform, I’ve crafted an intuitive framework that I like to call the 3-Month Rule. Essentially, each unscalable hack I implement is given a lifespan of just three months. At the conclusion of this period, it either proves its worth and transitions into a robust, scalable solution, or it’s discarded.
Redefining the Engineer’s Mindset
As engineers, we’re often educated to prioritize scalable solutions from the outset. We dive into design patterns, microservices, and sophisticated architectures capable of managing vast user bases. While this is critical for larger companies, it can lead to costly delays in a startup setting.
For startups, focusing on scalability can often amount to procrastination—you’re attempting to prepare for users who may never come and addressing issues that might not even arise. My approach compels me to create straightforward, albeit imperfect code that can be deployed quickly, allowing me to glean actual user needs from real-world usage.
Current Infrastructure Hacks: Thoughtful Simplicity
1. Streamlined Operations on a Single VM
I host everything—my database, web server, background jobs, and Redis—on a single $40/month virtual machine. While this approach might seem reckless due to a lack of redundancy, it has yielded invaluable insights regarding my resource requirements. In just two months, I’ve determined my AI-driven platform peaks at 4GB of RAM, saving me from setting up complex Kubernetes systems that would have ultimately gone to waste.
When my server crashes (and it has, twice), I gain direct feedback on failure points, which is often not what I anticipated.
2. Hardcoded Configurations
Instead of utilizing configuration files or environment variables, I have defined constants throughout my codebase. Adjusting any parameter requires a redeployment, but the trade-off is significant: a quick grep command allows me to retrieve any configuration value almost instantly while maintaining a reliable history of all changes through git. In just three months, I’ve modified these values a mere three times—a stark contrast to the lengthy process of creating a configuration service.