Wednesday, August 8, 2012

Second Order

Last week, Iris and I drove from Great Barrington, Massachusetts to Myrtle Beach, South Carolina. Along the way I came to that conclusion the most obvious insights are often the most evasive. For example, take the insight: if you want to lose weight, then eat less and do more.

Seems obvious, right?  However, based on:
  1. the number of people we overheard talking about wanting to lose weight, 
  2. the portion sizes of the food they consumed, and 
  3. the effort they placed into finding parking spots near the door,
I would have to conclude that it isn't obvious to everyone.

This obvious, yet evasive correlation among food consumption, activity level and body mass has analogs in other areas. For example:
  1. If you want to become a better musician, practice (more).
  2. If you want to get into shape, exercise (more).
  3. If you want to become a great writer, write (more).
All seem obvious (right?). Yet, I can't tell you how many people I've heard state a desire (to become a better musician, to get into shape, or to become a great writer), but who haven't followed up with commensurate (and obvious) action. This is not to say that they did nothing; it's just that they didn't do the most basic and important things.

What did they do? In software, we would call it second-order optimization. When developing a new system or writing an application, there are always things you can do to improve it. You can make it more efficient, faster, easier to use, cheaper and so on. The number of potential improvements is endless and each improvement reveals new opportunities for improvement. With all the potential for improvement, it's easy to fall into an optimization trap. You never complete anything because it could always be better.

To avoid the optimization trap, you have to put off improvements that are not absolutely essential to the  first release limiting yourself to zeroth and first order optimizations.

The zeroth-order optimization is the one that goes from not-working to working (No matter how many potential improvements there, there's nothing like making something work, period.) First order optimizations are the ones required to make something usable and useful. You don't have to make an audio processing system work instantaneously; however, if it's painfully slow, no one will use it. So, first order speed optimization would be the one that goes from painfully slow to acceptably slow.

Second order optimizations are the ones that would be nice to have, but aren't essential. Third order optimizations are ones that would only be useful to a small group of people. The definitions aren't strict (and often the topic of heated debate), but you get the picture.

The ability to determine the order of optimization is one of the most critical success factors for any project. I'd say that it was probably one of Steve Jobs' greatest strengths at Apple. In order to meet deadlines, he would discard product features that many considered essential and keep ones for which others saw no reason. He would delay the introduction of products that others saw as critical to the marketplace making Apple a latecomer and accelerate the development of products for which there wasn't yet a market. The result? Apple's product launches became major industry events because Steve Jobs had an uncanny ability to launch exactly the right product with exactly the right features at exactly the right time.

When it comes to ordering optimizations, most of us aren't Steve Jobs. We tend towards a proces that is often likened to rearranging deck chairs on the Titanic. We lose sight of the most important optimizations and pay inordinate levels of attention to ones that make little difference or would become superfluous had we first addressed the important ones.

A classic example is hiring the wrong person for a job. You interview candidates. You identify the best one. You recruit her and hire her. A week after she starts work, you realize that she's not all that you'd hoped for, so you:
  1. let her go and hire someone more qualified,
  2. prop her up by helping her complete her tasks, or
  3. put her into a training program that will hopefully improve her skill level.
Although the best answer for everyone (including the person hired) is always to recognize your mistake, let her go and hire the right person (there are studies that show this), people almost never take that course. Instead, they spend excessive effort trying to fix or cover the mistake. They make second order optimization more important than first order, sometimes at great expense.

There are many common reversals of order like drinking diet cola while consuming vast quantities of fat, or spending more time on your hair than learning your song, or making the trim color in bedroom more important than the pouring of the foundation. Some just slow us down, some completely block progress and some are downright disastrous (e.g., not taking the keys away from your drunken friend because you don't want to harm the relationship).

In the end, knowing what is zeroth-, first-, second-order and so on and letting that guide your priorities and activities can have a stronger impact on your level of success than anything else, period. It's the key to working "smart", rather than working "hard".

I'll betcha a dollar that you've got a lot of first order optimizations gathering dust on the shelf while you spend your time on others. How about checking to see if it ain't so?

Happy Wednesday,

No comments:

Post a Comment

Read, smile, think and post a message to let us know how this article inspired you...