Monday Morning Amusement
For no particular reason, I decided to spend a few minutes checking out the
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!
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.