Jeremy D. Miller -- The Shade Tree Developer

Sponsors

The Lounge

News

Advertisement

Images in this post missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at imagehelp@codebetter.com
"Code Complete" is a lie, "Done, done, done" is the truth

Before you flame me, I'm not talking about the canonical book by Steve McConnell.  What I mean is that this statement is a lie - "we're code complete on feature xyz."  That phrase is a lie, or at least misleading, because you really aren't complete with the feature.  Code complete doesn't tell you anything definitive about the quality of the code, or most importantly, the readiness of the code for actual deployment.  Code complete just means that the developers have reached a point where they're ready to turn the code over for testing.  You say the phrase "code complete" to mark off a gate on a schedule or claim earned credit for coding work done on a project schedule.  Using "code complete" to claim earned value is a bald-faced lie because it doesn't translate into business value - yet.  It could have lots of bugs and issues yet to be uncovered by the testers.  If the code hasn't gone through user acceptance testing, it might not even be the right functionality.

It's a nearly arbitrary status anyway.  Oftentimes a team will call something code complete just because the date on the schedule says its supposed to be code complete on that date.  Just call it code complete to satisfy the schedule, all software has bugs anyway right?  Code complete is one of many common evils on waterfall projects when team members have somewhat divergent goals.  Developers may be judged by meeting the code complete date, and the testers by the quality of the system - i.e. the lack of bugs.  These conflicting goals can easily have a negative impact on the project.

One of my favorite aspects of XP development has been the emphasis on creating working software instead of obsessing over intermediate progress gates and deliverables.  In direct contrast to "Code Complete," XP teams use the phrase "Done, done, done" to describe a feature as complete.  "Done, done, done" means the feature is 100% ready to deploy to production. 

There's quite a bit of variance from project to project, but the "story wall" statuses within an iteration I learned on my first XP project were:

  1. Not started
  2. Development
  3. Business Analyst Review (The developers called it "BA Volleyball," I think this was a process smell)
  4. Testing
  5. Customer Review
  6. Done, done, done

The other story wall columns besides "done, done, done" are just intermediate stages that help the team coordinate activities and handoffs between team members.  We use a Scrum style burndown chart to track intermediate progress in an iteration, but it's nothing better than an educated guess of status.  The burndown chart informs management on the state of the iteration and helps spot problems and changes in the iteration plan, but the authoritative progress meter is the number stories crossing the line into the "done" column.  The goal of the XP team in any given iteration is to get every story in play into the "done, done, done" column before the end of the iteration.  No credit or progress is earned on an XP project until a user story has been coded, fully tested, and approved by the business customer.  It's a draconian measure for a team, but it's an accurate indication of how much business value an XP team has really delivered.  XP nirvana is being able to consistently push all iteration stories into the "done, done, done" column and produce a potentially deployable release at the end of every iteration.  It's a lofty goal that most XP teams probably don't meet, but that doesn't mean we should stop trying to reach that goal.  Like so many agile teams we struggle with leaky iterations because we aren't fully driving stories to production-ready completion within an iteration, but that's the topic for my next post...

A friend of mine who's still mired in waterfall land challenged me one time on how an XP can know their status without a detailed plan.  My response was that our status was measured by what new features were ready to deploy.  If you think about it, that's a far more useful measurement than saying x number of features are "code complete" with unknown quality attributes. 

A very important attribute of agile methods in general is the entire team sharing a common goal to produce working software.  My experience has been that developer/tester interaction is far smoother in agile projects (certainly not perfect of course), in no small part because the developer's purview moves from getting code into test to getting code to a potentially deployable state.  As an agile developer it's in your best interest to do everything possible to make testing go smoothly - helping with test automation, build automation, unit testing, etc.  Testers are your allies now, not sparring partners.


Posted 04-13-2006 10:38 PM by Jeremy D. Miller

[Advertisement]

Comments

Jeremy D. Miller -- The Shade Tree Developer wrote Finishing Off Each Iteration with a Deployable Product
on 04-17-2006 9:08 PM
In my last post I talked a little bit about the difficulties that my team is facing in driving the user...
Sam Gentile wrote New and Notable 96
on 05-17-2006 11:30 AM
Again another month and change since the last one so this issue will be a collection of everything marked...
Jeremy D. Miller -- The Shade Tree Developer wrote Best of the Shade Tree Developer (with actual links!)
on 08-07-2006 4:51 PM
Between being extremely short handed at work, tech' reviewing a new book, a
possible book proposal...
Jeremy D. Miller -- The Shade Tree Developer wrote Best of the Shade Tree Developer (with actual links!)
on 09-01-2006 2:32 PM

Between being extremely short handed at work, tech' reviewing a new book, a possible book proposal

Jeremy D. Miller -- The Shade Tree Developer wrote My Gameplan for Starting a New Project from Scratch
on 10-02-2006 4:10 PM

I'm starting my new job today and kicking off a new project this week. The organization is relatively

Jeremy D. Miller -- The Shade Tree Developer wrote More Tips for Getting Started with Agile
on 10-09-2006 12:44 PM

Welcome to my stream of conscience series about topics that are popping up on a new team that's largely

Jeremy D. Miller -- The Shade Tree Developer wrote Designing for Testability
on 06-29-2007 8:53 AM

From a question on my Passive View blog post : "should we design for testability, or should we try

Sam Gentile wrote New and Notable 176
on 06-29-2007 1:15 PM

TGIF!! I am super busy right now designing a multi-CPU/multi-threaded Parallel Calculation Engine and

Designing for Testability « Tuff Stuff wrote Designing for Testability « Tuff Stuff
on 07-04-2007 4:39 AM

Pingback from  Designing for Testability « Tuff Stuff

Jeremy D. Miller -- The Shade Tree Developer wrote Resources from my DevTeach talks
on 11-29-2007 12:03 PM

To everybody that attended one of my talks at DevTeach this week. All of the materials are now online

Mark Turansky wrote re: "Code Complete" is a lie, "Done, done, done" is the truth
on 02-22-2008 8:49 AM

I agree, I've also written that <a href="blog.markturansky.com/.../39">Code complete does not mean you're done</a>.

Jeremy D. Miller -- The Shade Tree Developer wrote How does design get done on an Agile Project?
on 07-06-2008 11:46 PM

Last week I gave a talk at Agile Austin entitled “How does design get done on an Agile Project?”&#160;

Community Blogs wrote How does design get done on an Agile Project?
on 07-07-2008 12:35 AM

Last week I gave a talk at Agile Austin entitled “How does design get done on an Agile Project?”&#160;

First Causes in Software Development: How do I decide what is good? | British Columbia Welcome U wrote First Causes in Software Development: How do I decide what is good? | British Columbia Welcome U
on 09-17-2008 2:01 PM

Pingback from  First Causes in Software Development: How do I decide what is good? | British Columbia Welcome U

Sam Gentile's Blog wrote New and Notable 176
on 12-02-2008 8:43 PM

TGIF!! I am super busy right now designing a multi-CPU/multi-threaded Parallel Calculation Engine and diving into the science of Parallel Computing. I'll have some links when I get a chance. Windows Workflow Tomas talks about Silver , the integration

new ThoughtStream("Derick Bailey"); wrote Kanban in Software Development. Part 1: Introducing Kanban Boards and Pipelines
on 12-08-2008 11:45 AM

In the world of Scrum , XP and other forms of Agile software development , many teams use visual control

Add a Comment

(required)  
(optional)
(required)  
Remember Me?