Getting to 0 bugs, Performance Tuning the Forums, and TechEd 2003

Getting to 0 bugs…
If any of you read Scott’s blog, you know that we’ve hit ‘code complete’ on the second milestone of ASP.NET v2 development. The current push is to get the program management (PM) team to 0 bugs.

Getting to 0 bugs for the PM team really doesn’t have a lot to do with actual coding, but more to do with ensuring that the implementation of the feature actually follows the specification. I left yesterday at 5:30 PM with 1 bug (yeah!) only to come in this morning with 7 new bugs (boo!). Luckily most are ‘resolved’, i.e. bugs that I’ve opened and the person it was assigned to has decided that it was ‘fixed’.

One of the workitems I’ve focused on is making our exception messages better. We’ve gone through all the exception messages and tried to make the meaning a little more clear and actionable. Here’s a simple example of the exception message that we currently display (ASP.NET 1.1) when attempting to get process metrics about the ASP.NET worker process with ASP.NET running in an IIS 6.0 worker process.

From this:
Process information is available only when the ASP.NET process model is enabled.

To this:
Process metrics are available only when the ASP.NET process model is enabled. When running on versions of IIS 6 or newer in worker process isolation mode, this feature is not supported.

As you can see it’s not a huge change, but when you consider how many exception messages we have in the system….

Performance tuning the forums
I’ve finally had a few more free cycles this morning to focus on the site. If any of you have noticed, we’ve actually re-enabled the online versions of the new starter kits. I also made some changes to the Control Gallery and IBuySpy tabs so that the forum contents displayed on those tabs is always served from cache.

We love statistics on the site, i.e. total posts, total users, total new users in past 24 hours, etc. The larger our database grows the more costly it was to dynamically calculate this data. I’ve created 3 new tables and modified several procedures so that rather than performing dynamic lookups the lookups can be done in a single table. A great example is the way we used to calculate the total number of users online. We used to select from the Users table all users who’s ‘LastActivityDate’ was (current time – 30 minutes). Turns out the more data we got, the slower this was (imagine that!). So we created a new table forums_OnlineUsers table, and whenever a user performs an activity we update both the Users and forums_OnlineUsers table. But, when we need to get the users currently online … we can just select from the forums_OnlineUsers table (sounds trivial, but it makes a big difference in the number of physical reads SQL has to do — especially since we can index on LastActivityDate in the forums_OnlineUsers table).

Tech-Ed 2003
We just finallized the ASP.NET talks for Tech-Ed 2003 (June, in Dallas, TX — back to my hometown, woo hoo!). We asked for 25 talks and got an astonishing 20 accepted. So far I’m signed up for the following 5:

  • Best Practices and Techniques for Improving Application Performance – Performance best practices talk.
  • Designing and Developing the Community Starter Kit – Overview of the new community starter kit.
  • Tips and Tricks – Cool tips and tricks for ASP.NET developers
  • Deploying and Operating the web site – Discussion of what we do to run
  • What’s new in ASP.NET 1.1 – Overview on the new features in ASP.NET 1.1.