Buy Don't Build
As long as I’ve been involved in technology, I’ve noticed a central theme which reappears countless times and is a powerful influencer in every decision, hire, and discussion. This theme invisibly steers businesses in meaningful ways yet isn't given enough serious thought by developers and technical folks. That theme, or question rather, is whether to build or buy. In other words, "do we build this thing ourselves or do we buy a thing from someone else?" I used to get caught up this decision frequently, with one side (sometimes management) pushing for buying and engineering wanting to build it instead. As with anything else in this world, there are pros and cons associated with each, so to put things into perspective, let's talk about something entirely outside of technology. I'd like to tell you a story about cars.
My father is a pretty interesting character. Although he went to medical school and became a practicing physician, he, like I, has lots of varied interests that extend far past the realm of his profession. One of those interests is automobiles. I don't mean just buying and driving them, but fixing, restoring, and often times reengineering them to correct on design or construction flaws. This love was passed on to me and from an early age I would help him with what seemed like a never-ending stream of cars into the Zoller Garage. Many years later when I had more knowledge and skill under my belt, we embarked upon a project to fully restore a 1985 Volkswagen Cabriolet convertible. This car, which was in pretty poor shape when I bought it for all of $200, needed a full restoration, and it was a great father-son project. Skipping ahead a year later and saving you some technical details, we had an idea to apply a better coating alongside the bottom portion of the car (called rocker panels). This coating serves as a shield to protect the car's metal against rocks, salt, and other harm that would otherwise compromise the metal. Because of some modifications we made to the body and underbelly, we needed to reapply this coating. But because of the tinkerers we were (and, let's be honest, still are), our minds immediately went into engineering mode: "How can we design a better coating?" we asked. And "what do we use for this?" Our minds raced. We threw out all sorts of ideas—some of them downright crazy. Ultimately, we thought we'd use a polyurethane base to apply because it is flexible and resilient. If you've never heard of this, once dry it behaves somewhat like rubber serving to bounce off anything that impacts it. But we needed to apply this to the car, which meant it had to be thin. So, naturally, we went into chemical engineering mode and found out that if we used Xylene as a thinning agent, it could be more easily applied using a roller brush like that which you'd commonly use to apply paint to walls inside your house. After some trials, we did exactly that and managed to apply this polyurethane coating to the bottom of the car all the way around. It looked cool and, boy, did we think we were slick dudes! Fast-forwarding a few months after the car was done, paint applied, and it having been driven on an almost daily basis, we noticed some issues. The paint began to crack and separate around acute bends in the metal, exposing the white polyurethane base through a beautiful, hand-painted and sanded metallic maroon candy shell exterior. My heart sank. We were crestfallen. We spent unknown dozens upon dozens of hours just on the paint job itself what with the five or six applications of color and clear, and, as with most high-end cars, hand, wet sanding in between each coat so as to give it a glossy, smooth appearance. Although this may not sound like a big deal, this is a catastrophic failure when it comes to paint and from which there is no repair other than to repaint large sections. After much consternation and diagnosis we determined that this polyurethane was flexing and bending with vibration and thermal fluctuation thus causing the fairly rigid paint job that sat on top to crack and separate. This was a terrible defeat and we took it badly.
Only sometime later did we realize that, hey, what do you know? You can actually just buy this rock guard stuff and spray it on. And, as it turns out, it would have been cheaper both in money and in time if we had just used that instead of trying to be crafty and inventing our own. But because of our hubris, stubbornness, and lack of strategic forethought we decided we were smarter than the rest of, well, basically all of humanity that had ever worked on cars prior. We were going to show "the man" we didn’t need no stinkin' expensive product, that we were going to make our own. Huzzah! Guess what? That didn’t work out too well for us, did it? So how do you quantify those costs? Not only did we spend a bunch of money on materials that basically got thrown away, but worse, we just wasted days and days of time doing something we didn't need to do in the first place. Although the idea of this homegrown solution sounded great, it turned out to be far more expensive in the long run than just buying a professional product and applying it.
So that's the story, now let's bring it home and make it real.
If you are building a car from scratch and come to the wheel, you are faced with a choice: Do I build this wheel from scratch, or buy it off the shelf? Before that, you obviously need to identify if a commercial solution even exists. Assuming one does exist, here are some things to consider before you decide to build it from scratch.
- If you don't routinely design and build wheels, the guy out there making them professionally has learned all the tricks of the trade in the process and is almost certainly going to build a hell of a lot better wheel than you can. He has tremendous experience whereas you probably have less to none. Ask yourself if you are committing to doing this repeatedly in the long term.
- Since he's building wheels professionally, he is ultimately responsible if that wheel craps out the week after you buy it, so you get a warranty on that and assistance if needed.
- Since it's a pre-built product, all you have to do is bolt it on your car and go down the road. You can get that car up and running far faster than you would have had you chosen to do it from nothing. This is known as time-to-value (TTV).
- You probably have some sort of budget or constraint on money, and when you buy something pre-made you're almost always going to get that at a cheaper price after all is said and done. You need to keep points 1-3 in mind above to fully understand that. This is known as total cost of ownership (TCO).
- Are you determined to build just to prove that you are clever, or because you've identified a specific reason why this is a better approach? If you're hellbent on building just to prove how smart you are, that is almost always the wrong reason and the product will suffer as a result. Don't make an emotional decision here, and sometimes it's hard to know when you're doing it.
- Are you doing this simply because you can? Just because it can be done doesn't mean it should.
- Are there politics at work here? Sometimes politics are unavoidable, but when they interfere with a decision to build over buy the results can be disastrous. I've seen this cost businesses literally millions of dollars. Having those conversations with executive leadership are tough but, once again, focus on the end result and not blockers during the process.
So it's important to keep TCO and TTV in mind. "What's this widget going to cost me in total if I build it?" And be sure to factor in all those hidden costs, too. You're responsible for the initial cost in paying people to build it. You're responsible for hiring people to maintain it as new versions or revisions are released. And you're ultimately responsible if this widget fails in production and the business suffers a catastrophic outage because of it. You rolled your own, and you therefore have no lifeline for help.
And for TTV, that one is fairly obvious, but how much quicker can you begin to reap the rewards by just buying something and getting it going? You don't need to spend six months to a year on research and development. You don't need to pre-validate with all the various versions of things out there. You simply pay someone else who has already suffered through that process, get it in the door, up and running, and begin to see the reward. Both of these factors you must consider in order to answer the question for yourself of whether you should buy or build. But in most cases, it makes very little sense to do so. Remember, your business is counting on this widget to make money just as you are counting on your car to take you places. Sometimes it makes more sense to buy and not build as it'll save you money and hassle in the long run. Take it from a car guy on that one.
This is one true, real-world example of how choosing to build over buy really came back to bite me, and it was a very painful lesson to learn. I didn't know it at the time, but this scenario has amazing and frequent parallels in the world of technology, probably no more commonly seen right now than in the cloud-native space. We're seeing tremendous outlays of resources while companies build snowflakes that comprise their operations and CI/CD pipelines. This equates to huge amounts of technical debt being assumed which in turn has major ramifications on business agility. That will be a topic for a future blog, so stay tuned.