Archive for November, 2006

Breaking all rules of software release management

November 13, 2006 11:01 pm

The project I’m currently working on is getting really close to being done, with Windows Vista having been “RTM”ed recently. We have a few more days to get last minute bugs ironed out and then it’s “off to the factories”… I can’t say much more about the project right now, but it’s a pretty significant and highly visible piece of software coming out somehwere around February 2007. I hope it does well. But I digress…

At this late a stage in a product’s delivery cycle it is common to make very few changes to the code in order not to create more bugs than one fixes. Ideally each change should be peer-reviewed and thouroughly tested before getting checked in (like with Windows Vista and the contortions people have to go through in the “shiproom” to get a bugfix approved). Too bad for me that I’m the only “peer” on the project (i.e. I’m the only developer). There’s nobody I can go to for a review.

And in the last few weeks I’ve broken the “as few changes as possible” rule a number of times. Why? Because I’m confident in the features that WPF provides. And because I do tend to run extensive tests before I check stuff in.

So what kinds of changes have I put in at the “last minute”? I’ve shuffled buttons around on the page, I’ve added code for drawing the user’s eyes to input fields containing invalid data, I’ve added data-bound and data-driven UI elements.

WPF has given me the confidence to be able to do this at the last minute. The fact that moving buttons around is a simple XAML markup change, for example, is just great for last minute UI adjustments.

But I’m not exactly proud of doing it. Oh well. So far everything seems to have worked out.

Software craftsmanship vs. “HighTech” jobs

10:40 pm

I recently read “Peopleware” by DeMarco and Lister, a book I highly recommend to anyone wanting to understand how to manage people who write software for a living.

They mention several times that most software writers don’t work in “HighTech” jobs. The ones who really do the “HighTech” stuff are the people who write the compilers and development frameworks or come up with other new technologies. I tend to agree.

I’ve long joked to my manager about giving up writing software and asking if he knows anyone who will take me on as a “carpenter’s apprentice”. This happens especially when I get stuck on hard-to-solve problems or when I find more bugs than I care to report in Microsoft’s platforms. And of course when the people who contract for us on software turn in one more drop in which old bugs re-surface.

But I realize more and more how what I do is actually more software “carpentry” than it is “HighTech” work. Seriously. I mean, it takes effort to learn about the latest technologies, such as WPF/Avalon, sure. You have to wrap your mind around how some other people want you to write programs. And you have to do it quickly, so your project can get done on time. But in the end it really comes down to being able to handle a set of tools that someone else makes. Handle them expertly, yes, but they’re someone else’s tools.

So that’s what I’m going to consider myself from now on. A software craftsman. Perhaps even an expert or master craftsman (depending on who I compare myself to or how I’m feeling when I consider it). But just a craftsman.

And I take a certain pride in the work I do. Like all real craftsmen do.

Office 2007 now available on MSDN

November 12, 2006 3:07 pm

For all of you who have access to MSDN online downloads, Office 2007 is now available.

WPF XBAP apps and UAC

November 4, 2006 12:40 pm

Here’s an interesting thing I learned the other day, which wasn’t obvious to me.

If you have an XBAP WPF application that tries to access files at the location identified by CSIDL_COMMON_APPDATA (Environment.SpecialFolders.CommonApplicationData in .Net 2.0/3.0) they need to be marked with Read/Write permissions for “Everyone”. Otherwise File Virtualization kicks in and Vista creates copies of the files in the VirtualStore.

This shouldn’t be a problem per se, but if you have data integrity issues with your application reading/writing files it’s nice to eliminate the virtualization for troubleshooting.

Also, if your application needs to share the same data among users you don’t want virtualization, since that is a per-user thing, and you’d end up with one set of data files for each user.

If you’re installing some default data files for the application using Windows Installer (which will run elevated), you need to make sure you change the permissions on the data files so “Everyone” gets read/write permissions. This can be done using the LockPermissions table of Windows Installer.