Sep 13, 2011

A Simple and Effective Agile Process



    Whenever I hear other software leads complain about their waterfall-ish development process, I always ask why haven’t they tried something more agile.  The most common answer I’ve heard back is that they don’t know where to begin.  Entire books are written on the subject of agile development, and it’s a pretty big sell to project management that you want drop everything and try something that seemingly requires chapters to describe.  That type of change tends to make project management cringe.

    The truth is books are written about agile development because people want to make money selling books about agile development.  Agile development is phenomenally simple and you make modifications as you go until it’s perfect for your team.  I work in defense where you aren’t supposed to write a line of code until you’ve eliminated the woodland homes of dozens of species through deforestation for all the paperwork you are supposed to generate.  Over the course of several releases my teams now follow a very effective agile process that is tailored to fit our “defense” environment.  This article describes what we do, and how we migrated to it.

The Process

Change 1: Adopting iterative development

    The most fundamental aspect of agile development is continuous integration and testing.  Agile processes strive to deliver code early and often, allowing end users and stake holders to play with incomplete work and make recommendations and course corrections.  It’s a pretty good idea if you want to deliver what the customer actually wants instead of delivering what they think they thought they wanted when they were asked about it sometime last year.

    For us this was a big leap starting from a process that requires everything to be spelled out first, e.g systems engineers write requirements which are then refined to software requirements which are finally handed off to the development team (to put on a shelf and ignore) so that the team can finally start coding.  The transition was made possible by getting the teams to believe that “good enough” is better than “good”.  What I mean by that is the systems teams had permission to give software very rough systems artifacts early, and software is able to take those rough artifacts and begin prototyping implementations (which in turn found flaws, and lead to new & better systems artifacts).  Teams didn’t need “perfect” artifacts to start from.  They just needed a rough starting point and lots of small course corrections.

    We began by converting a large waterfall release to a few 8 week iterations.  These mini-waterfalls helped with some issues, and we begin shortening the iterations over several product releases until we found what worked best for us.  My teams now operate in 2 week iterations.  Every two weeks we deliver what we have and re-plan the next two weeks.   During the early iterations, software and systems teams are working together creating requirements, prototypes and designs – each acting as input to the other.  As we iterate, each team is refining their artifacts and getting feedback from end users and stakeholders.  In later iterations prototypes become production code with bugs found and resolved every two weeks inline with development.  Overall the benefits have been fantastic:

  • Systems engineers end up defining the *right* system (this is important in defense).
  • Software development can start earlier, and actually contributes to the system artifacts.
  • Testers see features evolve over time, which gives them expertise and confidence to “play” with the system and find bugs they wouldn’t find otherwise by simply testing requirements.
  • Integration is always a pain, but integrating 2 weeks worth of code is manageable.  Plus integrating often allows you to learn what is painful, and fix it so it doesn’t occur in the next iteration.
  • Finding and fixing bugs that were introduced within the last 2 weeks is much easier than trying to fix bugs that exist in code you haven’t touched for months.
  • Integrating often builds a tight relationship with your test team.  Developers and testers end up working together, rather than acting like adversaries.
  • We can adapt and make course correction early when things appear to be headed in the wrong direction.


Change 2: Keep tasks small

    The main selling point to iterations is it allows for more frequent course corrections, and the ability to catch problems before they get too big.  The same concept can be applied at the individual level.  For example, if iterations are 8 weeks long, and a developer is working on an 8 week task, that developer could be headed in the wrong direction for a full 8 weeks.  8 weeks in the wrong direction is not something that is easily overcome without lots of overtime and help from many other people.

    Having experienced this type of problem many times, we adopted a “No task can be larger than 40 hours” rule.  That means developers must plan their work to a granularity smaller than 40 hours.  It was a very simple process change to implement and the benefits have been great:

  • 40 hours worth of work can get a pretty high quality code review that can event find deadlocks and race conditions.  Code reviewing 8 weeks worth of work, on the other hand, will only find spelling mistakes in comments.
  • 40 hours worth of work can be understood by management, peers, code reviewers, and testers.  For example the 32 hour long task of “Make the map display comparable rental properties visually on the map” is much easier to discuss/review/test than the 400 hour “Map Feature”.
  • 40 hours in the wrong direction can usually be overcome very easily. 


Change 3: The buddy system isn’t quite pair programming

    Pair programming is a novel concept defined in “Extreme Programming” that pairs two programmers together for everything.  The thought is two developers on one keyboard is much more likely to develop things correctly the first time, saving time on the backend of the development life cycle.  I’ve never actually seen it used outside of academia, and I’ve never known a developer who’d willingly volunteer to be joined at the hip with a co-worker 8 hours a day, 5 days a week, but the concept is still neat.

    We’ve softened the concept a little bit, and managed to keep many of the benefits.  My teams have the notion of a “buddy system” (just like in kindergarten field trips).  Each developer has a partner they work with on a daily basis.  Before a developer starts on a task (Note: in our process no planned task is allowed to be larger than 40 hours worth of work) they must meet with their buddy and explain the problem and their approach to the task.  It takes 5 minutes, and I’ve seen it save many hours. 

    The buddy system also applies at the architecture and design levels as well.  During the design phase, feature designers will meet with their “buddy” at least every other day to outline their design and changes.  With this process change we’ve been able design things right the first time, even if the final big design review is less than productive.

The benefits include:

  • Your “buddy” will be in a much better position to do a quality code review because they will understand the what and the why of the work.
  • Talking through a solution before attempting it often uncovers many pitfalls and can prevent wrong turns.  I can’t count the number of times a pre-task 5 minute discussion has resulted in “Whoa, that is the wrong approach.”
  • You are training your replacement should you win the lottery and retire.  TRUE STORY:  Due to other projects ramping up and down last year I had a turn over of 9 people on a 13 person team in 1 year.  Having a backup who could pick up the pieces relatively easily for different features was a life saver.


Where we are headed

    A software process will continue to evolve as your team learns more about what works best.  Ours is migrating fairly well from a stove piped waterfall to a tightly integrated agile team.

  • We are starting to migrate away from requirements being “early” artifacts.  High level concepts, use cases, user stories, and system threads are taking center stage.  Requirements will remain a necessary evil as a government contractor, but they are a terrible starting place.
  • Frequent iterations have made development and test behave like a single cohesive unit, but we still have a ways to go to bring systems into the fold.


Summary (and what I didn’t cover)

    This article was just a short summary of the simple agile process my teams follow, and a little insight on how we migrated from a painful waterfall process.  Running an agile team doesn’t require the mastery of several books, or a special robe with a “SCRUM Master” label on the back.  Reading books, and taking training will give you new ideas to try, but really all you need is the willingness to try small changes and make adjustments.  Agile simply means having the ability to make changes when something isn’t working.

    I didn’t cover things like agile planning, backlogs, taskboards, etc. in this article because it would complicate what I was trying to keep simple.  But I will be putting together an agile planning and tracking article in a future post.  Until then, feel free to post comments or send me questions over email.

Regards, Jeff. 


Hua Cai said...

mulberry handbags
tory burch outlet online
tiffany jewelry
swarovski crystal
mulberry outlet
true religion uk
tiffany and co jewelry
prada outlet online
burberry outlet store
adidas trainers
nike air max
longchamp handbags
beats by dr dre
kobe shoes
nike air max 90
ferragamo outlet
true religion jeans
oakley sunglasses
ray ban sunglasses
camisetas futbol baratas
basketball shoes,basketball sneakers,lebron james shoes,sports shoes,kobe bryant shoes,kobe sneakers,nike basketball shoes,running shoes,mens sport shoes,nike shoes
timberland boots
michael kors handbags
mulberry handbags sale
tiffany jewelry
true religion sale
michael kors online outlet
christian louboutin outlet
true religion outlet
true religion jeans outlet
true religion jeans
air jordan shoes
christian louboutin online
jordan pas cher
michael kors uk outlet

xumeiqing said...

sac longchamp pliage
coach factory outlet
coach outlet
coach factory outlet
adidas nmd runner
converse shoes
burberry outlet
fitflops sale clearance
nike roshe run women
gucci handbags
burberry outlet
ray ban outlet
cheap oakley sunglasses
ray ban sunglasses
louis vuitton outlet
burberry outlet
asics outlet
yeezy boost 350
reebok uk
ray bans
hermes belt
kate spade outlet
canada goose
holliste sale
cartier watches
yeezy boost 350 black
michael kors outlet
nike trainers
chaussure louboutin
kate spade outlet
christian louboutin shoes
louis vuitton factory outlet
nike free flyknit 4.0
bottega veneta handbags
running shoes
reebok pump said...

discount jordans
air jordans
coach factory outlet
retro 11
louboutin shoes
ray ban sunglasses
kobe 8
rolex watches
giuseppe zanotti
oakley sunglasses
adidas running shoes
tiffany jewelry
adidas superstar trainers
gucci handbags
louis vuitton purses
lebron 12
louis vuitton outlet
burberry handbags
air jordan femme
timberland outlet
michael kors outlet online
michael kors outlet
nike store
coach outlet online
ray ban sunglasses
fit flops
coach factory outlet online
louis vuitton handbags
supra for sale
coach outlet online

dong dong23 said...

christian louboutin shoes
michael kors outlet
chicago bulls jerseys
hermes outlet
ray ban sunglasses
adidas superstar
longchamp outlet
coach factory outlet
fitflops sale clearance
cheap jordans

raybanoutlet001 said...

cheap nhl jerseys
nhl jerseys
cheap nike shoes
michael kors handbags
cheap oakley sunglasses
tiffany and co outlet
adidas nmd
ray ban sunglasses
michael kors
ferragamo shoes

raybanoutlet001 said...

reebok outlet
michael kors handbags wholesale
miami heat
san diego chargers jerseys
indianapolis colts jerseys
armani exchange
ralph lauren
michael kors outlet
polo ralph lauren outlet

dada24 Xu said...

louis vuitton pas cher
hermes bags
pandora charms sale clearance
cheap jordans for sale
longchamp handbags
moncler outlet online
canada goose
adidas nmd r1
kd shoes

dong dong23 said...

basketball shoes
michael kors outlet online
louis vuitton outlet
adidas yeezy 350
tods shoes
washington wizards jerseys
ugg outlet
canada goose clothing
toms shoes
michael kors outlet online

Meiqing Xu said...

moncler outlet
michael kors outlet
beats by dr dre
coach factory outlet
adidas shoes
longchamp outlet
gucci purses
omega replica watches
beats earbuds
the north face

LCc 03 said...

kobe 11
lacoste online shop
links of london outlet store
cheap jordans
yeezy boost
lacoste polo shirts
michael kors handbags
falcons jersey
kobe bryant shoes
kobe 9

John said...

longchamp handbags
gucci borse
red bottom
adidas yeezy boost
yeezy boost 350 v2
cheap nike sneakers
oakley vault
ralph lauren sale clearance uk

adidas nmd said...

ugg boots
browns jerseys
michael kors outlet
mont blanc outlet
michael kors purses
nike outlet
nike outlet
coach outlet
cheap ugg boots
new york knicks jersey

aaa kitty20101122 said...

cheap jordans
michael jordan shoes
true religion outlet
adidas ultra boost uncaged
michael kors
longchamp bags
michael kors handbags
harden shoes
adidas stan smith

ninest123 said...

canada goose outlet
coach outlet
yeezy boost
pandora charms
hermens bags
coach outlet store online clearances
oakley sunglasses
adidas yeezy
pandora charms sale
fred perry polo

Pansys Silvaz said...

ugg outlet
michael kors outlet
bulls jerseys
polo outlet
ralph lauren polo
kate spade outlet
michael kors outlet
g-star jeans
fingerlings monkey