Wednesday, June 21, 2006

Perfection, or some reasonable facsimile

Today I fixed the last known, active bug in any of my features. Well, actually, it wasn't even really one of my features, but I'm the one who changed it last. When you're using a page based on a template, we draw a colored translucent mask over the areas that you can't edit, so it's easy to tell where you can type and where you can't. But, some people don't like it, so I added a way to turn it off. My last bug was that my new option to turn it off worked for ASP.NET Master Pages, but not the old FrontPage 2003-style Dynamic Web Templates. They're both very similar in the goal of letting you have one template page and a lot of sub-pages based on that template, but they work in different ways. Who cares; that doesn't matter right now.

Now, in all honesty, I do have one more active bug assigned to me that hasn't been fixed. It's a bug based on an error report that someone recently sent in. You know when a Microsoft application crashes, how you get that Send Error Report / Don't Send dialog? Well, SharePoint Designer crashed, and someone sent a report, so now I have a bug on the part of the product that draws background images, as far as I can tell. All I have to work with right now is a big blob of memory from that user's computer. I don't know anything about that code, so I'll probably pass the bug off to someone who does.

So, if you don't count that bug, I'm down to zero. My features have reached perfection. Sort of.

Of course, there are any number of improvements that you can make to any product. Whether it's a mistake in the code or just some feature that nobody ever thought of, it's all pretty much the same in the end—an opportunity to make things better. Seeing as beta 2 of SharePoint Designer 2007 has already shipped, we're trying to cut down on the changes we make, because if we didn't, we'd never be finished, because there's always more things to do. So, insignificant things get "punted"—we decide that it's not worth the effort or risk (every change to the code carries some risk of breaking something else) to fix for this version. The most recent bug of mine that comes to mind that was punted is that one of the features I own is a window that flickers a little too much. It's not bad, it's just noticeable if you're detail-oriented. But, fixing the flicker could introduce some bug where the screen doesn't refresh when it should, or some other display issue, so it's not really worth spending time looking into it, fixing it, and retesting it. No matter how careful I am, I don't know every line of code in the product, so there's always the unpleasant little chance that I could screw something up. If I screw something up, chances are that any problem introduced would be at least as bad as some windows flicker, just because flicker is so insignificant in the grand scheme of things. I'd have spent time and my tester's time fixing a bug only to introduce an even worse one. Not a good tradeoff. So, we're almost certainly going to ship the product with that flicker bug.

Intentionally shipping software with bugs is something I didn't really understand when I was younger. But, it's just part of the reality of things; if you didn't do it, you'd never ship anything at all. We'd all be working on stuff from 1990, and competitors who shipped with bugs would be working on stuff from 2006 and destroying us in the marketplace. Even a piece of software with no code defects could still have design defects or subtle little things that work as intended but not as the user expected. Those are bugs too. There will always be bugs, so you have to ship with them. Famed software engineer Joel Spolsky has an excellent essay on the topic of shipping with bugs that I can't find right now.

But, as of now, my features in SharePoint Designer 2007 are about as close to perfect as they're going to get for this version. And that feels good.

1 comment:

Luke said...

Why is it with bugs, it always seems that when it rains it pours?

Sometimes, it seems like you are testing something and then you cross the River Rubicon and then all bugs emerge from the shadows to steal away your precious time.

Then, they're under control again...for a while.