December 10, 2009

The Patent Office Called... The Wheel's Been Invented Already

When it comes to developing software of all kinds, I feel like sometimes - more often than not maybe - we'll never learn.

I hear from purist software knobs everyday who tell me, maybe in not so many words, that when it comes to software components, in order to do something right you have to do it yourself. That is to say, even if there are perfectly good components already out there ready to be bought and implemented, it's better to just build it yourself.

To which I ask:

If you need an alternator for your car, do you go into your garage and construct one for yourself, or do you simply go to the auto supply store and buy one?

Of course, you buy an alternator for your car. But why? Well, you do it for several reasons:
  1. You do not know, nor do you care to know, how to build an alternator.
  2. You do not know, nor do you care to know, how an alternator works.
  3. It requires less time and effort (remember time*effort=money) to buy an alternator than it does to build one.
  4. Alternators are a commodity in the auto supply market, so they're fairly cheap.
I could go on with the list, but I think you get my point.

Many of the aforementioned software knobs would agree with me about the alternator, and compare it to a text input box, a radio button, a check box, etc. And, of course, in these instances their comparisons are entirely valid. However, my peers will often throw up their hands when I say that more complex components, like API wrappers for well-known web services such as Amazon S3, also belong in software's alternator bin.

The fact is that there are really very few reasons to build a new software component these days, and whether you're a software developer, a project manager, or an IT manager, you'll want to pay close attention to this list.

Business Justifications for Building, Rather than Buying, Software Components:

  1. There does not exist a stable and mature component that meets the functional and/or technical requirements of your project (not likely, but possible).
  2. Licensing agreements prevent you from using a purchased component in a commercial application (also unlikely, but possible).
  3. Building the component adds greater business value than buying the component (ie: your component will have features that currently available ones do not have, thereby giving your company competitive advantage).
  4. The cost (economic and opportunity) of building the component is less than the cost of buying the component (very unlikely). 
These are not the only 4 reasons, but they're probably the 4 biggest reasons. Regardless, unless the component you're planning to build can be justified by one of the four reasons above, then you probably should not be building it.

That said, I'm open to counter-arguments, further suggestions, questions, etc. Feel free to drop a line in the comments section below, or email me at brian (at) brian-driscoll (dot) com.

Image above courtesy of Used without permission.


LDM said...

Reason to build it yourself:
The guy who build the alternator didn't talk to the guy who build the battery, who didn't talk to the guy who wired the electrical system, who didn't talk to the guy who built the motors for the windows...

They all use different Voltages, Some are AC, others are DC. Some draw too much current for what the other can provide.

Quite frankly, Cars work because one company specs & builds the original of all the components, and then sells the components. The aftermarket knows exactly what the specs are and can clone it exactly (there are no hidden APIs like in Windows).

They also don't have an obsessive need for backward compatibility (try putting an alternator from a 1980 Ford F-100 into a 2009 F-150)

I'm not arguing that it's completely necessary to implement everything from scratch, but it's not as simple as just going to the store and saying "I need an alternator". (the auto parts store will ask for a VIN or a Year/Model and look up the correct part... a Software vendor will sell it to you without asking about your real requirements)

Unknown said...

Bravo Luciano!

For the professional wheel smiths out there, you know who you aren't..

There does not exist a stable and mature component that meets the functional and/or technical requirements of your project (not likely, but possible).

HAH! (99% likely, but the 1% still require ugly adaptations)

Brian Driscoll said...

Interesting comments, both of you. I suppose I should admit that most of my experience with OTS components has been through MS and Adobe vendors, but so far all of my experiences have been positive. All of the components I've used have had great APIs that expose a great deal of the component architecture and don't require much in the way of adaptation.

All of that said, I also realize that in my attempt to be non-platform-specific I may have over-generalized. Luciano, you are clearly right that there are a lot of software vendors out there who are snake oil salesmen. And, you are right that a manufacturer of alternators doesn't need to concern himself with how his component will interact with a car's other components, whereas in software development that is not the case. Clearly no matter how good a component looks or how well it functions on its own, it is hardly worth the money if it does not play well with other components.