Stop building. Start Reusing. Get some Sellotape and get going. Because the best system I've ever built is the system I've never built!
The Illusive Unicorn System
Over the course of my long and illustrious career, I've architected, built, and operated many great system. Systems that are robust from the ground up. Systems that are business critical, run on a daily basis, and cannot tolerate any downtime due to stringent SLAs. Systems I am proud of.
However, there's always that ideal system we all keep chasing. It's the magical system that for now and all the future
- Has a highly maintainable code base
- Has zero bugs
- Has no legacy code
- Is fully tested
- Has perfect documentation
- Is feature complete
- Has full CI/CD integration
- Has full continuous deployment integration
- Has zero operational cost
- Has zero maintenance cost
- Has a 100% uptime record
- Exceeds all SLAs
- Has only happy customers
This truly is a magical system. It's probably the closest any architect can get to Nirvana. Most of us have probably never architected, built, or operated a unicorn like that, let alone come across one in the wild. And unfortunately, most of us will never get close to one either.
How to Build the Illusive Unicorn System
But then does this mean that this magical system is a mere Fata Morgana? A hoptical illusion (pun intended)? Something like a carrot on a stick strapped to the front of our heads that we keep chasing all life long?
That magical system is real. When you know how to build it.
You can build it. I can build it. In fact, I've built it many times. Repeatedly. With great success. And it's easy too, because
The best system I've ever built is the system I've never built!
Allow me to explain.
How to Build Egg Shaped Wheels
The general idea is fairly simple and has been applied in many other professions for some time already. From ancient artists that simply removed everything that was not David to modern day product managers that do not build what is not part of their product.
Rather than focusing on what to build, I focus on what not to build.
More often than enough, the wheels at hand are already round enough and new egg shaped wheels won't improve things a lot either. Rather than reinventing the wheel, reusing the wheels at hand allows me to focus on how to combine them into something that can be used to transport things from A to B. And hence provide value more rapidly.
An Abundance of Egg Shaped Wheels
So, how many wheels are out there?! The XKCD comic on standards pretty much sums it up.
So, do you want to be the inventor of the 15th competing standard?! If yes, then go for it by all means. You probably also want to stop reading at this point to make sure you're not going to be the 16th competing standard as someone did beat you to the 15th spot. All the best!
The Benefits of Reusing Round Wheels
If you're still reading on, then it most likely means that you already see value in reusing the wheels at hand. And you're absolutely right. The advantages of reusing building blocks such as libraries, frameworks, components, or entire systems are quite hard to argue against.
First off, reuse allows for a quicker time to market as all energy can now be focused on delivering the overall system rather than being bogged down with some minuscule component. In essence, reuse is a free shortcut. Use it.
Second, when reusing the right building blocks they can come with a proven track record in the industry. Now, this allows to build a solid system by just focusing on getting the integration right. As in really solid. It can be that simple. Sometimes.
Third, the community behind reusable building blocks and what they can achieve tends to be bigger than what most people or teams can achieve by themselves. The community can detect and fix bugs for exotic edge cases that only surface on the second night of a blood moon during high tide in months that have no vowels after the third letter. Massive exposure can lead to massive improvements in quality. So, how much exposure do you have so far with the new thing you want to build from the ground up?!
Oh, and for a bit of cargo cult: Have a look at the list of reused building blocks embedded into popular software released by technology giants in the past years. Chances are, the list exceeds the length of whatever is left on your paper kitchen towel roll.
Still not convinced?! Then let's talk security. Would you use a home grown system for, say, remote access to a mission critical production environment? With unintended hidden "features" such as backdoors that grant access to everyone that stumbles across them. Simply because they weren't detected or patched for what essentially is already too long. Probably not. So, how much do you care about security in all other components and the overall system then?!
Why We Hardly Every Build the Illusive Unicorn System
So, if all we have to do is focus on what not to build in order to eventually build that magical system, why don't we all do it then?! Why do we keep reinventing the wheel? I don't have a definitive answer yet but there are two indicators I could isolate.
"We Build Stuff!"
First off, engineers and architects love to build stuff. So do I. I take a lot of pride in the things I've built over the years.
It's a bit hard to convince yourself that the best thing you've built today is, well, nothing. It simply was the best choice available after thoroughly evaluating all the options out there. Then you simply wrapped some existing building blocks together with as little Sellotape as possible and declared blunt success.
So, where's the problem? We tend to mistake "things built" for "value delivered". This is closely related to the Action Bias that roughly states that it's better to do something rather than nothing, regardless of the outcome. So, we rather build egg shaped wheels than reuse the round ones in front of us. Well, at least it keeps wheel makers in business.
"We Can Do That Better!"
The second indicator I've seen a number of times over the years when suggesting reuse comes as a relentless onslaught on why something else is inferior followed by the proud statement that "we can do this a whole lot better; more secure, cheaper, [your favourite adjective here]". It hardly ever is.
What that really is is falling for the "not invented here" bias. It is exactly what it says on the tin. Not. Invented. Here. Boo everyone else but us!
How to Overcome These Hurdles
Right. How do we fix this? I don't have an easy answer. If I had, I'd probably be a very rich man by now. But I have some suggestions.
What about rewarding — and thereby incentivising — behaviour that focuses on reusing existing components all the way up to entire systems? Focusing on the value added rather than the systems built. Even if nothing is built. Especially when nothing is built, everything is carefully sellotaped together reusing readily available building blocks, and a business problem is solved. As that was the best thing — the best value add — available. That's hard. But a start.
Oh, and for the "not invented here" camp? Usually, a good start is having them put up with other software that made the "not invented here" bias their core mantra. Works quite well, usually.
A Final Remark
This article is not a carte blanche for slacking off and quoting me as a source for doing so!
It's here to make you think about what not to build! To rather take off the shelf and carefully glue it into the rest of the ecosystem with as little sellotape as possible. That's hard enough already. If you can get that off the shelf as well — even better.
Build the things that matter. Reuse the rest.