Embracing the 3-Month Rule: A Pragmatic Approach to Unscalable Solutions in Tech
In the world of startups, the mantra of “doing things that don’t scale” echoes across the halls of innovation. While many have heard the wisdom of Paul Graham on this topic, few delve into how to effectively apply it in a technical context. I’ve spent the past eight months developing my AI podcast platform, and through trial and error, I’ve crafted a straightforward framework: every unscalable workaround gets a trial period of three months. If it proves its worth, it gets a proper build; if not, it’s discarded.
As engineers, we are often conditioned to focus on scalable solutions from the onset. We envision intricate architectures featuring microservices and distributed systems capable of managing millions of users. However, that type of thinking is better suited for large corporations. In the agile environment of a startup, pouring resources into scalable solutions can become expensive procrastination, optimizing for a future that may never materialize. My three-month rule prioritizes developing a simple, albeit “bad,” code that helps ship a product and clarifies user needs.
My Ingenious Infrastructure Hacks
1. Consolidated VM Infrastructure
For my platform, I operate everything from a single $40/month virtual machine, integrating my database, web server, background jobs, and Redis. While some might view this as reckless, this approach has provided invaluable insights into my resource requirements. In just two months, I’ve determined that my platform peaks at 4GB of RAM. The complex Kubernetes framework I considered would have resulted in managing containers that sat idle. Each crash—happening twice so far—has revealed useful information about what actually fails, which was often surprising.
2. Hardcoded Configuration Settings
Instead of using configuration files or environment variables, I’ve opted for constant values within the codebase:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
While this may seem primitive, it allows rapid searches through my code when any value needs modification. I’ve changed configurations a mere three times in three months, which translates to minimal redeployment time compared to the lengthy process of establishing a configuration management service.
3. SQLite for Production Use
Yes, my multi-user web app runs on SQLite, and it’s performing exceptionally well with just 47