About

Welcome to Allan's Ramblings!

Blogging about Technology and more.

Who am I?

Tag cloud

Archives

01 Mar - 31 Mar 2008
01 Apr - 30 Apr 2008
01 May - 31 May 2008
01 Jun - 30 Jun 2008
01 Aug - 31 Aug 2008
01 Sep - 30 Sep 2008
01 Oct - 31 Oct 2008
01 Nov - 30 Nov 2008
01 Feb - 28 Feb 2009
01 Jul - 31 Jul 2009
01 Aug - 31 Aug 2009
01 Oct - 31 Oct 2009

Calendar

« September 2010
S M T W T F S
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

Links

The Active Network
Partners For Haiti
One Mile Clinic PNG

Search!

Last Comments

Allan Nienhuis (Cisco VPN for Win…): The Shrew.net client supp…
Allan Nienhuis (Cisco VPN for Win…): I updated the article wit…
Allan Nienhuis (Cisco VPN for Win…): I tried installing the sh…
allan (Javascript intell…): when MS ships Jquery with…

Stuff

Powered by Pivot - 1.40.5: 'Dreadwind' 
XML: RSS Feed 
XML: Atom Feed 

Kaban Development Oversimplified - putting limits on parts of your development cycle

Wednesday 27 May 2009 at 09:45 am

Jeff Patton has a great blog about Agile product development practices - mostly from the product/design perspective, but he's got some good project management information in there too.  He doesn't post very often, but his posts are real winners.

His latest article
is about Kanban Development - something that has been gaining traction and awareness in the Agile development community for the last year or two.  I won't expound much on it here, as Jeff does a much better job of it than I would - read his post!

 

Kanban development comes from Toyota's famously efficient and high quality product development & manufacturing teams - Kanban means literally visual card (or board), and is about the use of simple visual devices to control the flow of work through any system.

 

A common problem in software development is having too many unfinished work items on a person or team's plate at any one time.  This is usually a symptom of people not completely finishing the items before moving on to the next one, because they've run into some type of roadblock with their current item (need a question answered, waiting for the next build, or whatever).

 

The problem with this is that it increases the amount of context switching people have to - do by orders of magnitude in some cases.    The costs of context switching for people working in highly intellectual jobs like ours is very often grossly underestimated, because we're so used to multi-tasking and often our team culture often promotes it - people with a lot on their plate are looked up to as busy and productive, when they are really just spinning their wheels with lots of activity but little real progress.

 

A related problem is that this increases the 'cycle time' - the average amount of calendar time it takes for items to be completed, which increases the risk that items will become stale.  For example it is much more efficient for a developer to fix bugs on an item that they coded today or yesterday than even a few days later.

 

The use of Kanban concepts can help with these problems by putting simple rules or governors on your software development workflow to simply not allow too many work items in any one stage or spot.  For instance: you could have a rule to not allow more than x units of work in the Implementation (coding) state.  If a business analyst is finished with another requirement/story/use case, they're not allowed to send it to the development queue.  And if the size of work sitting in the design queue is already maxed out, they're not allowed to pick up another story and start working on that.  What should they do then?  Perhaps help the testers test some of the items in their queue.  Perhaps go talk with customers about the latest release, or do some usability/user experience testing.  Anything but drop more work on the developers.  The same would go for developers - if the test queue is 'full', they can't drop more coded features onto the test team.  They should go help the testers with their work items, help set up the performance testing lab, help troubleshoot the latest escalation from support.  They could even take a bit of time for professional development by doing some reading or experimenting.

 

Having people help with addressing the current bottlenecks for the team keeps the work flowing through the system at a more reliable rate, and reduces the amount of context switching going on because there simply won't be so many work items in play at any one time.  It also reduces the cycle time time for items in the system, which means that the work is fresher in people's mind so that things like bugfixing and any rework from feedback are done much more efficiently.

 

The more subtle benefit that this brings to the team is to bring the 'whole team together'.  It's no longer "someone else's problem" if they're overburdened.  It encourages teamwork and collaboration, and puts the focus on 'finished' to the end of the system (ready for production), rather than just finishing my tasks.

 

These rules could be put into place by simple declaration of policy (another email from the manager), or implementing some sort of rules in your task tracking system, but the use of very visual mechanisms like a story board can be very helpful in not only enforcing the rules, but making sense of them for the team - they can 'see' that the test team is overburdened, so the decision to go and help them out becomes a natural decision that doesn't require top-down direction.  Jeff's article above has some good examples of how story boards can be used for this.  For distributed teams, that story board may need to become a dashboard on your team's wiki, or you could experiment with tools like cardmeeting.com.

 

There are a number of variations on this theme that can also be useful - minimum size in certain queues, and maximum sizes for any one person.  Remember when experimenting with things like this to always do a retrospective with your team at the end of the iteration to get feedback and make decisions about improvements.

 

I know this is a pretty light treatment on the subject, but hopefully this has introduced the concept well enough that you're encouraged to do a bit more research on your own and dream about how this might help your team work together more efficiently.

 

Cheers,

 

Allan

Quality & Broken Windows

Tuesday 26 May 2009 at 08:38 am

The authors of the Pragmatic Programmer (great book btw, highly recommended) have a lot of insights into the craft of software development, but in my opinion one of the most powerful ideas is that "living with broken windows" drives quality downward in a depressing spiral of entropy.  Well, they put it a lot more eloquently than that, but the idea is that when you're working in a codebase that's littered with problems, bugs, sloppiness, etc, you and your team are much more likely to do sloppy work.  Your standards are lowered by the sheer weight of the code around you, in spite of your best intentions and even explicit attempts to do high-quality work.  This is a great argument for continued refactoring of existing code, even if that code is more or less functional.  It can affect the quality of new code just by its presence in the same codebase.  It's like a poison, or at least a bad smelling swamp gas...

I won't attempt to elaborate much more on the concept - this article explains it much better than I'm likely to.  Go ahead and use up some of your daily or weekly geek reading time on that article - it's time well spent.

What's your experience like?  Have trouble keeping high standards when working on crappy legacy code that someone-who's-no-longer-working-here-for-a-good-reason wrote?  Wish you could rewrite that whole module or function from scratch but just don't think you have the time?  Can't convince your Dev or Product manager to let you have the time to refactor that painful and buggy sub-system?  Or, have you been able to clean up parts of your codebase with positive results? Was it worth it? Do you think it really makes much of a difference?  Or, can you manage to keep your work up to all the awesome standards that you have in spite of the muck that you're wading around in?

What do YOU think?

P.S. Don't take this as suggesting that all of the legacy code is crap - it's not.  There's a lot of really great code out there, I know.  And you don't need to look only at 'legacy' code to find sloppiness either.  These are big generalizations, but I think they're useful ones that apply to much more than just code.