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
Tuesday, August 21, 2007
Do the right thing
Plane had a tear in baggage compartment. Rather than make SOME bags late for SOME people, putting on the next flight, EVERYONE was 3 hours late.
Hope the bags make it...
Make sure you don't treat YOUR customers this way.
Categories: selling software
Saturday, July 14, 2007
I've got nothing
The final six hours was great. This is definitely the best I've felt all week. Some of it is sinking in, although I'm not sure anyone else would find our scenes worth watching yet.
We played a game called "1, 2 Selected." This was invented by some guy at a convention; our teacher liked it so much he decided to show it to everyone he knows with the hope that eventually it gets back around to the same guy. Then that guy can say "Hey, that's my game! I invented it!" And probably no one will believe him....
Anyway, the game starts like this. One person on stage with a partner starts a beat by snapping; everyone joins in and keeps the beat steady. Then in time with the beat (drawn here with the pipe symbol) the person chants "|Who|Ha|1,2|selected." The partner then calls out either "1" or "2" immediately (well before the next beat). Now if the partner called out "1" the person repeats the same chant, otherwise it's repeated with "|Ha|Who|1,2|selected." So the "1" or "2" response controls the order of the first two words. But you're on a beat so the calling-out of the number has to turn into one or the other very quickly.
So at first even this is hard, but then you get to where you're really concentrating on what the partner says, and you can get it pretty smooth. Fine, but that's just the warm-up. :-)
The real game is: Now instead of the choices being "1 and 2" you have to come up with a pair of words on the spot. They can be anything, "dog,cat" or "floor,can" or even "dog,shog" -- it doesn't even have to be real words! Then the second person repeats one or the other word (so not "1" or "2" anymore) and the same "|who|ha" or "|ha|who" rule applies. And every go-round you must use different words.
This is really hard. The point is to get you listening and reacting while also loosen your brain so words will just flow out. Of course they typically do not flow out. Also there's the tongue-twister aspect of the who/ha stuff.
The first stage exercise was "Worst Scene Ever." You get up there and intentionally break every rule you know. Lots of possibilities here -- stand with your back to the audience, walk through the made-up table, call the person next to you "son" and then "dad." Jokingly the idea was to "get all that out of your system," but it was also useful as a warm-up because it makes you re-think the rules which does make them stronger in a way.
The second stage exercise we did is called "The Double-mint Twins get Fucked up the Ass." Four people get on stage in two pairs; each pair stands right next to each other. You do a scene, but the rule is that each pair must talk, move, etc. together and simultaneously only. Of course you cannot talk beforehand to decide what to do, so you have to just detect who is leading and where they're going. You also move and talk in very slow motion so the other person can detect and catch up to what you're doing. It's bizarre. What you're practicing is paying detailed attention to what the other person is doing and detecting who is trying to lead.
The scenes we did this way were actually pretty funny. I think it's because with the slow-motion you have lots of time to think about the next line. Also two people are thinking about the next line; if one is dry maybe the other has something.
Another exercise we did called "Monkey Wrench" was designed to get you to think fast and to accept whatever happens in the stage environment. Two people start a scene and establish who they are, relationship, etc.. Once it's comfy, a third person (the "monkey wrench") from the wings comes out and completely violates the world -- breaks the Rule of Agreement -- and walks off. For example, if the two people are mopping the floor of a hospital, shooting the bull, the monkey wrench could swim in front of them. The instinct is to "drop your shit" -- lose your character and suddenly be bobbing up and down in the water. Wrong. That just happened, and in improv no matter what you thought the assumptions were you have to deal with whatever is happening on stage without violating anything else you've established. So in this case you just have to accept that you're two janitors cleaning the bottom of the hospital's pool. So you might start by saying "The bubbles from these scuba suits make it hard to see when the floor's clean." "Yeah, but with these new suction-cup-boots it's a lot easier to clean!"
Of course the scene doesn't have to be completely plausible after that, nor does it have to be funny. You're just practicing "dealing with whatever" and not dropping what you've got. In a real performance no one else would violate your space that badly.
The interesting thing there is that often the result is very funny. In fact, just the act of accepting it and even making stuff up about how this makes sense anyway is in itself funny. Plus, as the teacher put it, the audience enjoys it when something awkward happens, and enjoys you getting out of it or explaining it.
The next exercise was called "You and I." Two people up, and the rule is: Every line must start with "You..." So e.g. "You always do that to me." "You think it's OK to kick old people?" "You don't know this about me, but." Both people do this. The point is that even with this restriction you can actually learn quite a bit about the person talking, even when the content is always starting with the other person as the subject. Then there's the same but starting with "I," and you see the opposite -- that even just talking about yourself you can still imbue the other person with all sorts of attributes and history.
The lesson from this point is that you can tell these stories in less direct ways. If you want your character to feel doesn't get enough attention, you don't have to just say "You never pay attention to me." Instead you can beat around the bush -- and in fact this can be funnier, can work better into a scene that might not ultimately be about that, and even in real life this is usually how these feelings come about anyway, so this indirectness can be funnier because it hits closer to home or is more plausible.
We continued this idea in a more difficult way in the next exercise. Three people got up and the whole situation was given to them. First, they all hate each other, and we would give 3 or 4 reasons why each would hate each other. Tons of reasons. Cheating with women, killing their baby, running over their dog, lying so the other person had to go to jail, etc etc. Pile on the hate. Then situation of the scene is such that they have to get along. Maybe they're all groomsmen at a mutual friend's wedding, and they're backstage, so they can't break out a fistfight. They have to find common ground. They might bring up something from the past, they might fling a fleeting word, but they have to get through this together.
It's difficult, but the lesson is that not all scenes have to be "The day the shit went down." Beginners have a tendency to do these types of scenes: Couples breaking up, a kid doesn't want to go to school, someone wants to quit a job, whatever. And some of this is because of rules and exercises we were given -- remember the one about moving a scene by saying "I have a confession to make?" Those are "The day the shit went down" because something big is happening. It's sort of the obvious way to make a scene "go somewhere."
But the other type of scene is "Slice of life." A J.D. Salinger-style snippet. These scenes are the most common with pro's for several reasons, but mainly because that's more usual and reasonable. People do have back-stories, possibly even sordid, but almost all of real like are people interacting without the "big event" going down. And then you can see characters more subtly, and that's probably more funny.
But these are really hard for beginners because you don't know where to take them, how to develop them. And you'd better have a strong sense of your character because it's going to be about the character far more than putting it in a stressful situation. So this exercise got us to at least think about that and try it.
Finally, we got a little practice at the "long form," meaning multiple scenes strung together as for a real show. It includes edits (other members deciding when the scene should be "cut" for maximum effect, described elsewhere). It often includes call-backs where a character from a previous scene makes another appearance. There are some tips for that; for example, whatever trait that character has must be immediately apparent when you call it back so all the players -- and the audience -- immediately understands who it is and not some new character.
The best advice I got today was: When you're sitting on the sidelines, sometimes you have some ideas. Ideas for character traits, desires, motivations, a funny situation, whatever. OK, but sometimes you really have nothing -- you're blank. At that moment, walk on stage. Do not hesitate, do not say to yourself, "Oh, I need to think of something," just walk out.
Of course this sounds like suicide. The odd thing is it isn't, and it's almost the opposite. I don't know why. Maybe because once you start thinking you're already lost, maybe because doubt leads to fear, maybe because clean slate + jolt forces you use all these on-the-fly techniques we've been taught rather than relying on something you just ruminated over. Whatever the reason, today I jumped up on stage every time I felt that way, and it always worked out well.
So this was the end of the course. It was a blast and I'm going to continue with classes although not in this intensive format. I've already felt this experience changing some aspects of life outside the classroom; I'll be thinking about that and will take some time to digest it before writing about it, unlike these entries which were just brain-dump journal entries from my class notes.
Categories: misc
Friday, July 13, 2007
Where have your fingers been?
What do these things have in common: Screaming, the living room, dirty fingers, and a convenience store? All improv games, of course!
Day 5 started with a "Convenience Store" game, but different from the one described a few posts ago (which was about object work). This one is character work -- from a circle, one person approaches another, having to develop a character in the few steps on the way there. (Extending the notion I wrote about before of using whatever you just did and how you feel to build it up immediately.) The person you approached is the convenience store clerk, standing behind the counter. Your character has to ask for three items and pay for them; of course the way you ask and the things you pick and so on should match the character. When that's complete the clerk heads off to be the next character. In the interest of time we started three of these at the same time so everyone's engaged most of the time.
Then we started right into the arbitrary scenes. Before you went on, you had to think of someone you know and be that person in the scene. Imitate them, exaggerate a characteristic, have their motivations. Of course where you're up there it's not vital that your imitation be accurate -- you're just using this to inform the character and it's OK however it turns out. This was a great exercise for me because for some reason it clicked. It made it much easier to know what to do, how to react. And in each case I ended up not actually being that person, sometimes not even close, but having thought about that and coming out with something a specific character did develop and it was easy to work inside that framework.
We did more scenes with tips that echoed that from previous days, so I don't have to go into detail. Things like: "Come out with an adverb" (decide you'll be happy or fast or angry). And: "One thing that drives you" (You want to quit your job, you want to get the other person to appreciate you). Again, sometimes the scene does become about that, sometimes not. But having that makes something happen, and when everyone on stage sees the something you can then work with it. It helps to generate something real and plausible; otherwise you come out with nothing and have you work out what's happening during the scene -- not only is that hard, it's actually bad for the audience because if you don't know what's happening, the audience certainly doesn't know, and that's not entertaining or funny.
Another great tip was: "Deal with the 1st weird thing that happens." Weird things are a "gift." If two people come one and one trips on the way, that's probably the whole point of the scene -- this guy trips all the time. If the two personalities are a weird mix -- which usually they are -- then the point of the scene and the comedy is exploring the idea that this weird mixture is in fact normal. These two characters don't match and yet are friends or doing a common task or whatever. That in itself is a great source of comedy. So whatever it is that's "weird," right at first, grab that and instead of figuring a way around it (i.e. to make the scene more plausible), build that into your assumptions. On the next day we actually did more exercises about this, but more on that in the next post.
After the break we did a "Screaming Exercise." Everyone gets into a rugby scrum, looking down. Then on the count of three you look up and at someone -- anyone. Make eye contact (most of these exercises involve making eye contact). If the person you're looking at is also looking at you, scream. That's it! It's weird and funny. Just loosens you up -- I'm not sure there was an important lesson here.
Then we played "Where have your fingers been?" In a circle you sing a little song asking where your fingers have been, then the first person turns to his left and names a non-geographical place/situation, e.g. a picnic, the south pole, an assembly line, dinnertime. That person then has to play out a little 30-60 second scene using two fingers to represent two people. The purpose of the exercise is obvious. It's easier than a real scene because you're in control of both characters, but you still have to think quickly and develop some situation.
The most difficult exercise of the night was "The Gauntlet." This is essentially the same thing as "10 characters in 60 seconds" from yesterday, except that in this case there's another person on stage. That person only reacts however -- no help in trying to complete the task. But as it turns out this is (slightly) easier than just doing characters on your own because the other person gives you ideas. It's not on purpose, but e.g. if you see someone laying down than maybe you're giving them CPR. It's slightly easier to move into a situation where anything else is present. Still a very difficult exercise but this made more sense to me than the one where you were just up on your own.
Finally we did "The Living Room." This is a show format, meaning a structure that could be used to fuel an entire show rather than just one scene. It's essentially an idea-generator for scenes. The players are on one side of the stage (the "living room") and then talk about anything just as they are -- no characters here. Whenever something is said that gives you some inspiration, you just jump up and start a scene. Someone else jumps up too. Normally in this format you self-edit -- you decide when the scene is over. It was kinda fun to do it, but it didn't add any new information or skills other than just being more practice.
Tomorrow's the last day!
Categories: misc