Geeks With Blogs
Caffeinated Coder A Grande, Triple Shot, Non-Fat Core Dump by Russell Ball
Ayende started a thread in the ALT.NET newsgroup asking participants what practices they deemed absolutely necessary on a project. In other words, if you were to start in a shop that had none of the current "best practices" in place, which ones would you spend your political capital on trying to get into place first.

If I only had enough time, money, and political capital to accomplish seven things, I would choose the following:
  1. Test Driven Development:  This is the one practice that I can't really live without. I can be patient if others decide not to use it (although I will quietly try to win them over), but I would be in a real moral quandary if I wasn't allowed to practice this myself for some reason. It enables me to capture requirements concretely, improve my design by "dog-fooding" my own API, and refactor without fear because I have at least some assurance that I haven't broken anything.
  2. Source Control: I don't really consider VSS a legitimate option, but as long as I don't have to do much branching I can live with it in the short term (as I am doing now). At least VSS allows you to easily identify changes in a file and gives you a fair shot at rolling back individual files. No source control is simply not an option.
  3. Continuous Integration: The more people you have, the more necessary this becomes. The longer the feedback loop, the more pain you incur by fixing integration problems. At minimum, you need to have a controller (i.e. CruiseControl.NET) monitoring your source control system and automatically building your projects and running your unit tests (at least the fast running ones) upon check-in. Longer running tests can be scheduled hourly or nightly. Visibility (i.e. stoplight) is key if you want your team to get the most out of this practice.
  4. One Step Deployment: There is nothing more frustrating than having to take responsibility for deployment related errors that occurred in your application because a manual step was accidentally omitted. You may know that it was the deployment process that sucks, but everyone else will assume it is your code.
  5. Bug/Feature Tracking: The place I work at now uses JIRA, which is probably the best tool I've used so far in this category. If you can't effectively track your work, then you have no chance of getting it done right on a consistent basis.
  6. Developer Productivity Tools (Resharper/CodeRush): I bought my own personal license for Resharper so I wouldn't have be forced to go without. The more keyboard shortcuts I have at my disposal, the faster I code and the better chance I have to get and stay in the zone where I am focused just on solving the problem at hand rather than getting distracted by syntax and unnecessary keystrokes.
  7. Iterative SDLC: I simply refuse to work on another death-march, multi-year waterfall project. Although I think mature agile shops are by far the best working environments, I can be happy in more traditional shops as long as they follow some basic principals in spirit. Releases must be frequent and there has to be some interactive way to capture user requirements. Work should be continually re-prioritized based both on business value and according to a realistic budget based on average team velocity. Most developer overtime I witness seems to be avoidable and a direct result of the break-down in one of these fundamental practices. 
If you only had seven to choose from, is there anything that you would bump off this list in favor of a practice you find more essential?

Posted on Friday, October 19, 2007 11:07 PM Software Development Practices | Back to top

Comments on this post: What are your Seven Essential Practices?

# re: What are your Seven Essential Practices?
Requesting Gravatar...
You hit the top 7 right on the head, but since you asked I would trade a copy of Resharper for unlimited free soda.
Left by Max Pool on Oct 21, 2007 8:32 PM

# re: What are your Seven Essential Practices?
Requesting Gravatar...
I'm putting in a feature request to Jet Brains to add a short-cut keystroke that would automatically dispense a caffeinated beverage from the CD tray. I think that is the only thing stopping them from fully taking over the market share...:-)
Left by Russell Ball on Oct 23, 2007 11:15 PM

# re: What are your Seven Essential Practices?
Requesting Gravatar...
I think you have the top 7, but #8 for me would be regular peer-review. I like the idea of pair programming but in the real world it's not economical in most cases, but the have someone poke around in your code for head-slap mistakes can be a really helpful part of QA.
Left by Neil Barnwell on Oct 24, 2007 4:26 AM

# re: What are your Seven Essential Practices?
Requesting Gravatar...
"The place I work at now uses JIRA"... Glad it's working out!

RE: Mike's comment... you don't need to kill for Crucible, mate, we sell it right on our website! ;)
Left by Jon Silvers on Oct 24, 2007 6:47 PM

# re: What are your Seven Essential Practices?
Requesting Gravatar...
@Barnwell - I agree that peer reviews are helpful, but I would qualify that a little. I think static analysis tools like FxCop or NDepend should be used to automate as much as possible. FxCop is much better at being a code Nazi about naming standards, etc., than a person will ever be. NDepend can be used to identify the riskiest areas of code (cyclomatic complexity, excessive dependencies, long methods, etc), so that you get the biggest bang for your buck in peer reviews rather than trying to do everything or just do random samples.
Left by Russell Ball on Oct 25, 2007 7:53 AM

# re: What are your Seven Essential Practices?
Requesting Gravatar...
Great list. I wish more people thought this way. Unfortunately, 9 out of 10 development projects dont practice any of these (I have been out interviewing, and this is what I've seen).

If anything, I would leave out number 6, and stick in a Wiki for maintaining a knowledge base.
Left by xcdesz on Oct 25, 2007 8:14 AM

# re: What are your Seven Essential Practices?
Requesting Gravatar...
@Mike & @Silvers - I just watched the flash video on Crucible and was mightily impressed. I sent a link to my boss and am going to start bugging him about it purchasing a copy. It will work with .NET source files as long as we have Subversion, right?

@Silvers...If you give Jon a free license, I want one too...on account of copy-cat crimes...:-)
Left by Russell Ball on Oct 25, 2007 10:22 PM

Your comment:
 (will show your gravatar)

Copyright © Russell Ball | Powered by: