How to Get Started with Kanban, and Why

Monday February 7 I talked about Kanban at Trondheim XP & Agile Meetup.

I think it went well, even if I made a few presenter mistakes, based on feedback and the great questions and discussions.

Here’s the presentation with a few adjustments, like a few additional links for further reading.

Kanban at Trondheim XP & Agile Meetup, Feb. 7

On Monday, February 7, I’m talking about Kanban at Trondheim XP & Agile Meetup.

It’s something I’m passionate about, so I’m excited.
Topics include:
  • “Kanban 101”, or how to get started with simple Kanban
  • Agile Basics, or why Kanban works
  • “Kanban 201”, or what’s next
After the meetup I’ll make slides available here.
More information about the meetup (in Norwegian):

Lightning Talk at Smidig 2010 on Agile Basics

Last fall I had a lightning talk at the Norwegian conference Smidig 2010.
I talked about an important topic: what really works and why, in other words, Agile Basics.It went ok, I guess, at least considering it was my first time speaking at a conference.  Next time I’ll try to improve a couple of things:1. I’ll be less nervous… I managed to present what I had prepared calmly and clearly, but my nervousness prevented my passion for the topic from coming through.

2. I’ll follow through on subtopics.  F.ex. on visualization, I ended up mentioning the banal fact that a task board is an example of visualization, when I really wanted to say something about a team and it’s context. F.ex. how a task board that’s visible for everyone promotes a shared mental model between people both in the team and among the stakeholders, and therefore enables much more effective thinking and communication when developing software.

 

Agile Basics: Visualize More

If you visualize more you get more agile.

Tom Wujec had an excellent TED talk on 3 ways the brain creates meaning.

  • Use images to clarify ideas
    Visual shapes, physical space, colors, motion help us create mental model, more understanding
  • The act of engaging, being interactive enriches mental model
  • Augment memory by creating persistent, evolving views

Let’s say you have a task board for a software development team, either a physical one or a digital one shown on a screen as a dashboard. Let’s say it’s visible in an office so that everyone on and outside the team sees it several times a day.

  • People in and around the team gain a shared mental model, a shared understanding.
  • People interact with the board as things change, including upstream and downstream stakeholders. A visible task board creates more engaged stakeholders.
  • A task board is persistent and evolving, and becomes a new visual, domain-specific language of sorts, where the domain is the reality of the development team.
    This language is a more abstract, high-level language, and enables much more effective thinking, communication, and collaboration.

A software development team communicate and collaborate better the more they visualize the work.

How can you visualize more to gain advantages like that?  Here’s a few examples:
  • Let workflow on task board be closer to reality
  • Show different types of work differently
  • Let a status screen display a virtual task board permanently
  • Are you working in a traditional waterfall project? Regularly print the latest version of the project plan (and progress) and put it on the wall.
  • Show more policies like DoDs, increase transparency
  • Are you doing CI or continuous builds? Create alerts or alarms for failures, include status on status screens.
  • Show problems and impediments clearly
  • Do you share status on sales, bugs, product upgrades, project progress, project backlog etc in monthly or weekly meetings? Make status visible for everyone at anytime via screen or paper.

Being Agile

Agility is about balance and speed, and being able to change and adapt to change. 

It’s not a binary state, something you are or not, but a question of degree.  You, or your team or company, are more or less agile.

agile leopard http://www.flickr.com/photos/42429527@N03/5063150948/

From the dictionary:

  • ability to move with quick easy grace
  • having an adaptable character
  • synonyms: light-footed, nimble
  • related words: flexible, limber, dexterous
  • near antonyms: inflexible, stiff

In my opinion, being agile is not the same as using a specific method, tool, or process, or following a specific philosophy.

Agile does not equal Scrum, even if Scrum is an agile process.

Agile software development is not defined by the agile manifesto, even if I agree with most of it.

Getting more agile “simply” means to increase your ability to adapt – getting real feedback more often, and improving your ability to change and adjust.

Enterprise agility is the ability to respond quickly to unfolding events or opportunities, according to David Anderson.  Getting more agile in the enterprise involves, among other things, increasing trust and minimizing resistance to change (i.e., improvements).

(This blogpost is subject to updates…)

JavaScript Unit Testing with Hudson and JasmineBDD

Ingredients:

  • JasmineBDD, a JavaScript BDD/ TDD framework
  • The JUnitXmlReporter from Jasmine Reporters
  • Envjs (embedded with the Jasmine Reporters download)
  • Hudson Jenkins (continuous integration server) on a Linux slave

Recipe:

  • let Hudson execute a (Java) shell command
  • let Java run Envjs
  • let Envjs run a simple JavaScript which loads an HTML file (your JasmineBDD test runner)

Voila!

The Java command:
java -cp lib/envjs/js.jar:lib/envjs/jline.jar org.mozilla.javascript.tools.shell.Main -opt -1 -f lib/envjs/envjs.bootstrap.js -f test.js
(The libs and the bootstrap file came with Envjs in the Jasmine Reporters download.)

The test.js content:
window.location = 'SpecRunner.html';
(I.e., opening the JasmineBDD spec runner.)

Simple Unit Testing Only

So far, this only works for simple unit testing for me.  F.ex., it won’t play nice with prototype (which is really integration testing, but still).

It’s probably got something to do with Envjs’ limitations compared to a full web browser.

But hey, headless automatic JavaScript unit testing ain’t bad 🙂

Update:
@ingesol got Hudson to run Jasmine using JsTestDriver and Jasmine JsTestDriver Adapter.  (See guide to Hudson and JSTD.)

It’s not headless – requires running JSTD server and browsers, but it will handle prototype et al.

Update 2:

Headless testing as described above is not only for simple unit testing – jQuery works fine, too.  There’s advantages to running a JsTestDriver server, especially catching browser quirks, but for much of the BDD/ TDD effect (testable code, design, executable requirements, etc) you can run headless testing continuously in Hudson without any “external help”…
 

Want to Try the Pomodoro Technique with Online Tools?

The Pomodoro Technique is a timeboxing method where you can use a timer to help you focus on only one thing for a short period of time, typically 25 minutes.

http://commons.wikimedia.org/wiki/File:Il_pomodoro.jpgYou can also do this onscreen and online.  A simple, interesting experiment is the Tomato Timer.  

For me, pomodoro works better if I keep my goal visible, too.  You could do this by using the following web-based tools:

Simple recipe:

  1. Open NowDoThis in a tab in Chrome
  2. Open Online Stopwatch or Tomato Timer in a new tab
  3. click the Frame two pages extension button
  4. set the next to-do item to focus on
  5. set the timer
  6. go!

Kanban is Agile Jazz

XP2010 had a banquet including a jazz keynote by a couple of seasoned, Norwegian jazz musicians, Jon Pål Inderberg (sax, vocals, body percussion) and Bjørn Alterhaug (double bass). They performed for us, and talked about improvisation and things like structure, freedom, trust, etc. It was food for thought and a great experience.
I’ve seen other metaphors for software development, such as gardening, cleaning a kitchen, making a film, technical debt, construction, and martial arts. Last week I was inspired by the jazz keynote and by @agilemanager to think about musical performance as a metaphor.

XP2010 had a banquet including a jazz keynote by a couple of seasoned, Norwegian jazz musicians, Jon Pål Inderberg (sax, vocals, body percussion) and Bjørn Alterhaug (double bass). They performed for us, and talked about improvisation and things like structure, freedom, trust, etc.  It was food for thought and a great experience.

I’ve seen other metaphors for software development, such as gardening, cleaning a kitchen, making a film, technical debt, construction, and martial arts.  Last week I was inspired by the jazz keynote and by @agilemanager to think about musical performance as a metaphor.

twitter-challenge.pngPlan, Flexibility

What to play in a concert is decided in advance – for a classical concert well in advance, and in detail.  A jazz band, however, often finalizes the playlist just before the concert, even modifying the playlist as the concert goes on.

The plan for the performance of a single jazz tune is often subject to variation and “planned uncertainty”. For example, the band knows where an improvisation part starts, and knows on what cue to move to the next part, but they don’t know in advance what happens in between or how long the part is going to be.

twitter-agile-audience-s.pngThe adaptive nature of a jazz concert or a song enables an agile response to change. There is focus on flow towards delivering value to the customer (and each other), instead of doing a certain amount of ordered work. Circumstances can be taken into account, like the mood of the audience, interruptions, etc.

Errors, Learning

Mistakes will be made.
twitter-google-fail-fast-s.png
If you trust your fellow musicians and the structure permits it, you might even take greater risks, either gaining greater value or learning valuable lessons from failures.

From the jazz keynote: Embracing Errors as a Source of Learning

A successful jazz concert produces an amount of music that’s never been played before, while a successfull classical concert should vary only in subtle interpretation details. F.ex., it was unusual for Miles Davis to practice with his band; he wanted to hear something new in each concert, and said to them that they were being paid to rehearse on stage.

Whatever type of music, a good musician spends time learning her craft, both practicing by themself and doing music with others.

Collaboration, WIP Limits

Have you noticed that during a drum improvisation the rest of the band dials back, sometimes all the way back?  Some instruments playing less makes more room for others, there’s imitation and learning from each other, and there’s collaboration and conversation going on.

Sometimes a composer (of any kind of music) or a jazz performer impose restrictions in order to foster creativity.   Those limits can be rhythmical, tonal, or on any degree of freedom. (Cue “One Note Samba“…)  Such limits increase throughput of ideas, and give more room for important information that the composer or musician might want to accentuate.
twitter-kanban-jazz-time.png
Instead of everybody doing “their own thing”, a jazz musician can be quiet, listen, and then contribute to what the others are doing.  Slack, i.e., doing nothing and listening, makes room for others and opens you up for creativity.  You can be ready and agile, and then contribute where the song is going.

Kanban is Agile Jazz

Don’t get me wrong: I love lots of classical music, and I think there’s room for various agile tools in a software development toolbox.

However, jazz is one of the most adaptive styles – and kanban is one of the most adaptive tools, with focus on flow, WIP limits, starting with the existing process and continuously improving step by step.

Thumbnail image for twitter-scott-unique.png
twitter-aslak-improvise.png

twitter-answer.png

Quality First Drives Behavior

If quality is first, it drives a certain set of behaviors.  If market
share is the goal, it drives a different set of behaviours…

Even as Toyota was catching up to No.1, their reputation was slipping…

(Emphasis mine)

The parable of Toyota may be that the tortoise became the hare.  Over decades, Toyota built its reputation and market share in tiny increments through its renowned “continuous improvement” method. In the Toyota mantra, quality was always first, because it led to lower costs, which would eventually lead to higher market share. Eventually.

But in the ’90s, Toyota set out to become the world’s top auto company. Being the best and being the biggest created a tension
that Toyota couldn’t resolve, says MIT operations expert Steven Spear:
“If quality is first, it drives a certain set of behaviors. If market
share is the goal, it drives a different set of behaviors.” 
….
the “Toyota way” … was diluted by the demands of production. “Even in
the late ’90s, people in Toyota would say, ‘This is going to bite us in
the ass,’ ” says Spear. “They just didn’t know when.”

Now they do. …. Toyota will fix its manufacturing problem. Restoring its reputation is going to take a lot longer.

Toyota’s Flawed Focus on Quantity Over Quality – TIME

Lean: Development is not Manufacturing

The conclusions of lean manufacturing theories are not necessarily valid in the domain of (software) product development.

There’s good reasons why it’s so difficult to fix time, budget, and feature scope all at once in a software development project.

I’ve been listening to a talk by Don Reinertsen, and one of his points, although not the main point, is about variability:  if you could reduce variability in the workflow by 10%, or you could reduce capacity utilization by 10%, by far you would prefer to reduce capacity utilization.  That’s where the economic payoff is.

The reason is that increased capacity utilization increases queue size and lead time exponentially.  In other words, if you try to keep all your resources busy all the time, everything takes forever to finish.  This goes for both manufacturing and development.  Variability in workflow, however, is bad in manufacturing, but can’t be avoided in product development, and might even be exploited.

So what else is different about development compared to manufacturing?

Manufacturing Development
Tasks are…. repetitive non-repetitive
Tasks are… predictable unpredictable
Requirements are… a constraint a degree of freedom
Requirements are… fixed evolving
Cost of delay is… homogeneous non-homogeneous
Task durations are… homogeneous non-homogeneous
Variability is… always waste not always waste
Inventory is… physical objects information
Inventory is… visible invisible

Source:
A talk by Don Reinertsen,
Second Generation Lean Product Development: From Cargo Cult to Science