Abstract != Vague

(I’ve re-published this here. Originally published on my old personal blog).
I’ve got a bone to pick, so I’ll do it here. This is a problem of mine that I have with both developers(architects) and with analysts(customers).
Context: This rant applies to models/designs/architectures of a problem or solution domain. It doesn’t apply to the actual coding of a solution (much).

First, some definitions:

  • Abstract: something that concentrates in itself the essential qualities of anything more extensive or more general, or of several things; essence.
  • Concrete: pertaining to or concerned with realities or actual instances rather than abstractions
  • Precise: definite or exact in statement
  • Vague: not clearly or explicitly stated or expressed
Here’s the picture:
What does this mean?
Analysts tend towards Abstract-Vague. “Let’s not get bogged down with details right now.”
Developers tend towards Concrete-Precise. ”I need all of the table properties fields.”
Fortunately, almost no one tends to Vague-Concrete. Phew.
Un-fortunately, few move towards the most valuable region: Abstract-Precision. That’s the most valuable because it offers the least noise (Concrete details) and the most information (Precision).
Here’s an example. Squares are types, circles are interactions.
Notice that “Money” isn’t concretely defined here. It could be a BigDecimal, double, or Smalltalk Number. Also, that Post Condition is much more precise than a lot requirements documents usually specify.
Ah, I feel better.
Here’s my rule of thumb for achieving more precision:

Add elements to your model only in order to exactly say what your audience thinks is really important.

In the example above the balance, amount, and cash properties are only present because a Withdraw requires them to precisely describe what needs to be done.

Agile Airplane Game

This is the multi-team airplane game that we use to introduce Agile through games.

This game especially highlights how teams work together (or don’t as the case may be :)
Some of the interesting results I’ve seen is that this exercise acts like a mirror showing teams how they respond under pressure. The way the teams coordinate in this exercise seems to reflect their actual working style.

Also, it is great fun when I rip the first plane (for not passing acceptance criteria). The collective gasp is always entertaining. I’ve also had people actually ask “You mean they have to fly?!”. Students usually focus too deeply on the mechanics of what’s in front of them that these other big picture concerns completely escape them… until the first acceptance test that is.

The downloads are below for intro slides, airplanes I use, and a pdf of the instructor notes. The next section contains the instructor notes, so that readers can understand how the game works.

Agile Airplane Game – Instructor Notes

Step 0: Materials Prep

  • Print 1 copy of each airplane
  • Prepare financials chart ($ on vertical, sprints on horizontal)
  • Prepare note cards for any “helpers” to take responsibility for parts of facilitation

Step 1: Set the stage

Explain that air shows have become popular spectator events. The demand for planes has increased significantly. Everyone here is part of the “Agile Aviation Company”.

Step 2: Starting details

  • Air shows across the country have placed orders for planes, we need to fulfill them.
  • Economics: The company has a burn rate of $12 per team, and starts with $40 per team in the bank. Updates are made at the end of each Sprint.
  • Pass out supplies (paper, scissors, tape, colored markers)
  • Pass out (1 beginner, 1 intermediate) plans to each team – “your initial setup”
  • Color code plans and planes (based on available colors) – a stripe is fine

Step 3: First Order, Begin Sprinting

  • Every complete delivery of (15 Beginner, 10 Intermediate) planes will be paid $20.
  • Give team 1 minute to plan Sprint
  • Run Sprint for 4 minutes

Step 4: End of Sprint 1

  • Demo to Customer (Instructors)
  • Only tell teams about acceptance criteria if/when they ask
  • Reject planes (by spectacularly ripping them) that don’t meet acceptance criteria
  • Group batches of “done done” planes into orders
  • Update financial chart for Sprint 1 based on any completed orders and burn rate

Step 5: Run Sprint 2

  • Give teams 1 minute to reflect and plan
  • run Sprint 2 for 4 minutes

Step 6: Run Sprint 3

Step 7: Safety Issue, Run Sprint 4

  • Pull one Basic plan out (safety issues found in design) – pull the one with most in stock

Step 8: High Value/High Risk, Run Sprint 5

  • Pass out (1 advanced) plan to each team
  • Offer new order type: $10 for 4 Advanced Planes

Notes for instructors/helpers:

Customer Acceptance:

All folds line up with 3mm tolerance. (Don’t be too stringent).

Each plane if properly color coded.

Each plane is folded properly (no inverted folds, …)

Must fly across 6 foot (2 meter) platform (tables or chairs)

Test Infrastructure:

Setup a stable surface (tables or chairs) about 2m (6ft) wide for the planes to fly over.

Finance:

At the end of each Sprint, after plane acceptance, update the financial chart:

  • modify total by: ($ from Completed orders) – $12 X (# of teams)

Downloads

Introduction Slides: AgileAirplaneGame.pdf

Instructor Notes: AgileAirplaneGame-InstructorNotes.pdf

Paper Airplanes I Use: PaperAirplanes.zip

(paper airplanes are from http://www.funpaperairplanes.com/Plane%20Downloads.html)

Tools, the T in CRT

This article expands on Tools in a Concrete Reflective Tool. We can start learning tools, but there must be a path to the principles that underly them.

(This is part of the Introduction to CRT article, this expands on the nature and value of tools.)

Tools

Tools get a bad rap, but frankly some of them deserve it. The Agile Manifesto put them in their place:

Individuals and interactions over processes and tools

We need tools though. Really! Tools allow us to spend our time on better things. An electric starter for a car, a spreadsheet, and an IPhone are all tools I’d rather have. We need tools that augment our individuals and interactions. Shu Ha Ri and the Dreyfus Model both describe progressions from practices to mastery.

There is this debate: to teach the ideas(principles) first, or teach the practices(tools) first. I’ve decided that I like to start with the practices, but the ideas must be made available for people to pull in when ready. Some people, those abstract/intuitive ones, will jump to the ideas right away, that’s fine.

Tools must be backed by principles. Kanban is a tool that is backed by Lean’s principals of Flow and Pull. Given the principles behind a tool an individual can learn how to better use the tool, when to use the tool, and even when not to!

Our use of tools that don’t have principles to back them up, or our ignorance of the principles that do exist, prevent us from learning and applying judgement to the use of a tool. Or worse, we make errors of correlation and mandate certain uses of a tool causing serious harm because we’re ignorant of the changing context.

An example of a tool applied without principles is a bug tracking system. What’s a bug or a feature? Should categories be horizontal or vertical? How granular should the bugs be? How many is too many? How often to cull the list?

Most teams never get past arbitrary guessing at these questions. The answers get hard written into process or simply ignored.

Reflective, the R in CRT

This article expands on Reflective in a Concrete Reflective Tool. Tools that help us learn from their use give us tremendous opportunity for growth.

(This is part of the Introduction to CRT article, this expands on the nature and value of Reflective tools.)

Reflective

The definition of reflective I use is:

“Of, relating to, produced by, or resulting from reflection.”

Think of driving a car down the highway without being able to reflect on the current road and traffic conditions; that feedback is crucial to being able to successfully navigate. There are many names for this: Inspect and Adapt, Plan-Do-Check-Act, Feedback Cycles, Closed-Loop Control Systems.

In “Managing to Learn: Using the A3 Management Process”, by John Shook, there are two references to wanting the people in your organization to be “reflective problems solvers”. This strikes me as such an important concept that I wanted to mention here that this book prepared me to see “concrete reflective tools” at all during the Kanban conference.

Of course we want reflective, it’s obvious, right? Just having “reflective” alone though can be useless. I think there is a world of difference between an abstract reflective and concrete reflective system. The former requires the expert, the intuitive guide, that can draw conclusions “from the air”. The latter can bring everyone into the fold. Should the WIP limit be 4, or 5? We can reflect on the backlog that occurred last time we expanded the WIP limit and everyone on the team can participate in that conversation. No “black belt” needed.

Concrete, the C in CRT

This article expands on the Concrete in a Concrete Reflective Tool. Applying concrete tools is a good way to avoid alienating over half of your audience.

(This is part of the Introduction to CRT article, this expands on the nature and value of Concrete tools.)

Concrete

The definition of concrete I use is:

representing or applied to an actual substance or thing, as opposed to an abstract quality

The idea is to focus on actual things, empirical examples, quantitative measures and visual or tactile things.

Kanban is a Lean (Toyota Production System) tool being applied to software development. At the Lean Kanban conference in Miami last year I heard three separate people leading Kanban teams say “people who never contributed before started sharing ideas up at the board”. This is huge. Getting people engaged _is_ the big win with any process change.

Kanban has a visual board, like most Agile teams, but includes many more concrete “levers” that Agile visual boards don’t have. How many columns? 4, 5, or 12? How may classes of services? 1, 2, 4? How many Features should be concurrently waiting for Acceptance? 2, 4, 20?

These are extremely concrete questions and answers. Everyone can participate and articulate an opinion about 2, 4, or 20.

Why is concrete so important? Concrete processing is applicable to more of the population. From Myers-Briggs we think we can generally divide people into, among other things, those that are “Sensing” and those that are “iNtuitive”. Studies have shown the following ratio is applicable to the population at large:

S-vs-N: 73.2% is S, 26.8% is N

This means that presenting abstract ideas or conclusions will be less absorbed by most of the population. In the technology fields this ratio is apparently closer.

A related idea is visualization, an important way to make things concrete. See the Periodic Table of Visualization Methods for reference.

Lean SSC Conference 2010

The Lean Software and Systems Consortium Conference is April 21-23. I’ll be attending and am looking forward to a great conference.

The Lean SSC conference in Atlanta will be great. I’m already looking forward to more hand’s on content, empirical data, and reconnecting with colleagues from last years Lean and Kanban conference in Miami.

My trip report from last year is on the Agile Executive blog for anyone interested.