I love cars.  It's the thing I'm most likely to spend stupid amounts of money on, and only the guiding hand of my frugal wife keeps me from mortgaging future college funds on a shiny 400HP...whatever.  Too many 400HP cars around to count these days--topic for a future blog.

Let's talk software engineering by analogy with engine...er, engineering.  This is a rough analogy but it works during two-hour talks where the audience doesn't have time to examine my hand-waving and see where the analogy breaks down :)

Ferrari engines are exquisitely engineered; ground-up development for the most part.  They borrow from their F1 experience with exotic piston coatings, high-strength Exotic Alloy Du Jour for connecting rods, sodium-filled or titanium valves, aluminum blocks, you name it.  They run insane compression ratios at stupendous RPM's--over 8500 in the latest ones.  They reach and surpass what used to be a magical barrier--a specific output of more than 100HP per Liter (nice mixed US/SI measurements).  That number's not so impressive against the 200+ that modern motorcycles churn out--but they have a huge advantage, since it's much easier to get high specific output from an engine of smaller sizes.  Output decreases as the square of engine dimensions, while mass decreases as the cube.  A 4-liter engine making 430 HP is quite an achievement, considering it has to be streetable and last at least 50,000 miles with no major hiccups.  F1 is a different game; they're around 300HP/Liter now, but they might as well be turbine engines they're spinning so fast.

This is the equivalent of finely-crafted C++ with some assembly thrown in for the critical parts.  I think of Mike Abrash's book on optimizing code; down at the level of thinking about registers, L1 cache, locality of reference type stuff.  Getting that last 0.1%.  Worrying about reordering.  Thinking about memory barriers.  Cursing kernel-user transitions.  Pain, pain, and more pain.  Building a beach, one grain at a time, with a toothpick.

By comparison, the venerable Chevy small-block; truly an engineering tour-de-force, but not of the same kind.  This thing's been around what, 40, 50 years?  It's evolved, but the basic layout is the same.  For crying out loud, its camshaft is still nestled between the banks and operates its valves with freakin pushrods!  It's archaic by comparison.  And yet, it is triumphant in every way.  Volume, cost, reliability, total output.  Granted, it doesn't reach the Ferrari's high specific output in streetable trim.  They're in the neighborhood of 70 HP/Liter; almost lazy by modern standards.  But it gets better gas mileage--even though they're 5.7 liters against the Ferrari's 3.6 or 4-ish.  They rev less; less frictional waste.

Why is the Chevy the hands-down winner, when technically the highly-tuned engine is superior?  PRAGMATISM and STANDARDIZATION.  The Chevy has had decades of effort poured into it, millions of man-hours from both the actual developers and the vast hordes of third-party developers.  It's a standard.  Its engineering weaknesses have been conquered through sheer brute force over years, so you hardly care anymore.  If you can ignore the thought of pushrods banging up and down at 7000 RPM, your Corvette Z06 sure does a number on the Ferrari next to you.  Doesn't sound as good.  But it's about 1/4 the cost, and if said pushrods fail you won't shed tears too long.

So you say: "What does this have to do with CODE, and why are you not taking Lithium?"

Well it upsets my tummy, on the second question.  On the first, this has everything to do with Web Services, YAGNI, KISS, and HST. 

Web Services are bandwidth hogs compared to binary protocols.  Their serialization models leave a bit to be desired.  They are a little or quite a bit slower than binary at present.  But who cares!  Web Services are the Chevy Smallblock of the RPC world.  Their advantages are so compelling that we will though sheer brute engineering force MAKE them work.  Their "specific output", perhaps expressed as "objects/kilobyte", will probably never match a binary protocol.  But who cares!  Over time, every vendor, every software house, will become so invested in the magic of Web Services that we'll get around the limitations.  Or live with them.  I don't hear Corvette owners boo-hoo'ing over pushrods; I do see them able to send their kids to college on the $120K they saved!

YAGNI--"Ya Ain't Gonna Need It"--and KISS, HST ("Hooking S*** Together") are what most of us do for corporate and even ISV development.  We're not interested in the last 0.1%  We love elegance, but if it costs 4X as much it's out the door.  What we need is pragmatic, robust, standardized engineering.  I hate to say it, because it's Not The Developers Way, but cheapest usually IS best. 

Man did I ever swallow the Red Pill today.  I hope I'll soon return to my blue-pill nirvana of fine software engineering unconstrained by practicality, cost, schedule, or maintenance.  9000 RPM code; titanium con-rods and molybdenum piston skirts.  Nope, the pushrods and iron win over time--management was right after all.

:)

P.S. these analogies are TOTALLY my opinion, do not reflect at all on the excellent (in their own ways) engines/makers, and have nothing whatsoever to do with my employer. My views are my own, and they are insane.  I do not speak for my employer.