Building software is like traveling between destinations. In our case, it’s traveling from Problem City to New Solution. The software is the road that connects the two. But too often I see developers trying to build a 12‑lane interstate before they even know if the road reaches the right destination!
(If you’re not familiar with roadwork: building an interstate highway can take months or even years, requires tons of planning and manpower, costs a fortune, and disrupts pretty much everyone around it while it’s under construction.)
But it’s okay to build a simple one‑lane gravel road at first!
Sure, it has potholes, big rocks in the way, and you can’t go very fast on it. But despite that, it’s faster than walking (manual work) and lets you quickly figure out whether you’re even going to make it to New Solution. At this stage, it’s only a one‑way road, it’s not pretty, it’s slow to drive, and every now and then you have to worry about a fallen tree blocking the way or a car breaking down on it...but it gets the job done quickly and for WAY less money than that interstate would cost.
Here’s the great part: we never lose the ability to make the road better. With the initial gravel road, you discover that lots of people are trying to get to New Solution. So now we can lay a little asphalt and fill in those potholes so more people can get there faster.
A couple of months go by. You can now determine whether this road is fine or if we need to upgrade it. If traffic isn’t getting backed up and everyone can get to New Solution in an acceptable time, no upgrades are needed. But let’s say more and more people are coming and traffic is getting backed up.
Now is the time to improve the road (remember, the road is our software).
Let’s widen the road and make it two lanes so more people can travel at the same time. At the same time, let’s move some of those trees that are too close to prevent them from falling onto the road during storms.
And again we monitor. We fix potholes when they pop up. We help get broken‑down cars off the road. We add a shoulder on either side so people can pull off instead of having to stop in the lane. Things are working great.
A few more months go by. We can now see if our upgrades are working and our software is serving drivers’ needs, or if we need to make more changes. If things are good, we can continue to maintain the road as it is and start to look at where to build the next road. But let’s say that as New Solution gets more popular, we start to see traffic backing up again…
You guessed it...now we upgrade.
We widen the road again, this time to four lanes. We’re starting to cross other roads now (integrating with other systems), so we add some traffic lights, road signs, maybe a bridge or two, and we increase the speed limit.
Vroom vroom! More people than ever are heading to New Solution...and getting there even faster!
The cycle continues: we improve, we confirm the improvements solve the current issues, and we monitor. At some point, we no longer need to upgrade the roads. We can ease off construction, maintain the road as it is (because it meets current driver demand), and send our resources over to the next road we’re building.
This is how you should build software.
You don’t need super powerful, sophisticated, complex systems right out of the gate. More often than not, you don't need Kubernetes, you don't need expensive database and infrastructure services and support. Like the interstate example, these things take lots of time, effort, and money. Instead, we can start small: a few features that solve the immediate problem (and do it well). The software can run on a single server (or a simple serverless setup if that fits the need). Then monitor.
While you monitor, clean things up. Take care of some of that tech debt you accrued. Or look for new roads to build.
Don’t invest more until you know people are going to use it. While you monitor, maintain it. Fix bugs; address issues as they arise. Wait until you actually need to upgrade to multiple servers with a load balancer in front of them. When that starts to get bogged down, then step up to more sophisticated infrastructure solutions.
Sometimes all you need is a gravel road to start.
Top comments (0)