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

How does design get done on an Agile Project?

Last week I gave a talk at Agile Austin entitled “How does design get done on an Agile Project?”  The slide deck can be downloaded here, and, thanks to Chad Myers, you can watch the video feed on Viddler.  (There is content in there after I get done being hamhanded with the A/V stuff).

Major points and questions:

 

What do you mean there isn’t an Architecture Phase?  When does design get done?  All the time.  Continuously.  Design is too important for the success of your project to be restricted to a brief “architecture phase” anyway.  Design is all around us.  Design surrounds us, penetrates us, and binds the system together.  No seriously, design is happening.

 

Can this work?  Yes, it can, if you have good people with solid design skills who can also communicate their ideas and thoughts to others.  People are still the most important factor in a project. 

 

Who does the design?  Every single coder on the project.  Oh, your senior guys are going to make most of the decisions, but every single developer should be participating in the design and be able to explain the design.  Developers do much better with a design if they understand how it came about.  The best way to understand how it came about was to be there at its creation.  At a bare minimum, the worst developer on the project team should at least be a source of feedback for the design.  “This is hard to code this way” or “I don’t understand what I’m supposed to do here” from your junior most developer is still a sign that something might not be right with your design. 

 

Anyway, enjoy Chad’s camera work, and here’s some relevant links.

 

Links:

Is Design Dead? – Martin Fowler in one of the most quoted papers of all time

A Microcosm of Agile Design – but, but, but Web Services are easier than they used to be.  I don’t care if it’s easy to build a web service.  It’s still more mechanical work to build a Web Service than a library that runs in process with the rest of your code.  The automated tests run slower if there’s SOAP in there anywhere, the deployment is a bit more work, and it’s just more friction all the way around. 

First Causes:  Reversibility.  But it’ll be cheaper if we do it now!  We should just build the web service/caching infrastructure/generalization now while we’re in the code!  It’ll be harder later!  We have to get it right upfront, or all hell is going to happen.  All those fears are valid, but we can eliminate the cause for concern by paying attention to the reversibility of our design decisions.

“Code Complete” is a lie!  Done, done, done is the truth

The Last Responsible Moment – Make decisions at the right time.  Sometimes delaying a commitment to a design until you have more information is the best course of action.

Ordering Code Construction Tasks – Work vertically by feature!  Don’t schedule your development in terms of infrastructure or technical layer.  Everything follows from a business goal.



Comments

Chad Myers said:

It was a great talk, Jeremy.  Next time, I'm going to consider nailing your foot to the floor, though :)  or getting a better tripod with a fluid mount

# July 7, 2008 12:26 AM

Jeremy D. Miller said:

;-)  I knocked over a lamp at DevTeach Montreal from pacing back and forth

# July 7, 2008 12:36 AM

Ian Cooper said:

I agree with what you are saying.

On a point of detail however.

How do you feel about domain modeling at the moment.

Crystal, especially on Orange and above, has a domain model as a requirement before coding begins. Of course the requirement is to do just enough to enable the next phase, to provide some insight into the domain that both development and customer can agree on. Eric Evans has made a similar comment around Domain Driven Design that sometimes to understand what the simplest thing is we have to do some up-front modeling of the domain.

We regard this as Rebecca Wirfs-Brock's exploratory design phase from Responsibility Driven Design. We tend to do some whole-team CRC modeling to try and create a shared understanding of the model before we begin coding. We don't delve to attributes and methods. We don't regard this as fixed in stone, but we do model. We drive from user stories, sampling them to understand what the domain should look like to meet these requirements.

Looking at the slides (I'll try to make time for the video later) is this your reference to modeling, but only whilst you are still learning?

# July 7, 2008 4:34 AM

Web Design Services said:

Hi!! I have got some valuable information through your site.Thanks for some wonderful info.

# July 7, 2008 5:56 AM

Jeremy D. Miller said:

@Ian,

Everything you said seems fine to me.  I've found that doing Domain Modeling is a great way to learn about the business domain.  I don't really think that It's that much of a design aid per se, but the learning is invaluable.

As far as the exploratory design phase from RDD, I'd say that my preference is for a little bit of whiteboarding before starting any new type of user story.  I wouldn't call it a phase because it happens at any time.

# July 7, 2008 8:27 AM

Dew Drop - July 7, 2008 | Alvin Ashcraft's Morning Dew said:

Pingback from  Dew Drop - July 7, 2008 | Alvin Ashcraft's Morning Dew

# July 7, 2008 8:46 AM

links for 2008-07-08 | the markfr ditherings said:

Pingback from  links for 2008-07-08 | the markfr ditherings

# July 8, 2008 6:32 AM

Made By Many » Blog Archive » links for 2008-07-08 said:

Pingback from  Made By Many  » Blog Archive   » links for 2008-07-08

# July 8, 2008 6:38 PM

Archive » Made By Many ?? Blog Archive ?? links for 2008-07-08 said:

Pingback from  Archive » Made By Many ?? Blog Archive ?? links for 2008-07-08

# July 9, 2008 7:18 AM

Aligning Agile with Enterprise Architecture — Practically Agile said:

Pingback from  Aligning Agile with Enterprise Architecture — Practically Agile

# July 9, 2008 11:26 AM

Archive » Archive ?? Made By Many ?? Blog Archive ?? links for 2008-07-08 said:

Pingback from  Archive » Archive ?? Made By Many ?? Blog Archive ?? links for 2008-07-08

# July 9, 2008 4:22 PM

SteveJ said:

First time I've gotten to see you speak.  Pretty good, I enjoyed it.  I'm working on internalizing the Last Responsible Moment right now.  Currently I've got 12 or so decisions that need to be made but haven't yet.  I feel like I ping pong around on them, Can't do A yet so work on B, can't do B, so work on C, can't do C, so work on A, oh wait, not ready for that either.  Crap.  Somehow I work all day, but I'm certainly not getting to done, done, done :)

# July 11, 2008 9:40 AM

The Question Guy said:

Another question for your list:

How do you maintain and document your design?

# July 21, 2008 5:11 PM

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

Proudly Partnered With


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