The Decline and Fall of the American Programmer

is an excellent book by Edward Yourdon (isbn 0-13-191958-X). As usual I'm going to quote from a few pages

world class organizations are devoting significant effort today to the issue of building effective, harmonious, well-balanced teams.


The most common reason in professional programming for resignation is dissatisfaction with management.


One V.P. of systems I know ordered his people to take one afternoon a week and play with their computers.


Basically I think senior management in most companies really doesn't know what it is doing. Seriously.


We put a man on the moon in 1969 with 2nd generation IBM 7094 technology.


Your enemies are your best critics.


An excellent plumber is infinitely more admirable than an incompetent philosopher.


If you pay peanuts you get monkeys.


In the words of the immortal baseball manager, Casey Stengel, "I just know I'm a better manager when I have Joe DiMaggio in center field."


They must think the people who work for them are mushrooms, since they keep them in the dark and feed them.


I think the biggest problems are to be found in management. In particular, managers who have no experience as a programmer. You can't manage a process that you don't understand.


At the heart of software metrics is the desire to improve.


The ACM Turing Award Lectures

is an excellent book (isbn 0-201-54885-2). As usual I'm going to quote from a few pages:
The effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer. [Edsger Dijkstra]
If we go back to Latin roots, we find ars, artis meaning "skill." It is perhaps significant that the corresponding Greek word was Τέχνη, the root of both "technology" and "technique". [Donald Knuth]
The assignment statement is the von Neumann bottleneck of programming languages. [John Backus]
I find a certain technique most helpful in expanding my own capabilities. After solving a challenging problem, I solve it again from scratch, retracing only the insight of the earlier solution. I repeat this until the solution is as clear and direct as I can hope for. Then I look for a general rule for attacking similar problems in the most efficient way the first time. Often, such a rule is of permanent value…
To sum up, my message to the serious programmer is: spend a part of your working day examining and refining your own methods. [Robert Floyd]
I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies. [C.A.R. Hoare]
UNIX is a simple coherent system that pushes a few good ideas and models to the limit. [Dennis Ritchie] I am a programmer. I write programs. [Ken Thompson]
To parody our current methods of teaching programming, we give beginners a grammar and a dictionary and tell them that they are now great writers. We seldom, if ever, given them any serious training in style… Like writing, programming is a difficult and complex art. [R.W. Hamming]
There are many ways to formulate things and it is risky to become too attached to one particular form or law and come to believe that it is the real basic principle. [Marvin Minsky]
To state a problem is to designate (1) a test for a class of symbol structures (solutions of the problem), and (2) a generator of symbol structures (potential solutions). To solve a problem is to generate a structure, using (2), that satisfies the test of (1). [Allen Newell and Herbert Simon]
The utility of a language as a tool of thought increases with the range of topics it can treat, but decreases with the amount of vocabulary and the complexity of grammatical rules which the user must keep in mind. Economy of notation is therefore important. [Kenneth Iverson]

Augustine's Laws

is an excellent book by Norman Augustine (isbn 0-670-80942-X). As usual I'm going to quote from a few pages.

First the serious quotes:
To finish first you must first finish.
Little did the Greeks know - the universe actually consists of Earth, fire, water, and software.
The budgeting process resists change.
If you want it bad you get it bad.
We can overcome gravity, but sometimes the paperwork is overwhelming. [Wernher von Braun]
The objective in business, however, is to measure how many undertakings are completed - not how many can be started.
reliability… must be designed into the product by the designer and built into it by the manufacturer - it cannot be inculcated by the quality department.
…the parts which break… are always the ones located in the most inaccessible places. Therefore, only a few mechanics are able to crowd around them simultaneously.
Managers must have the discipline not to keep pulling up the flowers to see if their roots are healthy [Robert Townsend]
and second the funny quotes:
Anybody can have an off decade.
...turned out to be the earliest they had ever been late.
Our team is well balanced - we have problems everywhere.
…trying to leap deep chasms in two bounds.
If it weren't for bad luck he'd have no luck at all.
It's like sending lettuce by rabbit.
There was good news and there was bad news. The good news was that management was buying everyone on the assembly line a turkey for Christmas. The bad news was that they had only ordered ten turkeys.
A knife without a blade, for which the handle is missing. [Lichtenberg]
Lord Barnetson, chairman of the London Observer, has had attributed to him the following anecdote about how a management critic would review Schubert's Unfinished Symphony:
  • It appears that for a considerable period of time the four oboe players had nothing to do. The number should be reduced, and their work spread over the whole orchestra...
  • All twelve violins were playing identical notes. This seems unnecessary duplication and the staff of the section should be drastically cut...
  • Much effort was absorbed in the playing of demisemi-quavers. This seems an excessive refinement, and it is recommended that all notes be rounded up to the nearest semiquaver...
  • No useful purpose is served by repeating with horns the passage that had already been handled by the strings...

The Options Trap

one option is a trap,
two options is a dilemma,
three options is a choice.


I recall Jerry Weinberg saying this (or something very similar) during either an AYE conference or his Problem Solving Leadership course. I'm think I've also read it in one of Jerry's books, or was it Virginia Satir, but despite a reasonably thorough search I can't put my finger on it. (If you can locate the source in one of his books I'd appreciate an email).

I think software developers are prone to falling into options traps. If someone presents me with a choice between A and B I can easily be unknowingly coerced into thinking the only choices are A or B. And of course that's not true. I can choose A and B. Or maybe C. Or D. Or maybe make no choice at all. And of course, I often fall into the trap when presenting the options myself.

I was reminded of the options trap when watching The Princess Bride with my son Patrick the other day. There is a superb scene where the Man in Black arranges a battle of wits (to the death) with Vizzini. He shows Vizzini some iocane powder (iocane is odourless, tasteless, dissolves instantly in liquid, and is among the more deadly poisons known to man - in other words it's invisible just like software is, well except for the dissolving in liquid bit). But I digress. The Man in Black takes two goblets of wine and a full packet of iocane powder and turns his back on Vizinni. A moment later, he turns to face Vizzini again and the packet of iocane powder is empty. He says to Vizzini

All right: where is the poison? The battle of wits has begun. It ends when you decide and we both drink, and find out who is right and who is dead.


The Man in Black never explicitly says it (the wording is very precise), but Vizzini is unknowingly led (and so are you when you watch the film the first time) to believe that there are only two options; either the iocane powder is in Vizzini's goblet of wine, or the iocane powder is in the Man in Black's goblet of wine. If you've watched the film you know that there is a third option. I won't spoil the scene for you by telling you what the third option is - if you want to know I suggest googling Mithridates VI of Pontus. Or watching the film!

Through the language glass

is an excellent book edited by Guy Deutscher (isbn 978-0-8050-8195-4). As usual I'm going to quote from a few pages:
In the meantime, The Origin of Species had appeared and Darwinism had conquered the collective psyche. As George Bernard Shaw later wrote, "Everyone who had a mind to change changed it."
The Lamarckian nature of Magnus's model now emerged as just one of the gaping holes in his Emmental of a theory.
People find names for the things they feel the need to talk about.
In a large society of strangers there will be many more occasions where elaborate information has to be conveyed without reliance on shared background and knowledge.
"What fetters the mind and benumbs the spirit… the dogged acceptance of absolutes." [Edward Sapir]
Languages differ essentially in what they must convey and not in what they may convey.
The Matses… have to be master epistemologists. There are separate verbal forms depending on whether you are reporting direct experience (you saw someone passing by with your own eyes), something inferred from evidence (you saw footprints on the sand), conjecture (people always pass by at that time of day), or hearsay (your neighbour told you he had seen someone passing by).
Guugu Yimithirr… does not make any use of egocentric coordinates [eg left, right] at all! … Whenever we would use the egocentric system, the Guugu Yimithirr use the four cardinal directions: gungga (North), jiba (South), guwa (West), and naga (East. … They maintain their orientation with respect to the fixed cardinal directions at all times. Regardless of visibility conditions, regardless of whether they are in a thick forest or on an open plain, whether indoors or outside, whether stationary or moving, they have a spot-on sense of direction.
John Haviland estimates that as many as one word in ten (!) in a normal Guugu Yimithirr conversation is north, south, west, or east, often accompanied by very precise hand gestures. … Everyday communication in Guuga Yimithirr provides the most intense drilling in geographic orientation from the earliest imaginable age.
The conventional predictions are that within two or three generations at least half the world's six thousand languages will have disappeared.
Each step in this chain was natural and made perfect sense in its own local context. But the end result seems entirely arbitrary.
The worst thing about this loss of transparency is that it is a self propelling process: the less consistent the system becomes, the easier it is to mess it up even further.
Until the eleventh century, English had a full-blown three-gender system just like German.

The Autobiography of Martin Luther King, Jr

is an excellent book edited by Clayborne Carson (isbn 978-0-349-11298-5). As usual I'm going to quote from a few pages:
I became convinced that noncooperation with evil is as much a moral obligation as is cooperation with good.
Capitalism is always in danger of inspiring men to be more concerned with making a living than making a life.
Gandhi resisted evil eight as much vigour and power as the violent resister, but he resisted with love instead of hate.
We'd better decide now if we are going to be fearless men or scared boys.
I realised that this speech had evoked more response than any speech or sermon I had ever delivered, and yet it was virtually unprepared. I came to see for the first time what the older preachers meant when they said, "Open your mouth and God will speak for you."
We came to see that, in the long run, it is more honourable to walk in dignity than ride in humiliation.
Gandhi was able to mobilise and galvanise more people in his lifetime than any other person in the history of this world.
A tender heart and a tough mind.
Justice too long delayed is justice denied.
A social movement that only moves people is merely a revolt. A movement that changes both people and institutions is a revolution.
It is a climate where men cannot disagree without being disagreeable.
The ultimate test of a man is not where he stands in moments of comfort and moments of convenience, but where he stands in moments of challenge and moments of controversy.
Accordingly, each situation has to be studied in detail;… Nevertheless, we had to begin a march without knowing when or where it would actually terminate.
I refuse to determine what is right by taking a Gallop poll of the trends of the time… Ultimately a genuine leader is not a searcher for consensus but a molder of consensus.

Not agile

My friend Olve Maudal from Tandberg (now part of Cisco) gave me this fridge magnet. The caption reads "Unfortunately, by the time Rupert's mother had finished knitting his outfit, the war was over." I love it. Thanks Olve.

Washroom soap visibility

My tongue-in-cheek blog on washroom taps is one of my favourites. I recently ran into the pictured soap-refuser. It was firmly fixed to the wall and was completely empty. (I particularly love the keyhole on top. I never knew soap was so prone to being stolen!) The unit was opaque white so I had no clue it was empty. I pressed the tiny nozzle at the bottom and all I got was an even tinier stream of air. Away from the wall, and right next to the taps there were some green-soap dispensers. They were green because the soap they contained was green. I could clearly see one was almost empty and one was almost full.

Mens-room 404

Last week I taught SkillsMatter's 3 day agile course written by Kevlin Henney. I've run this a few times now and each time seems to get better. I'm more and more impressed by SkillsMatter as a company. Nothing is too much trouble. And they have a great sense of humour - as the notice on the left shows!

Pinesoft cyber-dojo

I ran a cyber-dojo at the Agile Cambridge conference recently. One of the participants, Alex Graff, decided to run a cyber-dojo at his place of work, Pinesoft in central London. Nine players participated and their comments on the session included: "really good", and "a lot of fun".

Alex ran the session broadly as I did in Cambridge, as a metaphor:
  • the kata on each computer represents a feature for a product, with the product being the sum of all those features
  • the tests for each computer (which are visible to all computers) use a simple traffic light display, green light if all tests pass, red light if some tests are failing, yellow light is the tests can't be run (eg syntax error)
  • if everyone's tests pass all the lights will be green which represents a stable releasable build
  • if any computer's light is not green, the build is broken and can't be released to the client
Periodically Alex called for a release which was the cue for everyone to work towards simultaneous green lights. This took a long time the first time (as it always does) but the players quickly increased their collaboration (the game's prime directive) to work collectively towards a faster release.

Alex cleverly arranged a pair of developers at each computer - except for one. This gave all the participants experience of working in pairs most of the time but also having the occasional period of working alone. During the retrospective he asked how players felt when not in a pair. Responses included "totally different", "isolated", "felt lonely" and "the worst thing was not having someone to discuss with". The single-person laptop was also located some way off to the side, away from the other laptops which usefully served to enhance the difference.

Alex also reports that one of the highlights (and aims) of his session was getting all our developers working together.
Thank you Alex.

One month next Wednesday

I was speaking to Andy Longshaw at the SkillsMatter Agile and Lean eXChange conference. He told me a great story. There are two guys at a train station in India. It's hot and they're having a cold beer. The train pulls into the station. In no time at all its absolutely jam packed with people. Despite being "full" people continue to get on. People hang onto the side. People hang onto the front! People climb onto the roof! The guys decide to have one more cold beer. They miss the train. They ask a guard "when is the next train" and the guard replies "one month next Wednesday!"

There is a wonderful underlying dynamic to this story. It's because there is only one train a month that it's so overcrowded. If the train ran more frequently it wouldn't be so full because passengers would know it ran more frequently. Perhaps in the past there were two trains and they ran twice as often. But maybe one broke down and for whatever reason never got fixed. So now there is just one a month. And every time it runs it's dangerously overloaded. Because it's overloaded it's more likely to break down...

If you release every 12 months and a feature doesn't make it into the next release you'll have to wait at least another whole year for it. So there's pressure to add loads of features into the next release. And everyone knows that 12 months is optimistic anyway. So there's even more pressure to add even more features into the next release. The release train gets full. And the more overloaded it gets the more likely it is to slip. And the more it slips the greater the pressure to add more features into the next release...

Mindset

is an excellent book edited by Carol Dweck (isbn 978-0-345-47232-8). As usual I'm going to quote from a few pages:
It's startling to see the degree to which people with the fixed mindset do not believe in effort.
We found that people greatly misestimated their performance and their ability. But it was those with the fixed mindset who accounted for almost all the inaccuracy. The people with the growth mindset were amazingly accurate.
The best pilots fly more than the others; that's why they're the best.
John Wooden, the legendary basketball coach says that you aren't a failure until you start to blame.
Was it Mozart's musical ability or the fact that he worked till his hands were deformed?
A growth mindset helps people to see prejudice for what it is - someone else's view of them.
Babe Ruth loved to practice. In fact when he joined the Boston Red Sox… he wasn't just a rookie. He was a rookie pitcher.
Character grows out of mindset.
Too many bosses are driven and driving but going nowhere.
Tout comprendre c'est tout pardonner - to understand all is to forgive all.
Speed and difficulty are the enemy of learning.
Success is not coming to you, you must come to it.

Thinking in systems - a primer

is an excellent book edited by Donella Meadows (isbn 978-1-84407-726-7). As usual I'm going to quote from a few pages:
The system, to a large extent, causes its own behaviour.
If you see a behaviour that persists over time, there is likely to be a mechanism creating that consistent behaviour.
Economies are extremely complex systems; they are full of balancing feedback loops with delays and they are inherently oscillatory.
This capacity of a system to make its own structure more complex is called self-organization.
Complex systems can evolve from simple systems only if there are stable intermediate forms.
In hierarchical systems, relationships within each subsystem are denser and stronger than relationships between subsystems.
Hierarchical systems evolve from the bottom up.
Systems fool us by presenting themselves… as a series of events…
Side-effects. This phrase means roughly "effects which I hadn't foreseen or don't want to think about."
Everything is connected to everything else - and not neatly.
We have to invent boundaries for clarity and sanity; and boundaries can produce problems when we forget that we've artificially created them.
Economics evolved in a time when labour and capital were the most common limiting factors to production. Therefore economies keep track only of these two factors.
Much of the action you were trying to correct was in response to your own action.
Before you disturb the system in any way, watch how it behaves.
Everything everyone knows is a model.

kanban 1's game

NB: Heres a more recent slide-deck

I ran my Kanban 1's Game as an open space session at both the xpday conference and also at the Lean, Agile eXchange conference. It proved quite popular so here is how to play it if you're interested. Kanban1sGameRules

Some notes on new game variations/updates

Thank you to Kevlin Henney and Liz Keogh who helped to improve the game.

Agile, Lean and Kanban eXchange cyber-dojo

Thank you to SkillsMatter for hosting the Agile, Lean and Kanban eXchange conference. It was a great event. And thank you to the ten or so people who participated. I got some great feedback and plan to make some tweaks to cyber-dojo, particularly giving the players the ability to control the rotation period in their dojo. It will be interesting to see what value future players will set the rotation period to when they have a free choice.
I also introduced a very simple mini kanban display for each laptop; three pieces of paper marked red (in red), green (in green), and refactor (in black). You then move your avatar badge (eg wolves) onto one of the pieces of paper to reflect your current intention.

A little book of f-LAWS

is an excellent book edited by Russell Ackoff and Herbert Addison (isbn 0-9550081-1-5). As usual I'm going to quote from a few pages:
The best organisations aim to remove the expectation of compliance and eliminate the fear of getting things wrong.
Doing something right can only confirm what one already knows or believes; one cannot learn from it. However, one can learn from making mistakes, by identifying and correcting them.
Organizations fail more often because of what they have not done than because of what they have done.
The opportunity for real and useful learning comes in the face of adversity.
The people who achieve real mastery at something know what it is that makes them so good.
The best managers are genuinely interested in finding out what other people think and have superb listening skills.
Consumer involvement in product/service design almost always gets creative results.

More C macro magic - CASES

I was thinking about the PP_NARG macro this morning. It occurred to me that you could use it to create a macro for a range of case labels in a switch statement! Instead of writing this:
void eg(int n)
{
    switch(n)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("1..5\n"); 
            break;
    }
}
You could write this:
void eg(int n)
{
    switch(n)
    {
        CASES(1,2,3,4,5):
            printf("1..5\n"); 
            break;
    }
}
and the C99 magic macro is:
#define PP_NARG(...) \
    PP_NARG_(__VA_ARGS__, PP_RSEQ_N())

#define PP_NARG_(...) \
    PP_ARG_N(__VA_ARGS__)

#define PP_ARG_N(_1, _2, _3, _4, _5, _6, N, ...)   N

#define PP_RSEQ_N() \
    6,5,4,3,2,1,0

#define CASES(...) \
    CASES_(PP_NARG(__VA_ARGS__), __VA_ARGS__)

#define CASES_(N,...) \
    CASES_N(N,__VA_ARGS__)

#define CASES_N(N,...) \
    CASES_ ## N(__VA_ARGS__)

#define CASES_1(a)     case a
#define CASES_2(a,...) case a: CASES_1(__VA_ARGS__)
#define CASES_3(a,...) case a: CASES_2(__VA_ARGS__)
#define CASES_4(a,...) case a: CASES_3(__VA_ARGS__)
#define CASES_5(a,...) case a: CASES_4(__VA_ARGS__)


Weinberg on writing

is an excellent book edited by Jerry Weinberg (isbn 0-932633-65-X). As usual I'm going to quote from a few pages:
Writer's block is not a disorder in you, the writer. It's a deficiency in your writing methods - the mythology you've swallowed about how works get written - what my friend and sometime coauthor Tom Gilb called your "mythology".
It's not the number of ideas that blocks you, it's your reaction to the number of ideas.
A trigger is a small amount of input energy that sets off a large amount of output energy.
"You know, there would be no problem raising kids if only you could throw away the first one."
The essence of the Fieldstone Method is to gather great quantities of words and then to discard a slightly less great quantity.
Learning, it seems, is a matter of repeated attempts, until one finds a teacher, a book, a film, an approach, a flash, or something that finally gets the point across.
About one third of the time, the problem turns out to be that the passage didn't mean anything, or meant several things at once.
Mozart used dice to produce ideas for musical themes, and even designed a dice game for composing new minuets.
Often, in the middle of a game, an idea will pop into my mind, and I will immediately pop it into the window I have open for the manuscript. Sometimes, I continue writing from that idea for hours. When I finish, I'm generally surprised to find a half-finished solitaire game in progress.

C macro magic - PP_NARG

I've just spent two days delivering my C Foundation course to the massively talented people at Cisco (nee Tandberg nee Codian) in Langley. One of the guys on the course called Alex showed me an amazing C99 macro that counts the number of parameters. The capacity of C to surprise me with something new never ceases to amaze. Here it is (cut down to handle just 6 parameters to save space):
#include <stdio.h>

#define PP_NARG(...) \
    PP_NARG_(__VA_ARGS__, PP_RSEQ_N())

#define PP_NARG_(...) \
    PP_ARG_N(__VA_ARGS__)

#define PP_ARG_N( \
    _1, _2, _3, _4, _5, _6, N, ...)   (N)

#define PP_RSEQ_N() \
    6,5,4,3,2,1,0

int main(void)
{
    printf("%d\n", PP_NARG(a,b+c+d)); // 2
    printf("%d\n", PP_NARG(a,b,c,d,e+f)); // 5
    return 0;
}
Alex mentioned it doesn't work for zero parameters - it incorrectly returns one. Of course I can't resist seeing if I can fix that. After playing around a bit I've come up with this which seems to work.
#define PP_NARG(...) \
    PP_NARG_(sizeof #__VA_ARGS__, __VA_ARGS__, PP_RSEQ_N())

#define PP_NARG_(delta, ...) \
    PP_ARG_N(delta, __VA_ARGS__)

#define PP_ARG_N( \
    delta, _1, _2, _3, _4, _5, _6, N, ...)   (N - ((delta)==1))

#define PP_RSEQ_N() \
    6,5,4,3,2,1,0
Alex joked that at parties he's tried to impress girls with this macro. Of course he increases the number of parameters to 128. Size matters after all. And naturally he boasts not only of the macro's size but also of it capacity for expansion!

Beating the system

is an excellent book edited by Russell Ackoff and Sheldon Rovin (isbn 1-57675-330-1). As usual I'm going to quote from a few pages:
Beating the system can be a serious and occasionally risky business; some courage is needed.
Bureaucrats are usually empowered to say no to even reasonable requests, but they cannot say yes to them. This requires passing requests to a higher authority. Saying no inflates bureaucrats' self-images.
Nothing beats knowing how the system you're trying to beat actually works because the chances are that no one else knows, with the possible exception of secretaries.
We do not try to cure headache by perfuming brain surgery. Rather, we put a pill in our stomach.
The usual way of doing things often gets in the way of doing things.
Time is our only absolutely nonrenewable and, thus, most highly valued resource. To place a low value on another's time is to show a lack of respect for that person.
Persistence is a fundamental attribute of a system beater.
In most workplaces explicit and implicit assumptions often constrain behaviour.
Implicit assumptions lead to behaviours that are carried out automatically, without thought, and these behaviours constitute an organisation's or a society's culture. Culture is what we do when we do not consciously decide what to do.
Most assumptions made in and about organisations usually go unquestioned, and their validity is taken to be self-evident, despite Ambrose Bierce's (1967,289) admonition that "self-evident" means evident to oneself and no one else. "Obvious" does not mean "requiring no proof" but "no proof is desired."
No particular virtue exists in doing things the way they've always been done and in thinking about things in the way they've always been thought about.
Undesirable customs persist because they are tolerated without thought.
Effective police officers think like criminals; effective criminals think like police officers.
The major obstructions between a person and what he or she wants is not "out there" but in the person's mind.
A problem tends to be placed into the discipline of the one who first identifies it.
Problems are not defined by disciplines, although disciplinarians think so.

Sclumberger Japan



I visited Japan for the first time recently. I taught an Object Oriented Analysis and Design course for Schlumberger at Machida. The software metier there is a lovely man called Shin'ichi Watanabe who made me feel very welcome. He took me to a proper Japanese restaurant (which seated at most about 8 people) where you had to take your shoes off. The food was delicious as was the saki.

Leverage points

Is an excellent online pdf by Donella Meadows. As usual here are some snippets that spoke to me:
Counterintuitive. That's Forrester's word to describe complex systems.
Parameters are the points of least leverage on my list of interventions.
That's the difference between a lake and a river. You hear about catastrophic river floods much more often than catastrophic lake floods, because stocks that are big, relative to their flows, are more stable than small ones.
Often you can stabilise a system by increasing the capacity of a buffer. But if a buffer is too big, the system becomes inflexible. It reacts too slowly.
If you're trying to adjust a system state to your goal, but you only received delayed information about what the system state is, you will overshoot and undershoot.
Even with immense effort at forecasting, almost every centralised electricity industry in the world experiences long oscillations between overcapacity and undercapacity. A system just can't respond to short-term changes when it has long-term delays.
Delays that are too short cause overreaction, "chasing your tail", oscillations amplified by the jumpiness of the response. Delays that are too long caused damped, sustained, or exploding oscillations, depending on how much too long. At the extreme they cause chaos. Overlong delays in a system with a threshold, a danger point, a range past which irreversible damage can occur, cause overshoot and collapse.
The great push to reduce information and money transfer delays in financial markets is just asking for wild gyrations.
They [feedback loops] may not be very visible. But their presence is critical to the long-term welfare of the system. One of the big mistakes we make is to strip away these "emergency" response mechanisms because they aren't used often and they appear to be costly.
Democracy worked better before the advent of the brainwashing power of centralised mass communications.
A global economy makes necessary a global government.
Reducing the gain around a positive loop - slowing the growth - is usually a more powerful leverage point in systems than strengthening negative loops.
Missing feedback is one of the most common causes of system malfunction.
As the fish get more scarce and hence more expensive, it becomes more profitable to go out and catch them. That's a perverse feedback, a positive loop that ends in collapse.
Power over the rules is real power.
The most stunning things living systems and social systems can do is to change themselves utterly by creating whole new structures and behaviours. In biological systems that power is called evolution. In human society it's called technical advance or social revolution. In systems lingo, it's called self-organization.
The ability to self-organize is the strongest form of system resilience. A system that can evolve can survive almost any change, by changing itself.
One aspect of almost every culture is the belief in the utter superiority of that culture.
Societies… resist challenges to their paradigm harder than they resist anything else.
The power to transcend paradigms… It is to let go into Not Knowing, into what Buddhists call enlightenment.
It is in this space of mastery over paradigms that people throw off addictions, live in constant joy, bring down empires, found religions, get locked up or "disappeared" or shot, and have impacts that last for millennia.

Are your lights on?

is an excellent book edited by Donald Gause and Jerry Weinberg (isbn 0-932633-16-1). As usual I'm going to quote from a few pages:
Having followed our natural problem-solving tendencies, we have rushed right into solutions. Perhaps it would be wiser to ask a few questions before stating answers.
A problem is a difference between things as desired and things as perceived.
Don't take their solution method for a problem definition.
Each solution is the source of the next problem.
Designers - special people whose job it is to solve problems, in advance, for other people.
Approaching public servants with courtesy and respect for their humanity and competence will, for the most part, evoke humanity and competence.
The source of the problem is most often within you.
The source of a problem often contains some key element in its resolution.
In spite of appearances, people seldom know what they want until you give what they ask for.
We never have enough time to do it right, but we always have enough time to do it over.

General principles of systems design

is an excellent book edited by Jerry Weinberg (isbn 0-932633-07-2). As usual I'm going to quote from a few pages:
It's not the appearance that's the essence of their structure, it's their endurance. Structure is that which stands, which remains, which is unchanged, regardless of its physical properties.
No answer can be both precise and general at the same time.
Aggregation gives protection against the unknown; specialization against the known; and the use of each sacrifices some opportunity to use the other.
The concept of structure... derives from the concept of stability, and not vice versa.
Any representation of a system tends to make certain insights easier at the expense of making others harder.
Failing to yield is the only clue we have to the existence of structure... we can only understand permanence through attempts to change it.
When a system has to deal simultaneously with two threats, protection against one will increase vulnerability to the other.
This conception of the relationship between structure and behaviour is utterly contrary to the most widely held view - namely that structure determines behaviour.
The system responds more slowly in order to respond more surely.
The regulator must be active so that other parts may be passive.
Regulation is invisible - when it works.
Complexity is a relationship between system and observer.
Not only do birds regulate the insect population, but the insects return the favour for the birds.
There is a tendency for complexity in models to rise as the time between sensing and acting grows.

Cognitive surplus

is an excellent book edited by Clay Shirky (isbn 978-1-846-14217-8). As usual I'm going to quote from a few pages:
The real gap is between doing nothing and doing something.
The easier it is for the average person to publish; the more average what gets published becomes.
Language lets us work at the right level of ambiguity.
When opportunity changes a lot, behaviour will as well.
A surprise is the feeling of an old belief breaking.
Many of our behaviours are held in place by inconvenience, and they're quick to disappear when the inconvenience does.
Knowledge is the most combinable thing we humans have.
Behaviour is motivation filtered through opportunity.
The behaviour you're seeing is the behaviour you've designed for.
In participatory systems, "average" is an almost useless concept.
The task isn't just to get something done; it's to create an environment in which people want to do it.

Air-luggage

I went to the excellent Agile Cambridge conference recently. At breakfast one morning I was chatting to Julian Fitzell and Jason Ayers and we got to discussing luggage when flying. I always take nothing but hand-luggage. However, it's true that checking luggage into the hold does have some advantages. I think you're viewed with increased suspicion if you fly long haul with only hand-luggage. That's certainly the impression I sometimes get when flying with just hand-luggage to Melbourne say. And for another the airline has a much greater incentive to ensure you make your flight if you've checked luggage into the hold. Otherwise they have to resort to a round of luggage-rummage to remove your bags.

We had a lot fun designing a potential solution. Simply check in an empty suitcase! But it would be very inconvenient carrying an empty suitcase just to check it in. So how about an inflatable suitcase! A self blow-up suitcase would be too inconvenient so it would have to contain a cartridge which you cracked open, mixing two chemicals and causing an expansion of gases. It could double as something to sit on too.

Airline companies have limits on the heaviness of luggage but we can't imagine they have limits on its lightness. But lightness could cause problems. We wouldn't want an unsuspecting luggage-handler falling over backwards trying to lift super-light air-luggage imagining it was normal heaviness. So we might have to put on stickers "Warning: Very Light". If the airlines introduced a minimum weight we might have to add weights pre-sealed inside the air-luggage. We could add words cast in metal to give the x-ray machine handlers something to read!

As well as a basic air-suitcase we can imagine some deluxe versions along with several spin off products. An executive version which, when inflated, includes a non-retractable carrying handle and non-wheeling wheels. And a selection of self-attach stickers naming various exotic foreign destinations such as Hawaii, Alaska, and Antarctica. And of course, there is huge potential for air luggage in shapes other than plain suitcases. A guitar for example. A true air-guitar.

Naturally the air-luggage would come pre-manufactured with a fake luggage tag. The address on all the tags would be the same - the factory where the air-luggage was made. That way we could reuse and recycle, reducing our costs and increasing our profits.

As a bonus we would actively look into ways of increasing the chance the airline lost your air-luggage. Each piece of air-luggage would come with lost-luggage claims-forms for all major airlines. These would be pre-filled-in by a sophisticated computer program enabling you to make a claim for all the lost air-items your air-luggage contained.

Goldilocks tests

I was speaking to my friend Allan Kelly at the Agile Cambridge conference and he mentioned he's reading a book about the maths of production. It contains a proof: rare failures that take a long time to fix are much much worse than frequent failures that get fixed fast. This is perhaps a counter-intuitive result to the way many people think. It may mean you'd be better off with more tests failing.

It's the goldilocks effect.
Is the porridge too hot or too cold or just right?
Are the beds too hard or too soft or just right?

Do you want tests always failing?
Do you want tests never failing?
Or do you want tests sometimes failing?

You want enough to give you some confidence that your tests are testing areas where defects exist. Because exist they surely do.
You want enough to keep the code current in the developers' consciousness. So they grok it. So they can fix fast.
You want enough to keep the developers' defect fixing skills sharp. So they can fix fast.

Backlog overwork is proportional to unused code?

A common problem I see in my travels is backlogs where items in the far future are excessively detailed. A subtle dynamic related to this overwork waste is that the more detail a developer knows about future stories the more likely they are to add extra "flexibility" for them into their current story development. And of course this contributes to the amount of unused code in the software (which is often quoted at averaging 45%). I therefore propose a hypothsis:

Backlog overwork is proportional to unused code.


Aquinas

is an excellent book edited by Anthony Kenny (isbn 0-19-287500-0). As usual I'm going to quote from a few pages:
We employ the word 'think' in two quite different ways; we talk of thinking about something, and we talk of thinking that something.
Intellectual activity, then, is regarded as in some way dependent on sense-experience; in some sense of the word Aquinas is an empiricist. Many empiricist philosophers have held that all our ideas arise from sense-experience, and that they are required by abstraction from or selective inattention to features of that experience.
When I look at myself in the mirror, I 'see' myself rather than seeing the mirror, unless I am making an especial effort to attend to the mirror.
A man cannot know what a whole is or what a part is except through the possession of concepts or ideas derived from experience.
A sense faculty which cannot go wrong is not a sense-faculty at all.
The oldest Oxford and Cambridge colleges were still in the future; just after Thomas was lecturing on the Sentences in Paris the delinquent baron, John de Balliol was ordered, as a penance, to found a house of scholars in Oxford.
As Wittgenstein once observed, it is not the answers which Aquinas gives, but the questions which he asks, which are the measure of his philosophical gifts.

Kierkegaard in a nutshell

is an excellent book edited Robert Van de Weyer (isbn 0-340-69404-1). As usual I'm going to quote from a few pages:
Kierkegaard ... says that most people avoid choice by living 'aesthetically', which broadly means relying on instinct and feelings.
In a provocative passage Kierkegaard suggests that boredom is the root of all evil. He contrasts boredom with idleness.
To Kierkegaard true freedom consists in overcoming constraints, because this involves choice and effort.
He did try to imagine a true 'knight of faith'; and his description is astonishing because the person he portrays is so ordinary... What marks him out is that he takes delight in every scene, every activity and every person. And even if something does not meet his expectations, he enjoys whatever transpires.
His consistent theme, that the source of truth is subjective experience, leaves little room for academic philosophy.
Far from being the root of all evil, idleness is the only true good. Boredom is the root of all evil, and so it must be kept at a distance. Idleness is not evil.
Boredom is overcome through being intensive in your interests, not extensive.
No moment should be regarded as so significant that is cannot be forgotten at your convenience. Equally each moment should have such significance that is can be remembered at will.
When you being to notice that a certain pleasure or experience is gaining too strong a hold on your mind, you should pause and reflect. This will make you want to stop the experience. From the start you should keep every enjoyment under control, never giving yourself totally to it.

Acting and thinking

I while ago I was waiting for the Reading to Heathrow bus and I got chatting to a very interesting lady called Suzanne from Germany whose son also has Aspergers Syndrome. For some reason I mentioned the Buckminster Fuller quote which goes something like:

It is is easier to act your way into thinking differently than to think your way into acting differently.

She said that thinking is a frontal cortex activity which is a relatively recent part of our brain, and that acting is done by much older parts of the brain. She also said that when there is fear the frontal cortex shuts down - we act using the older parts of our brain.

The deming route to quality

is an excellent book edited by William W. Scherkenbach (isbn 1-85252-363-8). As usual I'm going to quote from a few pages:
Anyone who stops learning is old, whether at 20 or 80. [Henry Ford]
There is real waste when people are always expected to have an answer.
The operational definition of any procedure is what you get when it is carried out, not what is written down on a piece of paper.
Someone must manage by the decade.
As with any process, if you focus on the outcome, you will not be competitive. You must focus on the process.
Management works on the system, people work in the system.
All models are wrong. Some models are useful.
The questions are always more important than the answers.
Dr. Deming frequently received calls from managers imploring him to 'come, spend a day with us and do for us what you did for Japan'.
Time and again I see the benefits of using a team.
Teamwork characteristics ... cannot be determined if you interview ... one at a time.

Toyota production system - beyond large scale

is an excellent book edited by Taiichi Ohno (isbn 978-0-915299-14-0). As usual I'm going to quote from a few pages:
There is nothing very complex in the magic of Mr. Ohno's teachings. In fact, it is often confusing listening to him because he talks so simply, often just saying to look for and eliminate waste. We cannot believe it is that simple - but it is true.
Henry Ford was able to mine iron ore on a Monday and, using that very same ore, produce a car coming off the assembly line on Thursday afternoon.
In the pull method, the final process withdraws the required quantities from the preceding process at a certain time, and this procedure is repeated in reverse order up through all the earlier processes.
The principal objective of the Toyota production system was to produce many models in small quantities.
Even worse, there would be no distinction between normal and abnormal states on each assembly line.
If materials or machines are repaired without the managing supervisor's being made aware of it, improvement will never be achieved and costs will never be reduced.
There is no waste in business more terrible than overproduction.
In modern industry, harmony among people in a group, as in teamwork, is in greater demand than the art of the individual craftsman.
In a swimming relay, a swimmer cannot dive before the previous swimmer's hand touches the wall.
I feel the most important point in common between sports and work is the continuing need for practice and training.
They would have had difficulty understanding the system without seeing it in action.
A half-hearted introduction of kanban brings a hundred harms and not a single gain.
Improvement is eternal and infinite.

Airplane kanban

My JAOO (now GOTO) SAS flight home from was slightly delayed. Over the tannoy, whilst we were still on the ground at Copenhagen, the captain explained it was because of early morning fog over Heathrow. He further explained that when its foggy air traffic control increases the gap between the planes in the air as they come in to land. This reduces the capacity and so to prevent a backlog of planes circling overhead they send out delays to planes so they take off a bit later. What this amounts to is that planes leaving can't take off until they receive a pull request from where they're due to land.

It helps to know what success looks like

On a plane when the cabin crew perform their emergency demonstration they don't merely read out the information over the tannoy. No. The cabin crew stand where you can see them. They act. You see them pulling an oxygen mask towards themselves. You see them putting it over their heads. If they're good you see them slowly turning their heads side to side so you can see the elastic at the sides of their heads.

One of my entries in the book 97 Things Every Programmer Should Know is called Make the Invisible More Visible. Visibility is an important aspect of practice and learning. It relates to feedback. You evaluate feedback in the context of your intention - of what you are trying to accomplish. You need a clear idea of where you are trying to get to, of what success will look like when you get there.

Do you have any post-its?

Developers love solving a solution. Unfortunately their eagerness can get in the way of understanding the problem. When I'm with a client I sometimes ask a simple question such as "Do you have any post-its?" I'm careful not to say I want some post-its. I simply ask if they have any. I could be asking the question because I think not-having post-its is an indicator of something else - in the same way that not-having whiteboards is an indicator of something else.

Often they start searching for post-its. I politely stop them and say that I don't want any post-its - I simply want to know if they have any. My aim is to increase their own awareness of solving the solution before probleming the problem.

The gift of time

is an excellent book edited by Fiona Charles (isbn 978-0-932633-75-0). As usual I'm going to quote from a few pages:
Jerry warns us that when a system that continues to change or that is in a changing environment is subjected to a fixed set of tests, it will inevitably over-adapt to those tests, leading to a higher probability of severe or surprising failures in the field. [James Bach]
Complexity isn't an attribute; it's a relationship. [Michael Bolton]
When feedback is offered in the spirit of improving a working relationship, it's all positive. [Esther Derby]
In my experience, if you have a passion for something and want to take responsibility for making it happen you can always find an existing group, or find people around you who are willing to form a new group to get it off the ground. [Willem van den Ende]
People are relentlessly themselves. [Naomi Karten]
In experiential learning, students are fully engaged, and as a result, they determine what they learn, not the instructors or presenters. [Naomi Karten]
...problems that look technical. [James Bullock]
Both PSL and aikido teach practiced awareness of oneself, the situation, and others. [James Bullock]
Shugyo is to step onto the mat exactly when there is every excuse not to. [James Bullock]
I have become enormously skeptical of simple cause-and-effect explanations of any system behavior. [Tim Lister]
And maybe most important of all (and I've been a consultant for about thirty years now), I thank Jerry for helping me think about system dynamics and change. [Tim Lister]
In the technology industry, we spend so much time trying to control machines that we start thinking like machines. [Jonathan Kohl]

Slow motion velocity/wip game

I've noticed when teams play the velocity/wip game they tend to focus a lot of their energy on learning how to throw their dice faster. Learning to throw faster means you'll throw more 1's during your 1 minute iteration but that isn't really the point of the game. It also means that comparisons of velocity between different iterations are misleading.

Thinking about this today I suddenly thought of a two simple ways to improve the effectiveness of the velocity/wip game...
  • Instead of having a 1 minute iteration have a fixed number of rolls per iteration. Eleven say.
  • Do each roll in slow-motion. After each player rolls their dice, count up the 1's then slowly and calmly discuss how to play those 1's on the current board. Then make the play. Then repeat.
I tried it today (hi Michelle, Lee, Brian, Kenny, Marty, Jarlath, Gerard, Tony, and Charlie) and the difference was startling. Instead of trying to increase their velocity, the team worked on learning to play the game better. So much so that they actually forgot to measure their velocity!

I wish I'd said that

is an excellent book by Maurice Silver (isbn 1-86105-285-5). As usual I'm going to quote from a few pages:
Advice is like snow - the more softly it falls, the better it takes hold.
Don't wait for your ship to come it; swim out to it.
A stumbling block is a stepping-stone that you tripped over.
Make a point to do something each day that you don't want to do.
Error is the discipline through which we advance.
Men inevitably become indifferent to anything they do often.
There can be no economy where there is no efficiency.
When you are through changing, you're through.
Fear is like a darkroom where little doubts gets developed.
The mind grows rich from what it receives; the heart from what it gives.
It is not doing the things we like to do, but liking the things we have to do that makes life pleasant.
Do not look where you fell but where you slipped.
Rudeness is the weak man's imitation of strength.
The instant we feel anger we have already ceased striving for truth and have begun striving for ourselves.
If you can find a path with no obstacles, it probably doesn't lead anywhere.

Pragmatic thinking and learning

is an excellent book by Andy Hunt (isbn 1-934356-05-0). As usual I'm going to quote from a few pages:
Being happy broadens your thought processes.
Are you fixing the problem or fixing the blame?
Reading is ineffective compared to any sort of experiential learning.
Documenting is more important than documentation.
Learn from similarities; unlearn from differences.
Your creativity suffers on the day your under the gun and remains suppressed for the next two days as well.
Create an environment where the cost of failure is near zero.
Much of perception is based on prediction.
Every read of your memory is really a write.
Inaction is the enemy, not error.

In the brain of Jon Jagger - Deliberate practice

Here's a video (and slides) of my SkillsMatter Deliberate practice talk. This is a much extended version of the 97 Things lightning talk I did at Javazone recently. I've been known to break cameras and mirrors in the past so they wisely filmed it in very low light... :-}

JavaZone 2010: 97 Things Lightning Talk - Do more deliberate practice

Here's a video of the lightning talk - Do more deliberate practice (one of my entries in the book 97 Things Every Programmer Should Know) I did at the recent Javazone conference. It's about how deliberate practice relates to agility.

cyber-dojo video - Roman Numerals Coding Kata in Ruby

Here's a video of me demonstrating the cyber-dojo website by doing the Roman Numerals kata in Ruby.

Rethinking systems analysis and design

is an excellent book by Jerry Weinberg (isbn 0-932633-08-0). As usual I'm going to quote from a few pages:
We don't need another "movement" just now - unless it is something analogous to a bowel movement - something to flush our system clean of waste material that we've accumulated over the years.
When dealing with the unknown, it appears to be better to handle one situation at a time, examine the results obtained, and then prepare a plan for the next situation.
How to master oneself? The Eastern philosophers have always understood, but it seems the most arduous lesson for us westerners. One masters oneself by giving up the attempt. By approaching an interview with the attitude that one cannot be absolutely in control, one attains the utmost possible control.
One of the greatest divisions [of human thought] is between static and dynamic schemes, between thing and process, between noun and verb.
The architect without the stonemason is not designing cathedrals, but castles in the air.
The way things are is always fighting with the way things might be.
The rough sketch has several advantages over the precise drawing: it represents less investment in time, so we're not afraid to throw it away and try something else; its very roughness conveys important information about where we are in the design process.
The ability to decide when to stop is a feature not a failure.
90% of aggravation in programming projects comes at the end.

Accu london cyber-dojo

The London chapter of accu held a cyber-dojo last week. It was hosted by the excellent people at SkillsMatter. The group agreed to try the Roman Numerals kata with three laptops using Java and one using C#. Everyone had lots of fun. Thank you to everyone who helped to make it possible.