News

Monday Morning Amusement

For no particular reason, I decided to spend a few minutes checking out the Microsoft Office Solution Accelerator for Recruiting. With the release of Office 2003, Microsoft is planning to publish a whole series of Solution Accelerators: canned applications that make use of Microsoft products to carry out some business process. In this case, the process is that of recruiting new employees, and if you install the whole thing you'll end up using Windows Server 2003, Exchange 2003, SQL Server 2000, InfoPath 2003, SharePoint Service 2.0, ASP.NET and various other bits of .NET 1.1 plumbing.

There are two major pieces here. The Resume Builder application is for employment candidates to submit their resumes in a prescribed format that can easily be stored as XML in a database. The Interview Manager application lets you search for candidates for a particular job, schedule them for multiple interviews, and collect feedback from interviewers in a central location. This reflects the actual Microsoft hiring process, not surprisingly.

Each of these applications comes with documentation covering planning, deployment, and customization. The documentation is quite clear, and it covers the deployment steps in excruciating detail (though do take a look at the readme.htm file, which lists some "gotchas" of the final product). After I'd skimmed the documents, I turned to the source code, just to see how good a job Microsoft did on this stuff. For some components, unfortunately, there isn't full source code available, just the final DLLs. But for other parts of the solution, you can read the source code and see what you're getting into -- which is where my amusement comes from. Here, unedited, are some comments from the source code that gets installed as part of the Solution Accelerator:

// Why the hell do I get System.Decimal here. Also, why can't I cast to int?!

// This stuff could by bound tighter.

// Sucks to have to copy arrays.. Guessing perf would be worse to read over the SqlReader
// and get a count to init the array, then populate..

// $TODO(joemccla) Type this later

// Where does this come from??? How long does this persist.

// BUGBUG: Why can't I index this????

// Refactor these

// Finally? Connection out of scope/close anyway?

OK, so we've all written comments like that. But we haven't all packaged it up with our brand name and put it up for ten million developers to download. The lesson here is that your release process for software should include reviewing all files to make sure that they're really the files you want to release. And every file should go through QA if it's going to go to the ultimate customer. Just a little word to the wise!

About the Author

Mike Gunderloy has been developing software for a quarter-century now, and writing about it for nearly as long. He walked away from a .NET development career in 2006 and has been a happy Rails user ever since. Mike blogs at A Fresh Cup.