CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Jeremy D. Miller -- The Shade Tree Developer

Under the hood and working with .Net, TDD, Software Design, and Agile Stuff

A Rant about the Software Lifecycle

I'm not going to waste your time on another iterative versus waterfall argument.  What I would like to say is that if you're going to go iterative, everyone -- developers, testers, business analysts, project managers -- needs to be working iteratively.  Some of the advantages to an iterative process are due to attaining a synergy between the software disciplines.  Ideally, the testers and analysts are working on the exact same set of features as the developers.  I find it much easier to establish that ubitiquous language concept the Domain Driven Development folks talk about between developers, analysts, and testers if we're all working on the same thing.  It's easier for each group to ask questions of the other groups because the subject is fresh on everybody's mind.

For a variety of reasons our tester is testing some features that we coded about two months ago.  I built an exhaustive (for a developer testing his own code) suite of Fitnesse tests for all of the functionality, but without much input or involvement from the tester.  Flash forward two months.  We still can't technically claim the work as "done, done, done" because the tester is just now looking at it.  Much worse to me is the fact that the tester isn't familiar with the Fitnesse fixtures or the system.  He has not found a single bug in the backend pieces, but he's getting slowed down by the time it's taking to learn about the way the Fitnesse infrastructure is working.  I'm struggling to answer some of his questions because of the length of time since I worked on these features.  If we'd been able to do this together, we would have been on the same page and eliminated some inefficiency between us.  I would have built the Fitnesse fixtures to *his* specification, cutting down the amount of time it's taking him to test the code.

Working a sustainable pace is usually cast as not working lots of overtime, and that's certainly a big deal.  What's not discussed as often is the fact that the minimal overtime is purchased at a price of no down time.  The development team and the testers have to be fed with detailed requirements for each iteration -- starting almost immediately with iteration #1.  When you're working iteratively you start coding and testing earlier.  Whoever is responsible for eliciting the requirements needs to be communicating with the developers and testers all the time to make sure that the next set of detailed requirements are ready for each iteration.

I've tried in the past, and seen many other teams, to do design and coding iteratively while the rest of the team works in a serial waterfall style.  It's not pretty and you lose a lot of the advantages of just-in-time requirements, continuous testing, and adaptive planning.  You're just not coordinated with the rest of the team and vice versa.

While I'm ranting away, let me try to knock down a pair of common misconceptions about software lifecycles that bug me:
  1. Spiral (or Iterative only) and Iterative & Incremental development are two very distinct lifecycles.  An iterative process means that you take a subset of the whole and work that subset to production quality code that could be deployed before starting the next subset.  A spiral process is developing the whole system in a series of prototypes with increasing quality until the whole is ready to ship.  There are people who argue which is more effective, but they are distinctly different (my opinion is that Spiral is a bad idea because people just rush the early prototypes into production).  Here's a pro-prototyping, anti-Emergent Design link (points for the photo of the 360 bridge in Austin on the page).  I disagree with basically everything ever written on Software Reality, but in the interest of balanced coverage...
  2. Agile versus Waterfall is a false dichotomy.  Every Agile process is *an* iterative & incremental process, but not every iterative process is Agile.  A big portion of the folks I see actually try to defend waterfall development are really just trying to take an anti-Agile stand because they're irritated at the hype.  RUP is supposed to be iterative.  ICONIX is iterative.  MSF is supposedly iterative.  None are Agile processes.  You *can* work iteratively in a formal process.
Lastly, an iterative cycle doesn't mean that you build a different application layer per iteration.  That's BDUF all the way.  If you're working iteratively you should be building completely functional features, so you're going to have to work vertically, not horizontally.  Building a layer at a time is a great way to fail dramatically or work inefficiently by creating speculative code.

Published Aug 21 2006, 02:20 PM by Jeremy D. Miller
Filed under:

Comments

shebert said:

I posted on the process of tying all groups together (specs, dev, qa, etc) a few months back: http://codebetter.com/blogs/steve.hebert/archive/2006/04/30/143755.aspx

The amount of time spent on getting the teams in-sync is very well spent.
# August 22, 2006 10:53 AM

Jeremy D. Miller -- The Shade Tree Developer said:

I'm writing some short papers on development practices as part of preparing for DevTeach . One paper

# April 8, 2007 9:55 PM

Jeremy D. Miller -- The Shade Tree Developer said:

About a year ago I hit a patch where I wasn't able to blog much (something about finding a new job

# October 18, 2007 9:20 AM

Leave a Comment

(required)  
(optional)
(required)  

Enter the numbers above:
Add

About Jeremy D. Miller

Jeremy began his IT career writing "Shadow IT" applications to automate his engineering documentation, then wandered into software development because it looked like more fun. Jeremy previously worked as a systems architect building mission critical supply chain software for a Fortune 100 company and learned agile development practices as a .Net consultant at ThoughtWorks, one of the pioneers of agile development. Jeremy is the author of the open source StructureMap (http://structuremap.sourceforge.net) tool for Dependency Injection with .Net and the forthcoming StoryTeller (http://storyteller.tigris.org) tool for supercharged FIT testing in .Net. Jeremy's thoughts on just about everything software related can be found on his weblog "The Shade Tree Developer" at http://codebetter.com/blogs/jeremy.miller, part of the popular CodeBetter site. Jeremy is a Microsoft MVP for C#. Check out Devlicio.us!

Our Sponsors

This Blog

Syndication

News

All opinions expressed here constitute my (Jeremy D. Miller's) personal opinion, and do not necessarily represent the opinion of any other organization or person, including (but not limited to) my fellow employees, my employer, its clients or their agents.

About Me

"Best Of" Compendium

StructureMap (Dependency Injection for .Net)

StoryTeller (Supercharged Fit)

Build your own Cab

TestDriven

MVP