Embracing Imperfection: The 3-Month Rule for Development at Startups
In the tech world, especially in the startup ecosystem, there’s a well-known piece of advice from entrepreneur Paul Graham: “Do things that don’t scale.” However, implementing this advice effectively, particularly in coding, isn’t often discussed. After eight months of developing my AI podcast platform, I’ve devised a unique and straightforward strategy: every unscalable workaround has a lifespan of precisely three months. Once that period is over, if it hasn’t proven its worth, it’s time to say goodbye.
The start-up Mindset: Why Scalability Isn’t Always Key
As engineers, we are trained to focus on scalable solutions right from the outset. Armed with knowledge of design patterns, microservices, and distributed systems, we aim to create architectures that can support millions of users. While this is appropriate for established companies, it can be misguided for startups. Often, writing scalable code at an early stage simply delays necessary developments and increases costs. My three-month rule compels me to create straightforward, functional code that delivers real results and provides invaluable insight into user needs.
My Current Infrastructure Strategies: Maximizing Learning with Minimal Complexity
1. A Single Virtual Machine for Everything
I’m currently utilizing a single $40/month virtual machine that runs the entire setup: database, web server, background jobs, and Redis—all on one box. This approach lacks redundancy and requires manual backups, which some may view as chaotic. However, it has allowed me to gauge my actual resource requirements in a fraction of the time it would take to create a capacity plan. For instance, I discovered that my platform’s peak resource usage was just 4GB of RAM instead of the elaborate infrastructure I initially considered. When the system crashes—yes, it has happened twice—I receive real-time data about the underlying issues, which are rarely what I anticipated.
2. Hardcoded Configurations for Simplicity
Configuration values are hardcoded throughout the application. For example:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
No separate config files or environment variables—these constants are embedded directly in the code. While this technique may seem counterproductive, it allows for rapid changes via a simple redeployment process. In three months, I’ve adjusted these constants only three times,