Saturday, October 18, 2008

Are You Over-Engineering?

“Over-engineered.” Most software developers would cringe to hear their work described in this way. Yet over-engineering is common. One reason for that is, it’s easier to spot in someone else than in ourselves. To gain insights into what over-engineering is, we’re going to study what’s happened to the potato peeler over time. Below you see the traditional potato peeler that has served American households well for nearly a century. If anyone in your household cooks, there’s a good chance you have one of these in your kitchen.

There have been some incremental improvements along the way (nicer handles, angled blades) but the basic design hasn’t changed much.

The traditional potato peeler has a lot going for it. You can get the one above for about $2. It has only two moving parts, is compact, stores easily, usage is intuitive, and they last for decades.

Those design characteristics would seem hard to improve upon, but that hasn’t stopped companies from trying.

Enter the Rotato, shown below. To peel a potato (or some other fruit or vegetable), you mount it on the Rotato’s spiked base and lower the top arm. You then turn the crank and Presto! the peel comes off in one continuous strip. There is also the Rotato Express, an electric model.

Reviewers agree that when this works according to plan, the experience is fast and fun, and the potato is well-peeled. Reviewers also agree that the device does not always work well.

1. Unnecessary Complexity
At first glance, we can see the Rotato has many moving parts. While complexity is not an automatic indication of over-engineer-ing, it is one of the warning signs to pay attention to. When you see complexity that is unnecessary to do the job at hand, you have over-engineering.

Over-engineered designs are often unnecessarily complex.

2. Comparison Aids Design Assessment
To prove something is over-engineered you have to show a simpler and better design exists. Having another design to compare against reveals a great deal. We learn a lot about the Rotato when we compare it to the traditional potato peeler. The Rotato is a lot bigger, has many moving parts, costs ten times more, takes up a fair amount of space, and often lasts less than a year.

Over-engineering is best proven by comparison to a superior design.

3. Fatal Flaws Really Are Fatal
Design flaws come in two flavors, fatal and questionable. Fatal design flaws are not acceptable under any circumstances.

Does the Rotato have any fatal design flaws? Here’s one: the Rotato doesn’t peel the whole potato; in fact, it comes with a paring knife that you need for the top and bottom of the potato, and for “problem areas” of irregularly shaped potatoes.

Also hard to overlook is that the Rotato stopped working for many reviewers after they had peeled only 3 potatoes, requiring them to replace the blades.

Fatal design flaws cannot be compensated for by other aspects of the design.

4. Weighing Negatives against Positives
What about design negatives that aren’t fatal? A negative might turn out to be acceptable if there is a related benefit that is compelling, such as unparalleled safety, longevity, or an appealing feature. Or it might not. The negatives have to be weighed against the positives.

We identified some negatives about the Rotato earlier, but what are its positives? The Rotato peels potatoes much faster than a traditional peeler and doesn’t get your hands dirty. In the case of Rotato Express, there’s no manual labor involved in the peeling since an electric motor does the work. The experience is also said to be fun; this is a new benefit (you never hear traditional potato peeling called fun).

How do the positives weigh against the negatives? As you might guess, you’ll get different opinions from different people. Some reviewers love the Rotato while some hate it. Many of the favorable reviewers openly admit the Rotato’s problems yet love it nevertheless and recommend it to others. Many are on their second unit. The positives seem to outweigh the negatives for many users.

Perceived design negatives need to be weighed against positives.

5. Bells and Whistles Nobody Ordered
Another type of over-engineering is to festoon what you’re building with all sorts of interesting features that nobody asked for and nobody is likely to need. In soft-ware, this is often justified as anticipating future events or future needs.

The Rotato doesn’t have this particular problem, but a $2,320 peeler from Hobart might qualify. It comes with a stainless steel cabinet, a wheeled floor stand, leveling legs, a timer, and a peel basket.

Even if you know there will a future need for something, that doesn’t necessarily justify building it now. It’s much more important to focus on present requirements.

A design with unnecessary, unrequested features is over-engineered. Don’t design too far into the future.

6. Suitability is in the Eye of the Beholder
In reading reviews of the Rotato, it was interesting to notice that some of the most positive ones came from people with arthritis, or had limited use of their arms, or who had lost an arm. For them, the Rotato was the only way they could get back into the kitchen. We might rate the Rotato generally over-engineered, but for these people it is a godsend.

An over-engineered solution may be justifiable if it offers something crucial other designs do not.

7. Lack of Refinement and Refactoring
Over-engineering is a normal by-product of the software development process, which is why we now recognize the importance of refactoring. You often can’t see the ideal design until you’ve first achieved some prototype that works. The important thing is to not stop there. Now it’s time for iterative refactoring and design review.

Despite its problems, the Rotato has many loyal fans. It may be a diamond in the rough, a design not yet sufficiently refined.

Failure to refine and refactor often leaves an over-engineered result.

8. Trade-Offs
Design always includes trade-offs. In soft-ware, many of these trade-offs are well known. Security is at odds with performance. Database normalization is at odds with simplicity of queries. And so on.

Sometimes, people fool themselves into believing they don’t have to make any trade-offs. They reason, if we make this the best we can in every area, if we spare no expense, we don’t have to make any trade-offs. These people are wrong. The resulting complex design will bring consequences with it such as high cost, high maintenance requirements, fragility, or other risks. Luxury cars are a good example.

A design without trade-offs is almost certainly over-engineered.

9. Elegance
A sure sign of good design is elegance: over-engineered solutions are completely lacking in it. This is the place where technology meets art. Michelangelo said, “to sculpt, take a block of marble, and take away what doesn’t need to be there.”

All human beings recognize elegance when they see it. In music, not everyone is a composer but we all know good music when we hear it. The craze over iPods and iPhones is driven by design elegance.

Which is more elegant, the space station envisioned in 2001: A Space Odyssey (left) or the actual International Space Station (right)? Kind of like comparing the Sistine Chapel to an oil refinery, isn’t it?

Good designs are elegant, poor designs aren’t.

Final thoughts
An over-engineered solution is a job half done. As master craftsmen of our trade, we owe it to our customers and ourselves to make it all the way to the finish line.

While researching for this article, I explored what others had to say online and came across a blog posting using the potato peeler and the Rotato as an example of over-engineering. I thought this was a brilliant illustration--but I also felt the short blog posting did not really do the subject justice. That's my justification for borrowing the same example and giving it a fullter treatment. Unfortunately, I can't find the original posting to give proper credit for the idea.

No comments: