Embracing the Unscalable: A 3-Month Approach to Agile Development
In the world of startup development, there’s a well-known mantra from Paul Graham: “Do things that don’t scale.” While this advice is frequently shared, the practical implementation of it—especially in coding—often goes unaddressed.
Over the past eight months of developing my AI podcast platform, I’ve established a practical strategy: each unscalable hack is given a three-month lifespan. After this period, we either refine and formalize it based on proven value, or we discard it entirely.
The startup Mindset: Redefining Scalability
As engineers, we are frequently conditioned to prioritize “scalable” solutions right from the outset. We dive into design patterns, microservices, and complex architectures that can cater to millions of users. However, this approach can be more suited to larger organizations than agile startups.
At the startup level, investing time and resources into scalability can often serve as a hindrance rather than a help. It’s akin to preparing for problems that may never arise, while neglecting the essential user needs right in front of us. My three-month rule compels me to write straightforward, even rudimentary code, which can be launched quickly and provides insightful feedback on actual user behavior.
My Tactical Infrastructure Strategies
Here are some of the unorthodox yet effective strategies I’ve employed so far:
1. Consolidated Resources on a Single VM
All components of my platform—database, web server, background jobs, and caching—run on a single VM costing just $40 a month. Sure, there’s no redundancy, and backups are manually managed. Still, this choice has profoundly shaped my understanding of resource demands. In two short months, I discovered that my “AI-heavy” system peaks at only 4GB of RAM. The intricate Kubernetes setup I almost pursued would have resulted in wasted resources.
When server crashes have occurred (twice already), I’ve gained real insights into the underlying issues, which were often unexpected.
2. Directly Hardcoded Configurations
Instead of using configuration files or environment variables, I have hardcoded essential settings throughout my codebase:
python
PRICE_TIER_1 = 9.99
PRICE_TIER_2 = 19.99
MAX_USERS = 100
AI_MODEL = "gpt-4"
This might seem counterintuitive, but it allows me to quickly search for values