Elementary, my dear Watson

25 August 2007

We are constantly striving to improve the quality of our software, be it the controls, the frameworks, or the IDE tools. Obviously we do so by writing test cases and continually running them, and the support team are instrumental in identifying bugs that our customers run across. The issue tends to be that customers use our controls in ways we never thought of; tsk, tsk, them wacky customers, eh?

Sometimes though we even manage to identify and fix bugs after release but before our customers report them. ESP? No, just Watson.

I'm sure you've run into the dialog: you're working away when suddenly, bam, the program you're using crashes and the operating system pops up this dialog telling you that there's been some problem, and would you like to send the diagnostic information about this problem to Microsoft? This dialog is known as Watson, after the sidekick to Sherlock Holmes (and in fact the narrator of the stories).

I wonder, what do you do? Do you automatically click the Don't Send button? When I was at Microsoft, I got into the habit of clicking Send instead. Why? Because the dialog is not sending Microsoft intimate details about your setup as many would lead you to believe, but instead is sending details of the crash that just occurred.

What happens to this data? It's collected and analyzed. Watson was originally developed by the Office team for Microsoft Office and proved invaluable at enabling the team to identify bugs seen out "in the wild" and then to fix them. Watson was so successful at finding intractable and hard-to-find bugs that the subsystem was appropriated by the Windows team and is now part of the operating system.

The thing is Watson does not differentiate between crashes that occur within Windows or Microsoft products; it's a collector of all crashes, including programs that you or I would write. And Microsoft makes this data from all the crashes over all the world available to third parties as well.

A third-party software company, like, say, Developer Express, can register with the Watson team to receive the crash information that pertain to its EXEs and DLLs.

This happened just recently in fact. We released version 2007.2 of DXperience and within a day, we had a seven or eight incidents of the same event. The Watson data we get indicates the DLL inside which the crash occurred (obviously one of ours), the stack trace, and the address at which the crash occurred. It was the matter of a couple of hours for us to set up the debug information, and then work out at which line the crash occurred. Using that and the stack trace information we were able to work out that the crash occurred in a finalizer: we were assuming that an object was non-null when in fact it was null due to finalization. The fix was easy to do and appeared in the next version.

I cannot stress this enough though. Because seven people did, in fact, click Send meant that we were notified of the crash and were able to fix it. Without the Watson dialog and crash data collection, we would not have seen this problem as quickly, and, because it was in a finalizer, it would have been extremely difficult to reproduce. We can also provide some help text as well for the crash, so that someone who clicks Send can also be notified that, for example, there is a release available that will fix the problem.

The Watson data is always worth sending to Microsoft. By doing so, you are ensuring that companies like ours will improve the quality of their software. So please click Send.

Free DevExpress Products - Get Your Copy Today

The following free DevExpress product offers remain available. Should you have any questions about the free offers below, please submit a ticket via the DevExpress Support Center at your convenience. We'll be happy to follow-up.
No Comments

Please login or register to post comments.