Giving you the power to do
what your competitors can't
The essence of app development success
Dave Ziffer, April 1, 2012

Quick .. who won the Indianapolis 500 last year? Marco Andretti? Dan Wheldon? Ana Beatriz? Someone from Team Penske? Who was second? Third?

Actually, the real winner of the most famous American auto sport was the Honda Motor Company. Since 2006 Honda has made all the engines in all 33 cars of every Indy race, so no matter who wins, Honda wins. In 1994 Honda was new to Indy racing, which means that it took Honda a mere 12 years to eliminate all competitors. Even more interesting is the fact that prior to Honda's arrival, Indy drivers had a greater chance of dropping out due to engine failure than from crashing. Now the odds of engine failure are approximately zero, which means that if you didn't finish, you probably crashed. In 2008, 2010 and 2011, there were actually, literally zero race-day engine failures at Indy.

Honda doesn't win by accident. It wins by design. Honda designs its cars and engines using methods based upon the work of a little-known engineer named W. Edwards Deming. Deming is the guy who taught the Japanese how to build automobiles that could run for 200,000 miles without any major repairs at a time when US auto makers were reveling in the joys of planned obsolescence and selling us cars with five-digit odometers.

So what is this big design secret that so few American managers seem to know about? The central concept of Deming's quality engineering is this:

reduction of unnecessary variation

That's it. That's how the Japanese redefined the US auto industry. That's how the world's manufacturing leaders, today now mostly overseas, rule the world markets. And that is how someone else is probably going to eat your lunch unless you get hip to the idea.

Honda wins the Indy every year because it long ago converted auto manufacture from art to science by eliminating variation from its manufacturing process. Honda auto parts are far more uniform than those of most competitors, giving Honda lower overall costs of manufacture, reduced need for testing, and staggeringly higher overall reliability. While most car makers seek out the cheapest parts suppliers, whom they will abandon at a moment's notice for a cheaper part, Honda establishes long-term vendor relationships in order to ensure consistency from part to part and year to year. But uniform parts are just the beginning. Honda doesn't just design a car - it designs entire systems to ensure production of the most staggeringly uniform cars on the planet. Starting with the most consistent parts in the business, Honda has assembly techniques to further ensure that the small unavoidable variations in its parts cancel each other out as much as possible, so that for example two rotating plates in a transmission will cancel each other's imbalances to reduce destructive vibration.

So what does this have to do with software app development?  Everything. Despite all the hype to the contrary, the central concept of quality app development is the same as in every other engineering field. The out-of-control software project is not a victim of unfortunate circumstance. Rather it is the predictable result of a naive view of software development - namely that a software "app" consists of nothing more than a collection of features that can be strapped together any-which-way by any given set of programmers and expected to function properly.

But wait, you may be saying. Manufacturing involves the creation of thousands of nearly identical items, whereas custom app development is simply done once. How could there be a connection? Well the connection is that even a single software application is almost certainly doing dozens of similar or identical things throughout. If you have designed your app well, each such group of similar operations is being performed by one central body of code - minimizing the variation in how things are done throughout your app.

Creators of the tools that programmers use to build apps, such as Microsoft for example, have spent years and millions building features into these tools that allow programmers to achieve great levels of uniformity in their software designs and implementation. There is a whole field of programming called "object oriented design" that is dedicated entirely to the use of such features. There are also whole segments of formal computer science ("state machine theory", for example) that deal with producing code that simply cannot fail, i.e. where the design is so intrinsically tied to the user's usage of the app that the app simply cannot produce an unexpected result. These methods can collectively be used to produce applications that are orders of magnitude easier to build and maintain than most typical apps.

So why isn't the custom app business bathed in success? Why aren't we experiencing a software version of Moore's Law, where the cost of app development drops by a factor of two every 18 months? With hardware success so predictable, why does the failure rate of software projects stubbornly remain well above 50%? And in a world where the cost advantage in computer hardware over the past 30 years is now about a billion-to-one, why are companies bleeding themselves dry trying to develop custom apps?

Again the answer is simple. Although the tools already exist to remedy these problems, few programmers are either trained or inclined to use them. Furthermore the software industry is now awash in a set of "methodologies" that actually discourage the practice of doing upfront design (upfront design is essential for the successful use of these tools). And finally, aggravating the problem even more is the increasing management tendency to believe that we can staff software projects with ever-cheaper, ever-more-junior programmers, much as the manufacturing industry has done. Unfortunately this successful low-skill manufacturing paradigm just doesn't map well into the ultra-high-skill field of software development.

In thirty-five years of software application development I have seen really only one common thread underlying software project success, and that is consistent design. Conversely, every project failure I've observed is due to poor design, which is simply the absence of consistent design. The destroyer of software projects is rampant variation - the app has 20 ways of doing the same thing, replicated for each of the thousand things that the app is supposed to do. You cannot throw enough money or staff at a poor design to make it work, but that is precisely what thousands of companies are doing in desperation at this very moment.

The next few articles will be dedicated to high-level explanations of the core components of successful software development, including clear illustrations of how each component directly affects your bottom line. Should you as a CIO or software project manager take the time to become versed in such technical detail? I think so. There was a time when an American manager could get by with an MBA and a good golf game. Shoddy engineering didn't matter, because the world would always buy from the world's only standing industrial power. But today it seems that managers need to know a lot about what the people beneath them are doing. Managers at Honda and Toyota and Hyundai tend to be line workers who rose through the ranks, and who understand the engineering challenges and company design philosophy very thoroughly. When Apple Computer placed itself under the direction of a non-technical marketing star, it spent the next decade losing market share Today, any CEO of a modern oil company who is not following the latest developments in theoretical particle physics will probably not be CEO for long.

I've seen CIOs and technical managers fiddling with their cell phones at technical meetings. The message from that has always been clear to me. My message is this: if you are not leading the technical discussion at your next meeting, perhaps your job is not as secure as you might imagine.