Each Ferrari is a work of art that you can drive. The engine and powertrain are derived from the latest F1 racing designs. The suspension geometry is optimized for the speed and conditions of a race track. The carbon-fiber bodywork is hand-laid in molds designed to aerodynamic perfection. The components are assembled by a small workforce of craftspeople. Photographs are taken throughout the process and provided to the future owner in what is called “The Baby Book.” The end result is a finely-tuned, yet capricious, machine.
Each Toyota is an example of modern manufacturing techniques and efficiencies of scale. The engine is the tenth refinement of a ten-year old design. The suspension is designed for rutted asphalt and concrete highway sections. The interior is a lesson in compromise: How to perform necessary functions while remaining unobtrusive. The components are assembled by a fleet of robots and humans on a perfectly-timed assembly line. The end result is a dependable and predictable machine.
If you are fortunate enough to own a Ferrari, you quickly learn to live with the maintenance of such a machine. An oil change with six quarts of full synthetic runs $300; expect to buy a new set of tires each year for $4,000; suspension components are replaced every few years for $25,000. The price for driving a work of art is high and the average usage for an Italian exotic is just 3,000 miles a year.
If you own a Toyota, you get a predictable maintenance schedule. There are $30 oil changes and $500 service intervals. Plenty of spare parts are available direct from Toyota or the network of other compatible suppliers. You can get your Toyota serviced just about anywhere. You can push your Toyota to 100,000 miles and beyond.
Software and cars are similar beasts. Both are usually considered as objects, whole entities, rather than by the composition of their sub-systems. Cars and software also share similar development tracks: usually there is a sexy prototype to show and then layers of safety checks and compliance tests get added on. Both have to be maintained and repaired, whether on a schedule or because of emergencies.
You are probably starting to see my point now. When you build software and systems, you want to build a Toyota, not a Ferrari. The Ferrari of software would leave you troubleshooting complex algorithms, or looking for drivers for an experimental key-value store. Aim for reliability through iteration and refinement. One novel idea at a time is sufficient. Think about how and where failures will occur and plan for them. Identify the parts of your system that might not scale, or might not fit every use-case, and make them easy to replace.
Your software should be something you can “drive” every day without a lot of headaches. Building a Toyota is every bit as challenging as building a Ferrari -- the tradeoffs may not seem sexy, but they are worth it. Good software will be just like a Toyota: dependable, efficient, predictable, and in most cases affordable, too.
Have you built your software as a Toyota or a Ferrari?