Embracing the 3-Month Rule: A Pragmatic Approach to Non-Scalable Solutions in Development
In the world of software development, particularly for startups, the phrase “do things that don’t scale” often originates from the wisdom of Paul Graham. However, translating this advice into practical application—especially on the technical side—can be quite challenging. Drawing from my experience in developing an AI podcast platform over the past eight months, I have devised a straightforward framework: every non-scalable approach gets a trial period of three months. If it proves its worth by then, it gets a proper implementation; if not, it’s time to move on.
As engineers, we tend to prioritize scalable solutions right from the beginning—creating robust design patterns and leveraging microservices. However, in a startup environment, focusing solely on scalability can lead to delays and inefficiencies, leading us to optimize for hypothetical future users instead of current needs. My 3-month rule encourages me to produce straightforward, albeit imperfect, code that can be released quickly. This allows me to gather real user feedback and understand their requirements more effectively.
Insights from My Current Infrastructure Hacks
1. Centralized Operations on a Single VM
I run my entire infrastructure—including the database, web server, and background jobs—on a single $40 per month virtual machine without any redundancy. Although this may sound reckless, the insight gained has been invaluable. I’ve learned about my actual resource requirements more in two months than any capacity planning document could provide. For instance, my platform’s peak usage demands only 4GB of RAM, which means that the complex Kubernetes setup I nearly built would have been unnecessary. Each crash (I’ve had a few) offers real data on system weaknesses that defy my initial expectations.
2. Configuration Hardcoding
Instead of relying on external configuration files or environment variables, I have embedded constants throughout my code. Although this means that changes require a redeployment, the advantages are surprising. It allows for swift searches across the codebase for any configuration value. Each change has been documented in my version control history, fostering a clear audit trail. Investing in a dedicated configuration service would have taken a week, but in three months, I’ve needed to make only three changes—resulting in just 15 minutes of redeployment.
3. Utilizing SQLite for Production
Running a multi-user application with SQLite may raise eyebrows, but my relatively small database has proven to be effective. With only 47MB