|
|
Running on empty.
I just don’t seem to learn, do I?
Artificial Intelligence
Years ago, I wrote my Master’s thesis at the university’s Artificial Intelligence lab. I extended an expert system to make it learn from experience.
The software ran on Lisp Machines. We only had three of these machines on campus, two in the lab where I worked, another one in a lab on the other side of campus. Lots of people wanted to work on these machines. The machines were clearly a bottleneck.
There was an “interesting” way to deal with the bottleneck: the staff could use them in the day, students could use them in the evenings.
Natural stupidity
I came in each evening to work a bit on the application. Load the application, which took a while. Check the changes that the TA developing the expert system, had made during the day. And then I could work on the part of the application I had planned to work on.
Each evening the same scenario would repeat itself: I made a bit of progress and then got bogged down with a problem. No matter what I tried, I couldn’t solve the problem. I was stuck. Tarpitted. I went home.
Next morning, I looked at the previous evening’s problem. The problem that seemed so difficult the night before, was actually very simple. You had to be really stupid to not be able to solve that problem!
I finally managed to implement the system after struggling for many nights. It wasn’t a particularly great piece of software.
Stop wasting my time with time management courses
A few years later, my company sent me and my team on a three day off-site “Time management course”. That would teach us to use our work day more efficiently, they hoped. Unfortunately, the company also asked me to perform an important technology assessment that same week.
So, I had to come to the office each evening after attending the course, to finish that assessment. This useless time management course forced me to do overtime that week! Stupid course, it didn’t teach me anything!
Go home!
Years later, I managed a team. Extreme Programming was all the rage then. It all sounded very plausible. I was determined to apply the “Sustainable Pace” (then called “40 Hour week”) practice. Each evening I would do the rounds of the office to see if people were working late.
When someone worked lated, I gently reminded them to leave on time. If they were still working late the next day, I sent them home. If they still worked late the next day, I told them to see me the next day, so that we could discuss what problems they had. This allowed me to discover and fix several problems early. Code quality improved.
As usual, I had made the rule and I thought it didn’t apply to me. I still worked long hours. I got stupider by the day. Unfortunately, there was noone to tell me to go home. I had sent them all home.
And what have we learned from this?
We don’t do stupid things like that anymore, us Extreme Programming experts, do we? At the previous Pair Programming Party we tried to implement a very simple story. We were all a bit tired after a full working day, but it was such a simple feature.
Following the TDD canon, we wrote a failing unit test (several lines of code), implemented the code to make the test work (half a line of code) and expected the unit test to succeed. It failed. Whatever we tried, we couldn’t get this code and its test to work the way we wanted to. We finally gave up.
Two days later, I looked at the code and the error jumped me in the face. You had to be really stupid to not be able to solve that problem! … That’s how it’s supposed to be, isn’t it?
Lesson learned:
- Four (pairprogramming) eyes see more than two
- Four tired eyes are just as blind as two tired eyes.
Well, at least the expert system learned from experience…
Tags: agile

I will be presenting the Toyota Way session at the French XP Days in Paris, on 23 and 24 March.
This session will describe the 14 management principles and how they can be (and have been) applied to software development management.
I’ll be using a new presentation style, following some tips I got from Presentation Zen (link by Nico). The slides contain a lot less information (well, almost none), but they are cues to underline the story of the presentation. It’s a combination of the “Takahashi method” (but not so sparse) and the “Lessig method” (but not so rapid-fire).
I’ve already used this presentation technique once, together with Vera Peeters, to present “The Origins of Agile”. I thought it was fun, fast and contained some useful information. Come and see for yourself in Paris.
Tags: agile, lean, Toyota Way, XP Day
(Fr)Agile Software Development. Ha ha!
Detractors of Agile Software Development sometimes use the term Fragile Software Development. It’s an easy pun, you don’t have to think too hard about it. And then you can dismiss the whole idea of agile software development without a further thought.
This accusation is mostly aimed at Extreme Programming. XP has a set of interlocking practices that reinforce and balance each other. Take one away and the whole house of cards comes crumbling down.
XP is fragile. And that’s how it’s supposed to be.
Huh? Agile: good! Fragile: bad! Surely?
What if that fragility contributes to XP’s agility?
Let’s look at another fragile method and all the ways it can break: Lean. Let’s count the ways we can shut down a Lean plant:
- Just in time delivery: if one delivery from one supplier is late, what little inventory you have runs out very quickly.
- Everyone can stop the line: if someone discovers an error, the whole line is shutdown while the cause of the error is removed (actually, the line shuts down incrementally: first one cell, then a group of cells, then the line, depending on how long it takes to fix the problem).
- Pull: there are very small buffers of work in progress between cells, regulated by Kanban cards. If one cell fails to replenish the buffer, the other cells quickly shut down due to lack of input. Ideally, you have “one piece flow”, no buffers!
- Small batches: each production run produces only small batches, which are consumed quickly. If the process that produces the batches breaks down, the consumers quickly break down due to lack of resources.
And yet… every metric and statistic available clearly indicates that Lean plants are more efficient and production lines break down less often than “traditional” plants with lots of safety margin.
Making the system more fragile: lowering the water level to expose the rocks
In between cells or parts of the production line, there are small buffers of unfinished work (see the “Drum-buffer-rope” entry) that protect a consumer from variations in output of its producers. The Toyota Way describes how the size of these buffers is determined: by using the lower the water level to expose the rocks technique.
Whenever a process runs smoothly, the size of the buffer is reduced. If the system keeps working smoothly, the buffer is reduced again. This continues until the system breaks down. The buffer is enlarged to the previous value and the root cause of the system breakdown is researched. When that problem has been solved, the buffer is reduced again.
The metaphor that gave this technique its name goes like this: imagine you’re sailing a boat. Below the water surface, there are rocks, but you don’t know where they are. If the water level is high enough, you’ll never hit any rocks. If you gradually lower the water level, you will hit the highest rock. Now you can remove that rock and you can sail freely again. To hit (and find) more rocks you lower the water level again.
Fragility keeps you on your toes
How would you act if a mistake could shut the whole plant down? You would make damn sure that everything is in place to avoid mistakes or to fix them very quickly. You’d try to find and fix root causes of problems. You would constantly look to improve and refine your processes. You would actively search out problems. That is… IF you worked in an extraordinary, learning organisation.
If you work in the average company, you would be scared to do anything for fear of being blamed (and fired). That’s one of the reasons that the Toyota Way says “Whatever the problem, it’s never a people problem, it’s always a process problem”
A while ago, I had a discussion about how to handle a daily build failure. I advocated letting the whole team work on fixing the build problem, before they started to work on new features. Someone else proposed to let one developer fix the build, so that the others could get on with their work. He thought I was a bit excessive, extreme even. Now why would I want to waste good developer’s time? Maybe to make our process a little more fragile, to make the cost of a build break a bit higher, so that we would think that little bit harder about how to avoid the root causes of broken builds.
XP is fragile. XP is Lean
XP has even more ways to break down than a Lean plant. Let’s list a few:
- What if the customer can’t supply stories fast enough (just in time)?
- What if your story cards get lost/blown away/stolen? (I get this question a lot)
- What if your tests don’t catch all the errors?
- What if the build breaks a lot?
- What if developers don’t sign up for stories/tasks?
- What if… (your favourite method of breaking down here)
What keeps XP projects alive?
- A team with a common vision and open communication.
- Discipline to practice all the agreed practices, not just the easy ones. Even when there’s pressure. Especially then.
- A blame-free environment, so that you can solve problems and learn.
- Reflecting on what you do.
- Constantly looking for ways to improve.
- Being open-minded to accept solutions when you find them, even if that means you’re not doing XP by the book. Especially then.
And that’s just for starters. Who knows where you would end up if you kept doing that? Just imagine… How fragile can you make your process?
Tags: agile, theory of constraints, lean, Toyota Way
Thinking for a Change at SPA 2006
Marc Evers and I will host a session on the Theory of Constraints’ “Thinking Processes” at the SPA 2006 conference.
The session is, not coincidentally, called “Thinking for a Change”, after the Thinking Processes book by Lisa Scheinkopf, that introduced me to the subject.
We will introduce “current reality trees”, “transition trees” and “future reality trees” by applying them to real problems that participants bring to the session. We will be “learning by doing” by taking small steps: explain part of the technique, apply the technique, reflect, explain another part…
We don’t have the time to deal with the “Evaporating Cloud” technique during the session, but we will run a “birds of a feather” session about it. The previous entry contains an example of the use of the evaporating cloud. Expect more examples of the techniques in upcoming entries.
The conference takes place in St Neots, Bedfordshire, from 26 to 29 March.
Some of the interesting sessions of the conference:
See you there!
Tags: SPA2006, theory of constraints, thinking processes
It’s always a people problem (Gerald Weinberg)
In “The Secrets of Consulting“, Gerald Weinberg tells us that Whatever the problem is, it’s always a people problem.
All too often, problems are labeled as “Technology problems”, to hide the real problem and avoid blame. This strategy is very effective in a field like IT, where there is lots of technology churn. However, you can always trace even these problems back to people: who selected the technology and why, do people know how to use the technology, were the users of the technology consulted…
It’s always a process problem (The Toyota Way)
The Toyota Way states that Whatever the problem is, it’s always a process problem.
Not surprising, coming from a company which has one of its principles: “The right process will deliver the right results.”
An example situation: Mike the micromanager
Imagine an all too common situation: someone who micro-manages their team. As the number of interventions rises, so does the disruption to team member’s flow. This reduces the team’s productivity. When the lower results become visible, this increases the need the manager feels to intervene, which leads to more interventions. And the vicious circle goes on an on…

Micromanagement as a people problem
What questions would Gerald Weinberg ask?
- Where does this need to intervene come from?
- Is the manager aware of the effects of his actions? Could we clarify this by using a Systems Thinking approach as above?
- Can we improve the way the manager and the team communicate? E.g. the manager could “batch” his requests of the team; the team could provide better visibility into the state of their work, so that the manager need not fear that “things are getting out of control”.
- How do the team members react to the interventions? Are they acting incongruently themselves?
Micromanagement as a process problem
What questions would Toyota ask?
- What is wrong with our hiring or promotion process, that put this manager in a situation he wasn’t able to handle?
- What is wrong with our training and coaching process, that we left this manager in a difficult situation without any help?
- What is wrong with our Genchi Genbutsu (go see on the workfloor) process, that this manager’s manager didn’t go and see how the team was, so that he could see the problem?
- What is wrong with our Hourensou (report, inform, consult) process, that this manager didn’t inform his manager of the problem and consult him for ways to solve the problem?
- What is wrong with our evaluation and “Stop the line to fix mistakes”, that nobody stopped to report the problem and find its cause?
People or Process? Evaporating the cloud
We clearly have a conflict: either every problem is a people problem or it’s a process problem. The “Thinking Processes” provides us with the “Evaporating Cloud” technique to examine and resolve such conflicts.

How do you read this diagram?
- In order to have “An effective organisation” (goal) we need “Effective people” (requirement 1), because the effectiveness of the people determines the qualities of the result (assumption 1)
- In order to have “An effective organisation” (goal) we also need “Effective processes” (requirement 2), because effective processes enable people to work well together (assumption 2).
- In order to have “Effective people” (requirement 1), we need to “Treat every problem as a people problem” (prerequisite 1), because this will help us focus on solving the fundamental people problems and not get sidetracked by superficial symptoms (assumption 3).
- In order to have “Effective processes” (requirement 2), we need to “Treat every problem as a process problem” (prerequisite 2), because this will help us focus on continuously improving our processes and thereby making our solutions available to the whole organisation (assumption 4).
- There is a conflict between D1 and D2: either all problems are people problems OR all problems are process problems.
How can we resolve the conflict?
- Are the relationships between goal and requirements valid? I think so. I believe we need a combination of effective people and processes to succeed. Take away one of them and you can’t have an effective organisation (if you have effective people, they will probably grow a process anyway).
- Are the relationships between prerequisites and requirements valid? I believe the only way to be effective is to be continually be solving problems, be they people or process problems.
- Are the assumptions correct? I believe so, I can’t find any counter-examples for the moment.
- Why can’t D1 and D2 co-exist? Are they really mutually exclusive? What’s the assumption behind this? Hmmmmmm. Let me think…
Imagine that both statements are true: Every problem is a people problem AND a process problem. Would this assumption lead to a contradiction? Let’s see what we would do in Mike’s case:
- First, we could call in Jerry Weinberg and resolve this manager and team’s issues, so that this team can work effectively.
- Then, we could call in a Toyota sensei to question the processes that led up to this problem and failed to detect and correct it. They would help us to improve the processes, so that this kind of situation could be avoided in the future, so that in the future, all teams can work effectively.
I believe this resolves the conflict: every problem is a people problem that must be solved now AND an underlying process problem that must be solved, so that this problem doesn’t reoccur in the future. That means we have to clarify our goal: “To have an effective organisation, now and in the future“. With these changes, the diagram looks like this:

Reconciling people and process, present and future
Both types of problem solving have their place. We need to deal with the problems that people are having now. We need to continuously improve our processes so that these problems won’t reappear for other teams in the future.
An analogy I like is that improvement needs to be like a ratchet: relentless reflection and continuous improvement (Hansei & Kaizen) drive the gear wheel forward; processes encode our growing and changing knowledge to act as the “click” that prevents the wheel from turning back.
Tags: Systems Thinking, theory of constraints, thinking processes, Toyota Way
|