Wednesday, April 18, 2007

Higher Order Endeavors

I started out working in the computer industry as a contractor at NCR, which was going through an interesting corporate shift. As its fullname, National Cash Register, illustrates, NCR began life as a hardware vendor in the pre-computer days. I began working for them in their Columbia, SC, location, which at the time was still largely a hardware manufacturing facility, producing midrange servers and PCs.

NCR started by making the hardware, then at some point moved into making operating systems for the hardware (including their own flavor of Unix), then acquired Teradata (which made a high-end database management system) and moved up the stack a little more. From the box to the OS and drivers to core database software.

In the process, NCR was discarding the lower links of the chain as they became commodities. In the three years I worked at Columbia facility, NCR sold the manufacturing line to Solectron and OEM'ed the servers and PCs back from them. Not long after, it began selling these OEM'ed servers with Sun's Solaris installed on them, easing out of the Unix business. By the time of my last NCR project, the company had turned the Columbia facility into an enterprise software development shop, creating large-scale BI and CRM applications running atop the Teradata database.

Why? To move higher up the food chain.

How many software developers these days learn anything about the OSI Reference Model? Few, thank goodness.

How many software companies write their own proprietary database engines? Few, with the ones who do usually in a very specialized line of high performance software.

And why the hell should they need to bother with any of these things, any more than a master chef needs to waste his time making his own knives or hand-hammering fry pans? The goal in software development is to spend less time on the foundation and plumbing and more time on producing useful applications.

Unless, of course, the stuff available on the open market isn't up to your high standards and highly specialized needs. Few chefs I know of weave their own cloth for towels or sew their own napkins (the linen service does a fine job with that), but plenty do grow their own herbs to guarantee they always have a fresh, high-quality supply on hand.

And that's the mantra I keep repeating to myself when I find myself tempted to build a custom database application from scratch rather than buy something off the shelf, or decide to write my own socket layer or object model rather than building atop someone else's frameworks: Higher Order Endeavors.

Yikes!

A comment and link from Matt Dickman on Rajesh Setty's Life Beyond Code blog is illustrative of something, but I'm not exactly sure what. The comment is as follows:

This graphic (which I came across just yesterday) helps illustrate this point [about competition among open source vendors] very well. Just look at the number of splits in Linux alone. Each slightly different and improving on one another. It's fascinating to me how quickly these iterations happen to deliver a new product to consumers.

While I agree with the general sense of "isn't this graphic amazing?", Dickman seems to view it in a much more positive light than I do. Does it not strike anyone else that the graphic illustrates something just a little bit disfunctional and overly complex?