Pre-flight: Omni’s Internal Testing

Ever have a day where you feel like computers have turned against you? If they’re not spattering the screen with cryptic error dialogs, they’re refusing to Undo, replacing your hours of work with a A bomb icon, or just giving up and rebooting.

When I have a day like that, I feel productive. See, one of my jobs here is to test our software. Like a Test Pilot, I take things out for a flight to find out if they’re safe before the general public does. Of course, I’m steering apps, not planes. And if I crash one, it’s a lot less painful and doesn’t make the news headlines.

Sometimes testing looks a lot like anyone else using the application. I add actions to my OmniFocus database, compose a blog post in OmniOutliner, or rearrange my living room in OmniGraffle. But then something funny happens. Instead of underlining the one misspelled word in my blog post, it puts angry red squiggles under the word after it. “Hmm…why would that happen?” Hopefully I’ve saved a copy of my blog post, because now I’m more interested in solving this puzzle. I might add more misspelled words, or rearrange words, to look for a pattern. By the time I’ve tracked down the issue, the blog post is probably illegible.

Fortunately, I’ve got two different backup systems in place, so I can boldly mangle my blog post, delete valuable system files, or run that one version of an app that deleted all the files on my desktop. (Oops!)

Testing can also look a little ridiculous sometimes. Maybe the latest internal build of OmniGraffle works fine with the 7 pieces of furniture I’m rearranging in my living room. But what does it do with 7000 pieces of furniture? And what if each coffee table has a huge jpeg placed inside its texture? And what if the label on every couch is the word ‘couch’ written in 20 different languages? I don’t really expect a user to need OmniGraffle to handle this exact situation, but they’re probably going to try to do (or accidentally do) something similarly complex. What goes wrong first? Is it the mix of left-to-right and right-to-left text? Or the thousands of shapes? And how does it go wrong? It might bonk, display a polite alert, get horribly slow, corrupt your file, or crash. Maybe we can’t keep it from failing, but we might be able to replace that crash with a polite alert and hang onto the contents of your file.

You probably know software issues are called bugs. There’s some disagreement about why they’re called that, but I think we can all agree that, like cockroaches, fleas, and mosquitos, they are really unpleasant and should be removed from our homes.

When I find a bug, I add a new entry to our bug database. I’m pointing out a problem, maybe a mistake one of our engineers made. I try to be polite, so they don’t feel attacked. They keep in mind that we all want our software to have fewer bugs and finding the problems is my part of that goal. I give them as much information as I can, so that hopefully they can see the bug happen for themselves, figure out why, and fix it.

Software is immensely complex. While no software can be proven completely free of bugs1, if we can find and fix the most common and troublesome ones before you ever see them, it’s a good day.

1. If you’d like to know more about why software can’t be fully tested, Cem Kaner J.D., Ph.D. has covered this well in an article targeted at both testers and lawyers.