Six-Sigma, ISO 9001, and the like are processes used in mass-production lines to ensure vanishingly small errors.
It makes sense, if you're Dunkin Doughnuts producing 350,000 doughnuts per day. The problem is that some people insist that these processes should be applicable to software development.
"Why can't software development be more like electronics development?" "Six-Sigma means almost zero defects on massive scales, so why can't we use these techniques in software?" These are the kinds of questions you get.
And of course some people actually try. Defense contractors, CMMI devotees, and behemoth government-like organizations try.
But software development isn't like making 350,000 doughnuts. With doughnuts the thing you're making is completely understood and measurable, and the problems come in copying the Platonic form zillions of times without error. Difficult, I agree.
But in software you're making ONE, massive, complex, changing, ill-understood thing, and making it ONCE. When we ship copies, they are perfect copies. Unless you're burning DVD's, in which case the act of burning might be best handled under Six-Sigma.
The problems are completely different.
For example, our software interfaces with other tools. When those tool vendors release new versions, it's possible that they break our interface with them. Therefore, even with perfect copying and no existing bugs, our software will STILL BREAK!
For example, in software requirements are supposed to change. Possibly during development, definitely afterwards. Once it's decided that a bridge is supposed to go from A to B, it's done. Even if that decision turns out to be wrong, everyone accepts that either we should nuke the bridge or finish it anyway -- there's no concept that we should rebuild the bridge in mid-air and still make schedule. Not so in software -- this happens all the time.
For example, software's purpose changes over time. A doughnut is always supposed to be a doughnut. A home Wifi router gets small firmware updates, but no one expects it to do more than what it did on the they day bought it. Most software projects change radically over their lifecycle. Windows 1.0 barely solved any problems; Windows 95 changed everything, and Vista barely looks like it came from the same company that released XP. Even Google Search -- the algorithms, advertising, and company goals are nothing like they were when it first became well known. But Dunkin still primarily makes doughnuts (and coffee), and we expect nothing now from 50-year-old bridges than what we originally expected.
There's more. Software developers themselves are a different breed than workers on the doughnut assembly line floor. The world-view and skills required for software development turns over at least every 10 years (more often if you want to change jobs). And sometimes a new feature really is more useful to a customer than a bug-fix, though rarely does anyone admit it.
The point isn't to say that it's OK that we have bugs in software, or that we can't do anything about, or that we shouldn't try. It's just that blindly applying process from other disciplines is not the answer.
Friday, October 26, 2007
Software is NOT like 6-Sigma
Categories: software development
Bing! You've got Cash!
The worst ATM I've used is at the Austin airport.
That in itself is a weird statement. How different can (should?) an ATM be? Just give me cash fast, right?
First it asks what language I want. Fine.
Then it confirmed: "You have selected English. Is this correct?" Yes.
But choosing "Yes" made a sound that is exactly the Windows "Cannot click there" sound. Like when you click outside a modal dialog. Turns out it used that sound every time you selected something properly, and no sound if you made a mistake -- precisely the opposite of my Pavlovian reaction. The whole experience was unnerving.
So then it asks whether I want "Fast Cash" or "Other Transactions." I chose fast. I got the usual list of $20, $40, ..., $100. But I needed $150 or $200. Not an option. No way to say "Enter a number." Only other option is "Cancel." So I hit "Cancel."
Not so fast! Now I am prompted: Do I want to "Exit" or "Start Over." Start over of course. Oh wait, you need to swipe your card again and select your language. So "Exit" and "Start Over" do exactly the same thing. Great.
This time it's "Other Transactions." The following screen was identical to the "Fast Cash" screen, except now there's also an option to type a different amount of cash.
Sigh.
Does your application have more choices than it needs? Does your application ask questions it doesn't need to?
Sometimes it's more subtle. For example, maybe you have 10 independent user settings, but there are really just 3 combinations of those 10 which 90% of users really need. Why not provide one option with 3 choices instead of making the user figure that out?
Or take a middle road: Provide 3 choices, but also have an expandable "Advanced" or "Details" view where power users can tweak further.
Not only will this cut down on your tech support, it also helps new users get going in the system with something consistent and sensible for them, which means your trials might go more smoothly.
So now that you've reached the end of this blog entry, would you like to Exit, or Start Over?
Categories: software development
December Dumbass
Don't be a schmuck.
This is Jackie Mason's advice about financial investments. Or how to buy a suit. Or how to treat your mother. I think it's his advice about everything.
He's right. Especially about software release dates.
In my infinite wisdom, last year I decided we needed to release Code Collaborator v2.0 at "the end of the year." This was brilliant because: Since everyone is on vacation at the end of the year, the office will be relatively quiet and we can get the release done.
What I didn't consider was that we would be on vacation too. And that the customers who we imagined were anxiously awaiting our release were also on vacation.
So after killing ourselves, and slipping to Jan 20 anyway, turned out no one cared. We cared about our deadlines much more than anyone else.
Even when you have people waiting for a release, remember that they'll upgrade when it makes sense for them. If you're in the middle of a release cycle, you probably won't spend the time, take the risk, and get retrained on an upgrade. We're the same way -- a new version of the profiler we use came out during our 2.0 crunch, but there's no way we had the time to mess with it then. Even if it's better.
So this time we released v4.0 beta on Oct 1, and we expect to exit beta before the end of the year. But if we don't, we don't care!
Categories: day in the life, software development
Thursday, October 4, 2007
800lb Gorrillas Don't Care
NetFlix just posted their first ever decline in subscribers. They attributed this to Blockbuster -- the company some people thought they would put out of business.
A year ago Blockbuster responded to NetFlix's success with a similar program of their own, except that you could trade in DVD's at the store which meant more immediate turn-around time. It's a great way to leverage their advantage -- physical stores -- against a seemingly unstoppable business model.
And it worked. Or did it? Blockbuster reported an $82 million loss for the first half of 2007, attributing this to costs associated with the new plan. So they slowed NetFlix, but it's hardly a success.
Small business operators worry about this sort of thing, especially when evaluating ideas for new ventures. What if the 800lb gorrilla wakes up and decides to compete with you? They have zillions of dollars to throw at it, and they probably don't even have to make a profit. How can anyone compete with that?
Stop worrying. In my opinion, this should never enter your mind, and here's why:
First, I'm assuming that you have your own niche, your own market, your own game. Something no one else -- certainly no one with a large, established business -- is doing. You're not going to go head-to-head with them out of the gate.
So assuming you're skirting the big guys, your worry is that they'll notice your activities and squash you.
First of all, your market ought to be so small that a big company wouldn't care. Even a $500 million market is too small for a mega-corporation to attack -- even owning 50% of it wouldn't account for the amount it would cost to own it. As much as you might think this is personal, it isn't. They don't care about squashing you, they just want to make more money.
If you do grow to such a size that you've validated this (new?) market, perhaps proving it's better than anticipated or that there's buzz to be had or whatever, to the point where the Goliath is willing to spend 100's of 1,000,000's of $$, you've already won. You're already wildly successful, more than you ever thought possible.
So don't worry. The elephant won't swat the fly. They don't get it, and that's in your favor!
Categories: selling software