Embracing the Imperfect: The Tres-Month Hack Framework for Startups
When it comes to launching a startup, many entrepreneurs are familiar with Paul Graham’s mantra, “Do things that don’t scale.” However, the conversation tends to shy away from the practical implementation of this idea, especially in the realm of coding.
After eight months of developing my AI podcast platform, I’ve established a straightforward strategy: every unscalable method has a lifespan of three months. Within that time frame, it must either demonstrate its worth and evolve into a more robust solution, or it will be discarded.
As engineers, we’re often conditioned to prioritize scalable solutions from the get-go. Our training leads us to favor sophisticated infrastructure designs — think microservices, distributed systems, and beautifully architected frameworks that cater to millions of users. However, this mindset often aligns more with the needs of large corporations rather than those of a startup.
In the early stages of a startup, focusing on scalable solutions can become an exercise in unnecessary expense — an effort to optimize for a user base that may not even exist yet. My three-month rule encourages me to produce straightforward, even “flawed,” code that is quick to deploy, enabling me to glean greater insight into the genuine needs of my users.
My Unconventional Approaches That Yield Valuable Insights
1. All Operations on a Single Virtual Machine
I run everything — from the database to the web server and background jobs — on a single, cost-effective $40/month virtual machine, with manual backups to my local drive. This decision may seem reckless, but it offers invaluable lessons about my resource needs. In just two months, I’ve learned that my “AI-heavy” application peaks at 4GB RAM. The complex Kubernetes setup I almost created would have been managing resources that were never utilized. Each crash (and there have been a couple) provides critical data on which aspects truly need attention.
2. Static Configuration Throughout the Codebase
My configuration settings are hardcoded across various files — no external configuration files, no environment variables. This simplicity allows me to locate and modify any configuration quickly through a simple search across my codebase. While it might take a week to create a full-fledged configuration service, I’ve only changed these values three times in the last three months. That equates to a mere 15 minutes of redeployment, vastly outweighing the potential 40 hours in development time.