Clarification to Paired Experts Post

FYI I’ve just appended a small clarification to the end of my recent Pairing and Experts post, clarifying what’s meant by “expert”.

People Skills for Everyone

I was talking to my Mum recently.  I mentioned that I’m becoming even more interested in people skills, and she said, “Oh, so you’re interested in management then.”

Actually, no.

  1. I’m interested in people who are not managers improving their people skills.
  2. I’m interested in busting the myth that “people skills” is a topic exclusively for managers.
  3. I’m interested in busting the myth that improvements in people skills must be initiated by managers or trainers.  I want them to be initiated by   people who actually want to improve their own skills.

If you’re interested in the same things, please comment below or email me (address on About page).

Becoming an Expert

Imagine looking at a dog.  You instantly know that it is, indeed, a dog.  That’s an incredible feat of pattern recognition, performed almost instantly and without any conscious effort.

Is it really incredible?  Yes.  It just seems easy because you’ve been doing it effortlessly since about age three.  To remind yourself how difficult it actually is, imagine designing an algorithm to recognise dogs.  Exactly what would be the rules for distinguishing a small small dog from a large cat?  How would you define the category “dog” such that it included Chihuahuas and Great Danes,  but not foxes and wolves?

Nobel prize winner Daniel Kahneman uses the dog example to explain the two ways humans think.  One way is effortful thought – what we do when consciously thinking about something.  The other doesn’t even feel like thinking it all.  It’s just effortless automatic perception – like seeing a dog.  Much of our brain’s activity is of the automatic kind.  Kahneman gives several examples to show the difference:

Automatic Effortful
Detect that one object is more distant than another Focus on the voice of a particular person in a crowded and noisy room
Detect hostility in a voice Tell someone your phone number
Answer 2 + 2 = ? Answer 17 x 24 = ?
Drive a car on a empty road (unless you are just learning to drive, in which case this belongs in the “effortful” column) Check the validity of a logical argument

Expertise

What does this have to do with expertise?  The answer is simply this: expertise involves significant “automatic” thought.  For example, you happen to be an expert in recognising dogs.  You accomplish that task with no conscious effort whatsoever.

The same applies to activities that we normally associate with “expertise”.  Chess masters are a compelling example.  When a chess master looks at a board, several strong moves immediately spring to mind.  Just like you effortlessly “see” that an animal is a dog, a chess master effortlessly “sees” which moves make sense.  This set of “candidate moves” is generated automatically, without conscious effort.  Only after the moves spring to mind does the master actually start consciously thinking about them – to decide which of the candidate moves is best.

As Kahneman writes:

[Experts’] intuitive judgements come to mind with the same immediacy as [a child’s] “doggie!"

An Analogy

It may seem hard to believe, that many of our most difficult mental tasks are performed instantly and unconsciously.  As Kahneman points out, their very automatic-ness leads us to overlook their importance. 

When I was reading his book, I found it helpful to recall the university paper I took in artificial intelligence.  There we learned about artificial neural networks. Neural networks implement an approach to computation which is inspired by the structure of the human brain. They are very fast and effective “pattern recognisers” but, having recognised an input as matching a particular pattern, they are completely unable to tell you why it matched the pattern. I.e. they can’t explain their “reasoning”. This exactly matches Kahneman’s description of our automatic thought – it gives you an impression/hunch very quickly, but is unable to tell you why. So:

  • I imagined the brain’s underlying hardware as a neural network – quick to recognise patterns, but unable to explain its logic.  It is here that our automatic thinking takes place.  So it’s easy to see why our automatic thinking is so fast – neural networks are naturally fast pattern recognisers, and ours is implemented directly in “hardware”. 
  • I imagined effortful thought as a simulation running on top of the underlying hardware.  Rather like a virtual machine.  Inside the virtual machine, thinking is sequential and logical.  But, because the virtual machine is just an emulation, it runs slowly and has limited working memory.  (Question: does this imply our effortful thoughts aren’t “real”?  No. Just that they have a complicated origin, but our automatic thoughts are not subject to the same performance limitations.)

Simulated System2

 

I wouldn’t dare to suggest that this model is accurate in terms of the underlying biology, but as a software engineer I found it helpful in understanding Kahneman’s work.

Developing Expertise

Consider two chess players, a novice and a master.  The novice relies almost entirely on effortful thought.  “How does a knight move?”, “Let me think what would happen if I moved my rook to here…”.  But the master makes heavy use of automatic thought.  The master’s automatic mind takes care of most of the details that the novice struggles with, leaving the master’s effortful mind free to add value where it is most needed.  Consequently the master can produce better decisions in less time.

But how does the novice become a master?  How does someone using effortful thought slowly transition to creating (good-quality) automatic thoughts?  Through practice.  With enough time, and enough examples, your underlying neural network trains itself to recognise the patterns.

Three sources have influenced my thinking about this kind of practice:

  • James Bach’s Myths of Rigour presentation (which to me, could equally well have been entitled “What is learning?”).  I can’t find the audio or video online, unfortunately.
  • Anders Ericsson’s work on deliberate practice
  • Alistair Cockburn’s concept of Shu-Ha-Ri.  To join the dot’s between Shu-Ha-Ri and Kahneman’s work, I’d suggest that the Shu-Ha-Ri progression equates to the same progression described above: from a novice who uses only effortful thought, to an expert who uses a highly efficient blend of automatic and effortful thought.  

A Software Example

I recently noticed how various people debug the large software solution that I’ve been working on for some years.  When I need to debug it myself, I don’t get “stuck”. I might not know the cause of the problem, but I always have an idea on what to do next – something that will take me one step closer to finding the problem. Just like experienced players instantly “see” good moves in a chess game; I tend to “see” good moves in the debugging process. A series of such moves, possibly with some backtracking, eventually leads to a solution.  But I’ve noticed junior developers are much more likely to get stuck – when faced with a problem they sometimes have trouble generating the “next move”.   I’ve also noticed that although I generate moves more successfully than juniors, I seem to expend less conscious effort in doing so.

Of course, this is no excuse for me to take an ego trip – after about 7000 hours with this code base, and a decade’s experience on other systems before it, I darn well should have automatic expertise by now!  Junior programmers, or senior ones with less experience of the system at hand, have no choice but to generate fewer moves automatically and fill the gaps with effortful thought.  Over time, their balance will gradually shift from effortful to automatic.

Implications

The science of expertise has many implications for how we recruit, train and deploy software engineers.  In a future post, I intend to explore the implications for pair programming.

Estimation Summary for Agile Projects – Nov 2011

It’s over 7 years since my first post on contracts for agile projects.  During the years since I’ve worked almost exclusively on agile projects with fixed scope, learning some real-life lessons along the way.

So here are some of the key points that now I keep in mind when considering estimation, pricing and contracts for agile projects.  These points are particularly relevant when customers have asked for fixed price and fixed scope.

Continue reading “Estimation Summary for Agile Projects – Nov 2011″

Ambiguity

Alistair Cockburn wrote

Agile development calls for a certain amount of ambiguity and flux in the project. Not everyone enjoys ambiguity and flux. I would suggest that most people don’t.

A very good point.  I think this affects some agile implementations – causing them to back away from being really agile, into a no-man’s-land between agile and waterfall. 

Personally, I prefer the honest ambiguity of agile to the Clayton’s certainty of waterfall.  Software development is risky.  Customers and suppliers do learn during the project.  Users do give better feedback from trying software than reading documents. To pretend otherwise may feel safer in the short term, but it disappoints in the long run.

Email Subscriptions

You can now subscribe to email updates from this blog.  This should be handy if you prefer email to RSS.  Just go to the new Subscribe page on the menu bar.

PS If you spot any problems with the email subscription, please let me know.  I’ve never used this particular email plug-in before, so I don’t know how it will work out.

Million, Billion, Trillion

Humans are bad at understanding large numbers.   Our education system successfully trains us to understand the relative magnitudes of small numbers,  but for larger numbers we tend to fall back on an intuitive logarithmic scale.  So we underestimate the real difference between, say, a million and a billion.

Here’s a wee table I put together, to help with visualising large numbers.  The table is based on the thickness of a New Zealand $1 coin.

  • We start with just one, which is 2.74mm thick (about twice as thick as a US quarter).
  • Then, imagine we make a stack of 1000 coins.  It would be about the height of a person (a tall person, with their arms up-stretched).
  • For a million coins, we would have to lie the stack on its side.  It would form a “sausage” of coins about the length of an airport runway.
  • For a billion coins, the sausage would be as long as a country (specifically, India).
  • For a trillion coins, we’d end up way out in space (almost 8 times as far away as the moon).  That’s hard to visualise, because there’s nothing there.  So how about we try $14 trillion instead (the size of the US public debt)?  If we had the US public debt in $1 coins, the stack would reach all the way to Venus.
Number   Length
$1k 10^3 person
$1 million 10^6 airport runway
$1 billion 10^9 India
$1 trillion 10^12 Moon * 8

So to visualise the difference between a thousand, a million and a billion, you can say: “person, runaway, India”.

 

Footnotes Nov 2011:

1. Here’s an amazing visualisation of dollar values at various scales

2. Further to the billion-coins-in-India example: what if we lined up a billion people, instead of a billion coins?  That’s approximately the actual population of India.   To get a line the same length as the  billion coins, we’d have to ask the people to stand about 500-abreast.  I.e. the population of India could stretch from the north to the south of the country, if they formed a long, skinny loosely-packed crowd approximately 500m wide.

3. A similar crowd in New Zealand, with the entire population of 4 million stretching the full length of the country, would be only 2 or 3 people wide – in part because the country is sparsely populated, and in part because it’s a long skinny country.

Jan 2012:

4. The number of stars in the observable universe is estimated at 7 x 1022.   Given the world population, that’s 10 trillion stars per person – which equates to one stack of coins, reaching most of the way to Venus, for every person alive today.