Reflections at the end of the year

Happy Thursday! This past week has brought tons of excitement at the dayjob. Add to the usual the fact that I will be going on vacation for almost two weeks shortly before the end of the year and we conclude with a newfound mix of emergencies/problems/situations that do make time go by faster than I had wished.

A release will be finished at the end of the year, deadlines are looming and during the midst of everything I spontaneously formed several pet peeves this week. I am probably not going to repeat them here though. Well, maybe, just maybe I will take advantage of our new Anonymous Blog feature for this purpose.

Anyway. What I had hoped to cover this week, as alluded to in last week's post, will have to wait till next week. Instead, with this being the holiday season and all, I decided I am going to take a moment to reflect on my experiences at the dayjob over the last year and come up with a software development wishlist of things to hope/strive for in 2006.

Let's see ... where to start. How about the usual items for a developer's wishlist? I'd like a private office. Yeah, I know, don't we all?! We had a gentleman (in business casual) evangelize the virtues of wide open office spaces the other day. He told us all about how he set up several teams in open spaces. As far as I know he himself remained in a private office. Anyway, I know that I do my best software development work in a quiet environment. Since other humans tend to make noise just by virtue of being there, the most suitable environment I have found thus far is one that consists of a private office with exactly one inhabitant: Me.

The other possibly all to usual item: I'd like a flat panel screen (or two) and a computer that is configured such that I do not need to be concerned about running out of disk space at inconvenient times (Note: There are no convenient times for this).

There is one book about Software Development practices that is so good, so essential that I recommend it every time, anyone ever asks me for it. I am talking about Steve McConnell's Code Complete. Maybe I will not achieve that a book gets treated like a productivity investment (much like a development tool) and every developer gets their own, personal copy to read and grow with. However, I do think, I might have a pretty good shot at having every new person who joins the team receive a copy. Especially, if they are not familiar with the text or are fresh out of college, they will then hopefully also receive assignment (and time!) to read the book as well.

The code base we are dealing with is fairly large. As far as I know there have been over 40 different software developers working in the code over the years. Every single one of them had a different degree of understanding, development ability and style. This is one of the big reasons for the following three items on my wishlist for the next year:

  • Focus on bugs. Yes, new features are important, because they tend to bring in (or attract new) sales, but I would really like to truly stop all development, until all known bugs are fixed. This includes visual inconsistencies, poor verbiage as well as wrongly implemented behaviors.
  • Refactoring. This needs to happen a whole lot more. Again, the code base is rather large. Portions of it are rather confusing. To eliminate complexity, improve performance and simplify future maintenance and development, refactoring has to be taken way more seriously.
  • Test Driven Development. It is tough to refactor, if it is not easy to verify that the external behavior of a given component is not being affected. Well, it is quite challenging to introduce meaningful unit testing to a mature code base. To make matters more interesting, let's assume that GUI and code are not loosely coupled. Let's further assume that there is a large base of SQL code (hundreds of tables and tens of thousands of lines of stored procedure code). Most really complex operations and calculations are then being performed on the database backend. We know, we need to work on this and we have certainly tried various approaches over this past year. Next year will hopefully bring some good, solid solutions! If you can recommend some really good unit testing and/or refactoring tools for SQL server, I'd be very happy to hear about it. I definitely want to evaluate solutions for this rather sooner than later.

One more: If you haven't already, you should go and check out the excerpts of this interview with Fred Brooks (of Mythical Man Month fame). Adding people to a late project? Don't get me started ...