I started a new assignment 4 months ago where I came into a fairly common situation; an existing code-base. I was tasked to make suggestions to improve the design of our application. In that I was able to make suggestions like moving our single application into a single solution file, moving the code into a non-locking source code repository, and offering up some alternative architectural techniques.
We’ve since moved to using more tools such as Subversion, CruiseControl.NET, FxCOP, NUnit, NCover, and TestDriven.NET. One thing that I have really appreciated, as a side effect of having a talented group of knowledgeable and enthusiastic developers using these tools that are new to them, is that measuring and monitoring your code makes everyone step up to the plate to write and submit code that is of higher quality.
The metrics from these tools has shown an increase in test coverage (from 0 to 40%.. if you’re not accustomed to writing unit tests; it takes practice. Getting to 40% in only 4 months is a HUGE improvement!), a decrease in coding standard violations (FxCOP default rule violations decreasing by 95% when measured against code volume from the old code to the more recent code), a significant decrease in time to release to UAT (from anywhere between 1/2 a day or a full day to, now, a few minutes).
We’ve still got a long way to go and many things to work on to improve our processes, but these are the sorts of things that I find really validate the use of these tools and motivate developers to do a better job. It’s also very beneficial to have these metrics to show to management. They may "get" the ideas behind what we are trying to do, but they REALLY "get it" when we have metrics to back the improvements we are making in these measures of software quality.
As an aside; there are a few invaluable books that I should make mention of as they have definitely contributed to the successes we have experienced:
- Patterns of Enterprise Application Architecture – Martin Fowler
- Refactoring – Improving the Design of Existing Code – Martin Fowler
- Refactoring to Patterns – Joshua Kerievsky
As a second aside; being tasked with making such significant changes to process has also been a contributor to my lack of posting of late. I tend to prefer writing technical articles but have been more involved with the "soft" side of software development of late.