Embracing the 3-Month Rule: A Pragmatic Approach to Non-Scalable Solutions
In the entrepreneurial world, you’ve likely heard the renowned advice from Paul Graham: “Do things that don’t scale.” However, implementing this philosophy in the realm of coding can be less straightforward. Over the past eight months of developing my AI podcast platform, I stumbled upon a unique strategy: I allocate a strict three-month lifespan to every unscalable solution I implement. After this period, it either demonstrates significant value and gets a proper build-out, or it’s phased out.
The Conventional Mindset vs. startup Reality
As engineers, we often find ourselves conditioned to create scalable systems from the outset, incorporating design patterns, microservices, and distributed systems—essentially constructs designed for handling millions of users. While this approach serves larger companies well, in the startup climate, it can lead to building overly complex systems for problems that either don’t exist yet or won’t materialize for some time. My three-month rule compels me to prioritize simple, direct coding practices that yield tangible results and provide valuable insights into user requirements.
Practical Hacks: My Current Unconventional Infrastructure
1. Consolidation on a Single VM
Imagine this: A database, web server, background tasks, and Redis all operating on a single $40/month virtual machine. It may sound counterproductive, but this straightforward arrangement has been enlightening. Within just two months, I’ve gained a clearer understanding of my resource needs than any detailed capacity planning document could have provided. My platform’s peak demand, for instance, only requires 4GB of RAM. My previous plans for an elaborate Kubernetes setup would have resulted in maintaining idle resources.
When the VM crashes—which has happened twice—I receive immediate data about the actual failure points, which consistently surprise me.
2. Hardcoded Configuration Values
In my project, critical configurations are hardcoded, with variables like:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
There are no extensive config files or environment variables; just constants spread throughout the code. This method might seem archaic, but it allows for swift searches across the codebase. Each modification is directly tracked in git history, and while it may seem inconvenient to redeploy for each change, my experience shows that these values have only changed three times in