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:
- You do not know, nor do you care to know, how to build an alternator.
- You do not know, nor do you care to know, how an alternator works.
- It requires less time and effort (remember time*effort=money) to buy an alternator than it does to build one.
- Alternators are a commodity in the auto supply market, so they're fairly cheap.
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:
- There does not exist a stable and mature component that meets the functional and/or technical requirements of your project (not likely, but possible).
- Licensing agreements prevent you from using a purchased component in a commercial application (also unlikely, but possible).
- 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).
- The cost (economic and opportunity) of building the component is less than the cost of buying the component (very unlikely).
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 http://thereifixedit.com. Used without permission.