Thursday 12 July 2012

Test Driven Development solutions to same problem

!WARNING - THIS POST IS WRITTEN FOR SOFTWARE FOLKS!

I discovered Test Driven Development / TDD in about 2005/6 thanks to Gunjan Doshi's TDD Rhythm and 1-2 old articles on JavaWorld.

Years later I read Kent Beck's book Test Driven Development (The Addison-Wesley Signature Series) (or US) and was glad I had not missed anything fundamental from my non-standard "foundations" on the subject. These days there is a fairly good intro on Test Driven Development wikipedia entry. This post is aimed at software craftsmen and journeymen and perhaps even masters - to inspire a bit of thought along the following dimensions that impact the solutions that evolve:
- the understanding of the functional requirement
- the understanding of the non-functional requirement
- approaching the solution in primarily an iterative approach (managing complexity, perhaps)
- approaching the solution in primarily an incremental approach (managing complication, perhaps)
- the understanding of the required test strategy to ensure required quality level is achieved

Dimensions that, in TDD, result in the tests selected AND the order in which to approach the tests, which result in the emerging of different solutions.

I've spent a great deal of time leading/mentoring/coaching Test Driven Development (TDD) sessions, working with teams and individuals on a particular problem which they had no experience in beforehand. These sessions were the correct environment for us both to learn TDD, or for them to learn TDD, or even as part of a recruitment selection process where the team was practising TDD and we had to ensure candidates could practice TDD as we did.

I selected a problem that was documented on wikipedia on the page describing Numerology. I like discovering interesting coding problems on wikipedia as the descriptions there are [theoretically] internationally acceptable and understandable - which helps enormously to "level the playing field" for English first language speakers as well as non-English first language speakers.

The specific problem I wanted to pair up on is described very well under "Methods" in terse language (another "pro" as time is always pressured, and I wanted a problem understood, solved and discussed in 30-45 minutes).
In essence for this challenge, I wanted solutions to be developed that would convert a word, a phrase, and ultimately a person's full name, into a number, using simple rules that had to be analysed on the wikipedia page and extracted, without my help, to establish the even playing-field going into the solution development phase and discussion phase thereafer.

The first part of the rules were simply how to encode letters to numbers according to Numerology:

1 = a, j, s;
2 = b, k, t;
3 = c, l, u;
4 = d, m, v;
5 = e, n, w;
6 = f, o, x;
7 = g, p, y;
8 = h, q, z;
9 = i, r

The second part of the rules would usually give the candidate 2 strategies depending on how detail-oriented the person was.

For those who rushed through understanding the requirements, the rules were simply summing individual numbers repeatedly until the total < 10, eg using the wikipedia examples:

3489 ? 3 + 4 + 8 + 9 = 24        ? 2 + 4 = 6
Hello ? 8 + 5 + 3 + 3 + 6 = 25  ? 2 + 5 = 7

For those who paid a bit more attention, the rules were simply:

  value modulo 9, if 0, then 9

It is *always* interesting to see who picks up the shorter modulo 9 strategy, and who does not. (feeding into a lightweight Belbin assessment - see my Coaching with Belbin)

The various solutions below highlight [clearly] how the right problem tackled in the right way creates a much more readable, maintainable, extensible and flexible solution using TDD. Although even the less TDD-correct approach still produces an acceptable result. For me though, the best solution was actually produced largely without using TDD. Can you spot it?

/***************************************/
// TESTS
/***************************************/

I have removed name identifications and some "interesting" tests from the typical TestClasses that were all similar to either:

// Simple
import Calculator;
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculatorTest {
    Calculator calculator = new Calculator();
    /*
     * Test Cases:     *    
     * 3,489 => 3 + 4 + 8 + 9 = 24 => 2 + 4 = 6     *          
     * Hello => 8 + 5 + 3 + 3 + 6 = 25 => 2 + 5 = 7  *
     */
    @Test public void testCalculateImportantChars() {        assertEquals(2, calculator.convertCharToNumeric('k'));        assertEquals(1, calculator.convertCharToNumeric('a'));        assertEquals(9, calculator.convertCharToNumeric('r'));        assertEquals(5, calculator.convertCharToNumeric('n'));        assertEquals(8, calculator.convertCharToNumeric('h'));        assertEquals(5, calculator.convertCharToNumeric('e'));        assertEquals(3, calculator.convertCharToNumeric('l'));        assertEquals(6, calculator.convertCharToNumeric('o'));        assertEquals(9, calculator.convertCharToNumeric('i'));        assertEquals(8, calculator.convertCharToNumeric('z'));    }

   @Test public void testCalculateHello() {        assertEquals(7, calculator.calculate("Hello"));    }
}

OR:

// More along Kent Beck's final example approach

import Calculator;
import org.junit.Test;
import static org.junit.Assert.*;

public class CalculatorTest {

   Calculator calculator = new Calculator();

   /*
    * A = 1
    * B = 2
    * C = 3
    * a = 1
    * b = 2
    * j = 1;
    * k = 2
    * i = 9;
    * 0 = 0
    * 1 = 1
    * 11 =  2
    *
    * AA = 2
    * AB = 3
    *
    * 1B2a =6
    */

   @Test
   public void testCalculate1() {

       String[] inputs = {"A", "a", "B", "b", "C", "k", "j", "i", "AA", "AB", "ABc", "0", "1", "11", ",", " ", "1B2a", "-1", "hello", "3,489"};
       int[] outputs = {1,1,2,2,3,2,1,9, 2, 3, 6, 0, 1, 2, 0, 0, 6, 1, 7, 6};

       for(int testcase=0; testcase < inputs.length; testcase++) {
           assertEquals(outputs[testcase], calculator.iWantToBelieve(inputs[testcase]));
       }

       assertEquals(-1, calculator.iWantToBelieve(null));
   }

}

/***************************************/
// SOLUTIONS, all checks and Exceptions removed for brevity
/***************************************/



/* Common Solution 1 */


public class Calculator {

   public int iWantToBelieve(String string) {
       if(null==string) {
           return(-1);
       }
       int result = 0;
       for(int pos = 0; pos < string.length(); pos++) {
           int valueToAdd;
           char currentChar = string.charAt(pos);
           if(Character.isDigit(currentChar)) {
               valueToAdd = Integer.valueOf(String.valueOf(currentChar));
           }
           else if(Character.isLetter(currentChar)){
                int tmpValue = Character.toUpperCase(currentChar) - 64;
               int valueOfCharacter = tmpValue % 9;
               valueToAdd = valueOfCharacter == 0 ? 9 : valueOfCharacter;
           }
           else {
               valueToAdd = 0;
           }
           result+=valueToAdd;
       }

       if(result>9) {
           result = iWantToBelieve(String.valueOf(result));
       }
       return(result);

   }

}


/* Common Solution 2 */


import java.util.HashMap;
import java.util.Map;

public class Calculator
{
 private static Map numericCodes = new HashMap();
  
  static 
  {
   numericCodes = initialiseNumerologyMap();
 }

 public Calculator(){
 }
  
 public int calculate(String word) {
   char[] chars = word.toLowerCase().toCharArray();
   int[] digits = new int[chars.length];
    
   for (int i = 0; i < chars.length; i++)
   {
       char characterValue = chars[i];
       Integer numeric = numericCodes.get(characterValue);
       if (numeric == null)
       {
         digits[i] = 0;
       } else {
         digits[i] = numeric;
       }
   }
   int sum = 0;
   for (int i = 0; i < digits.length; i++)
   {
     sum += digits[i];
   }
   if (sum > 9)
     return calculate(""+sum);
    
   return sum;
 }

 /* 
  * 1= a, j, s; 2= b, k, t; 3= c, l, u; 4= d, m, v; 5= e, n, w;
  * 6= f, o, x; 7= g, p, y; 8= h, q, z; 9= i, r  
  */
 private static Map initialiseNumerologyMap()
 {
   // a to z mappings
   for (int i=97; i<123; i++) {
     int alphabetValue = i%96;
     int modulatedValue = alphabetValue%9;
     if (modulatedValue == 0) {
       modulatedValue = 9;
     }
     numericCodes.put((char)i, modulatedValue);
   }
   // 0 to 9 mappings
   int j=0;
   for (int i=48; i<57; i++) {
     numericCodes.put((char)i, j);
     j++;
   }
   return numericCodes;
 }

}

/* Common Solution 3 */

public class Calculator {

   public int calculate(int n) {
       if (n == 0) {
           return 0;
       }

       int result = n % 9;
       if (result == 0){
           return 9;
       }
       return result;
   }

   private String a2n = "abcdefghijklmnopqrstuvwxyz";

   public int convertCharacter(char ch) {
       return calculate(a2n.indexOf(Character.toLowerCase(ch))+1);
   }

   public int convertWord(String word) {
       int sum = 0;
       for(char c : word.toCharArray()) {
           sum += convertCharacter(c);
       }

       return calculate(sum);
   }

}

/* Common Solution 4 */

public class Calculator {

   public int convertCharToNumeric(char c) {
       int intValue = (int)c;
       if ((intValue >95) && (intValue < 129)) {
           int numericFate = (intValue - 96) % 9;
           return convertForNumerology(numericFate);
       } else {
           return 0;
       }
   }

   private int convertForNumerology(int yourFate) {
       if (yourFate == 0) {
           return 9;
       }
       return yourFate;
   }

   public int calculate(String word) {
       int total = 0;
       for (char c : word.toLowerCase().toCharArray()) {
           total += convertCharToNumeric(c);
       }
       return convertForNumerology(total%9);
   }

}

/* Common Solution 5 */

public class Calculator {

   public int calculate(int n) {
       int result = n % 9;
       if (result == 0) {
           result = 9;
       }
       return result;
   }

   public int convert(String word) {
       String workingWord = word.trim().toLowerCase();

       int total = 0;
       for (char ch : workingWord.toCharArray()) {
           int intValue = (int)ch;
           if ((intValue > 96) && (intValue < 123)) {
               total += (intValue % 96);
           }
       }

       if (total > 0) {
           return calculate(total);
       }

       return 0;
   }

}


/* UnCommon Solution 6 */

public class Calculator {

   public int calculate(long n) {
       if(n%9==0)
           return 9;
       return (int)(n % 9);
   }

   public long convertStringToNumber(String string) {
       String tmpString = string;
       tmpString = tmpString.toLowerCase().replaceAll("[^abcdefghijklmnopqrstuvwxyz]", "");
       tmpString = tmpString.replaceAll("[a,j,s]", "1");
       tmpString = tmpString.replaceAll("[b,k,t]", "2");
       tmpString = tmpString.replaceAll("[c,l,u]", "3");
       tmpString = tmpString.replaceAll("[d,m,v]", "4");
       tmpString = tmpString.replaceAll("[e,n,w]", "5");
       tmpString = tmpString.replaceAll("[f,o,x]", "6");
       tmpString = tmpString.replaceAll("[g,p,y]", "7");
       tmpString = tmpString.replaceAll("[h,q,z]", "8");
       tmpString = tmpString.replaceAll("[i,r]", "9");
        return Long.parseLong(tmpString);
   }
  
}

/**************************/

It seems to me that TDD represents some interesting mental/psychological challenges for people who try:

  • For software newbies, it is almost effortless, but they struggle to see the value in what they're creating as their solution emerges - I think due to a lack of experience looking at mountains of badly written and poorly designed legacy systems
  • For software oldies, it is darn painful, and they struggle to see the value in the extra steps they're taking, constantly battling the urge to do more error checking and handling, to make the solution more complicated, and generally reach a point of suspended disbelief needing to see more examples and try it again in their work environments
  • For some, and it is so far impossible for me to recognise them, they reach almost immediate "ah ha!" realisations of the power of TDD. They're flexible and open enough to suspend their not-as-entrenched over-thinking thought processes that the "oldies" display yet they have experience of maintaining some old production systems and dealing with some of their more novice mistakes that have come back to haunt them again, and sometimes again and again.
  • Keith Braithwaite   and I once discussed that people applying TDD properly ("coincidentally" those who love doing so) experience  Csikszentmihalyi's "Flow"  - and hence even more benefits for those who successfully embrace, as well as the organisations that setup them up to succeed/embrace.


I look forward to hearing other points of view on the above 6 solutions for the "same problem" over the next few years.

Thursday 5 July 2012

My favourite coaching tools: Labels and Believing Is Seeing!

Caveats:
This is a group exercise and great for team building. At certain times during the session some people's emotions might rise due to frustration at being misunderstood.

As coach you MUST manage the level of frustration (a little is good, too much is bad) in order to allow the group to fully experience and gain from the steps below. Most participants however are quick to see the simulation for what it is and self-control themselves accordingly. If you feel unsure, practice with a smaller group of friends, for instance, who can safely give you feedback throughout to ensure you are able to facilitate it correctly to the intended benefits.

Always remain on the safe side - for your sake and for your participants' also!

Required:
- Enough labels to get people into groups of 6 - preferably the labels are on little hats so that the people who are labelled do not know their own label (sometimes I use post-its stuck to foreheads but this does not work in warm sweaty conditions, sometimes paper tape/medical tape but have the same problem with sweaty foreheads, sometimes name badges tied on short strings under people's chins).

- Labels should be written (or use symbols) big enough so that other people can read them from 2-3 feet away.

- Labels suggested in Quick Team-Building Activities for Busy Managers: 50 Exercises That Get Results in Just 15 Minutes by Brian Cole Miller include "laugh at me", "disagree with me", "leader", "brown noser", and many more - *BUY THE BOOK*. I've also used Belbin's team roles for labels, as well as Belbin team role opposites (see Coaching with Belbin for details). Sometimes I just make them up based on the group and behaviours I have observed.
- Printouts for half the group of Stephen R Covey's The 7 Habits of Highly Effective People (*BUY THE BOOK AND READ FOR FULL DETAILS*) Young Lady:

- Printouts for half the group of Stephen R Covey's The 7 Habits of Highly Effective People (*BUY THE BOOK*) Old Lady:


- A digital projector and computer in order to show the group Stephen R Covey's The 7 Habits of Highly Effective People (*BUY THE BOOK*) Both Ladies picture:




- 15 minutes for the first "Label Game" session
- 15 minutes for the second "Believing is Seeing" session
- 15-30 minutes for open group discussion to ensure lesson properly understood and people back to normal

Step 1:
Explain the basics of the "Label Game" to the participants:
- Everyone will receive a "secret" (from them) label that they should not see before the end of the exercise
- No one should tell someone else what their label is
- The groups will be given 7 minutes to plan something (department party, a new fun game, who to choose to evacuate a doomed earth, survive for 24 hours in a desert/artic, etc)
- As the group discusses, the participants must proact/react to the label of the person
- By the end of 7 minutes, people will be asked what they think their label is, before being allowed to look

Step 2:
Break the group into sub-groups of 6, distribute and place the labels on each member so that they are unable to see their own label.

Step 3:
Start the timer! Remind the participants about good timebox strategies to ensure they succeed with their discussion. Help with time keeping.

Step 4:
Time up! Let the groups discuss amongst themselves and get an indication of how many people realised within 7 minutes of simple discussion, what label they were wearing! Usually >75% correctly guess or infer their label based on how others were interacting with them.

Step 5:
Open the discussion up to the whole group. Good questions like "How did it feel to be treating people according to their label?", "How did it feel to be treated according to a label that was not visible to you?", "What about the labels we're treating each other with continuously in the day to day work?", "What are the dangers of labels?", "What are the pros of having labels?", "How do our labels affect us?", "Labels versus Job Title?" and see what thoughts and feelings are provoked by the group.

Be strict with your own time management as there is still the second session to run!

Step 6:
Get people to become 1 group again, this time split them down the middle.

Step 7:
Without making it obvious that there are 2 different pictures being given out, distribute the "Young Lady" above facedown to half the group, and distribute the "Old Lady" above facedown to the other half of the group.

Ask the participants to turn over the picture and stare at it for 30 seconds, and then to put it away. Help them with timekeeping and ensuring they're focussing on their own picture only.

Step 8:
With the pictures away, turn on the projector and show the group the "Both Ladies" picture.

Step 9:
Ask the participants to stick their hands up if they recognise the picture. Now ask 1 "random" person from the "Old Lady" group what they see. Then ask 1 "random" person from the "Young Lady" group what they see.

Step 10:
Now ask the whole group to raise their hands those who see an Old Lady? And then ask those to raise their hands who sees a Young Lady? Act confused and ask how is it possible - surely they're looking at exactly the same, unmoving picture on the screen - how could it be that people are seeing different things? And then ask who sees both an Old Lady and a Young Lady?

The groups are usually quite fun and energised by this time so allow them to discuss and try to resolve the different perceptions they have. People will come up to the screen and start tracing out the different curves, arguing, getting frustrated, getting amused and slowly all or most of the group will eventually see both pictures. (as an aside, what does it mean if someone is unable, even after a lot of help, to see both ladies?)

Step 11:
Now explain it the way Stephen R Covey does: "It's not logical, it is psychological!"..."the way we see the problem IS the problem!" 

Step 12:
And now ask similar questions of the Label Game session. Ask how this kind of knowledge, this insight might have changed how they approached problems in the past, and how they will approach problems in the future? Are the problems restricted to work problems, or are "people problems" also now more approachable? And so on.

Before running this session, I strongly recommend buying both books linked above and reading them properly for more many more details than I've summarised here. 

I find the 2 exercises even more beneficial for individuals I am coaching who attend, especially if they have already covered Belbin's Team Role Inventory TheoryMyers Briggs Type Indicator and Preferred Auditory, Visual or Kinaesthetic Communication Styles. For additional benefit, these sessions, run before coachees attempt their first feedback gathering from peers, also help to give people more self confidence in the collection, in the giving, and in the understanding of the content+emotion they receive from other people. We are all human, even if often it appears we are, or they, are not! ;-)


Tuesday 3 July 2012

My favourite coaching tools: Motivational direction discovery and visualisation to achieve

Caveats:
Some people reject/debunk NLP (Neural Linguistic Programming) in its entirety. I find some of it useful to know and to teach to others. I do this by skipping the whole NLP thing and just honing in on the particular tools where relevant - for example below.

Required:
A bit of time to chat through various situations

Step 1:
According to NLP: the New Technology of Achievement humans are motivated in 2 ways:
- TOWARD what we want
- AWAY from what we don't want

For instance:
- Going to pat the friendly happy dog
- Keeping distance/getting away from the angry aggressive dog growling and barking madly

Another way to think about these motivational directions:
- Toward oriented people are goal-directed (outcome focussed)
- Away oriented people are more interested in identifying and solving problems (journey focussed)

Step 2:
Of course, as is clear in the example, humans use both motivation directions depending on a variety of factors - eg environmental, experience, etc.

However, we also, due to the wiring of our brains according to the NLP model, tend to specialise in 1 direction of motivation more than the other, and hence use it in situations where really the other motivation direction is better. And this is where I find many people in coaching situations trying to make changes happen for themselves or for their teams, but just not succeeding.

Step 3:
Armed with the knowledge of motivation direction, we take a look at the goals and rethink what motivation direction is more in play. We do the usual things of listing the pros and cons of making the change...but it is still not enough.

Step 4:
Making use of another tool from NLP, I ask the coachee to describe the image of achieving each of the goals.

Goals that are not so important to the coachee, or are "away from" motivationally oriented are usually described in 2 dimensions, little or no movement, little or no colour, with some distance between the goal description and the coachee describing it - the coachee is an observer.

Goals that are important to the coachee, or are "towards" motivationally oriented are usually described in great deal more richly: 3 dimensions, sound, colour, movement, passion, excitement - it is clear the coachee is engaged in achieving the change. The coachee is part of the scenario.

Step 5:
Now that the list of goals, and the motivational orientation of each has been analysed, there is 1 more tool that NLP provides that helps people perform a change they do not really want to: The New Behaviour Generator.

New Behaviour Step 1: Preparation
Ask the coachee to focus on themselves, to settle in, find quietness and relax. Ask them to imagine another "them" who they are observing.

New Behaviour Step 2: Choose the goal / task required to fulfil the goal
Ask the coachee to select the task which is currently blocking the fulfilment of the goal.

New Behaviour Step 3: Imagine the benefits
Ask the coachee to imagine their imaginary clone reaping the rewards of performing the task.

New Behaviour Step 4: Imagine the clone performing the task, completing the task, and achieving the benefits

Ask the coachee to imagine their imaginary clone performing the task - going through the troubles, the problems, the challenges, and overcoming each one, all the while becoming more confident and beginning to enjoy the benefits of fulfilling the task / goal. And finally when the goal is achieved, observing how the imaginary clone is enjoying all the benefits and sense of satisfaction that is evident.


New Behaviour Step 5: Integration
Ask the coachee to imagine that the imaginary clone now merges with themself in the observer position. Some people hug to initiate the merging. Some people feel a surge of energy or tingling when this integration occurs.

New Behaviour Step 6: Planning
Now ask the coachee when they will perform the task for real, and followup!

Step 6:
Repeat for each of "away from" goals. I prefer to do this exercise only once per session as the amount of energy required from the coachee can in some instances be great.

These NLP tools do sometimes take a bit of practice to master. The key is "baby steps" and checkpoints full of feedback along the way. The key metric is the quantity and the richness of the description of the description the coachee provides. As coach you can suggest adding music to the scenario if it is missing, to enhance the colours or the movement etc etc to really help manifest the future desirable state. Some of my coachees have also benefited themselves by reading Rhonda Byrne's The Secret .

Monday 2 July 2012

Update on SEM

For those that are interested:
- Through May traffic (New AND Returning Visitors) to this blogsite tripled
- Through June traffic (New AND Returning Visitors) to this blogsite doubled
- Google impressions through June (when I started tracking those as well) have more than doubled
- Early days in July, but already looking on track to double again :-)

Thank you all readers and supporters!!

At the same time, my research with Twitter has come to an end for now - the Twitter disconnect from LinkedIn announcement on Friday seems like an opportune time to deactivate. In reality this site attracts far more new+real visitors (hang around and read for 4-6 minutes) via Google. :-)

My favourite coaching tools: Retrospective timeline cartoon

Caveats:

None. Getting a group to draw together, to make and convey meaning in story format by using the retrospective timeline cartoon pictures is an incredibly powerful team building activity. The retrospective timeline often raises team awareness, very gently, with humour, of something some of the team members are experiencing - eg providing feedback about a particular behaviour of one of the team members.

Required:

Large paper and markers.
20-30 minutes to draw
10 minutes to present and explain

Optional:

For distributed team members, the easiest is a way to scan/photograph cartoon contributions and email/upload to a shared space.

Step 1:
Simply give the materials and the instruction to the group. Part of this experience is to allow the group to figure it out for themselves - ie, less is more. A typical instruction is simply:

"Spend the next 20 minutes drawing a cartoon of a couple of frames that capture the key things that occurred during this past sprint/iteration/month/week/year/day"

As facilitator, you can suggest strategies for dealing with the 20/25/30 minute timebox (breadth first, depth second, breaking the timebox into smaller timeboxes, breaking the team into sub-teams after consensus is reached in the initial timebox, good-enough-is-good-enough, etc) 

Step 2:
Sometimes someone will attempt to dominate the effort - as facilitator try to ensure everyone is equally being heard and equally participating in the effort to decide what things to include, and how to depict them. Monitor the work effort and help the group meet the final outcome: a cartoon strip that tells a consistent story!

Step 3:
Something like the below will emerge when all goes well:

How And Why To Run The Retrospective Timeline Cartoon Example
Retrospective Timeline Cartoon Drawing Exercise

As agile coach I've seen and heard about many funny cartoons, and seen or heard of fantastic individual or team insights conveyed by using them!

One of my  favourites that I heard about had a character showing up in 2-3 of the frames and asking "What's going on?".

When the Scrum team was asked who this character was, it turned out it was the technical team leader who was also committed to 3 other projects and not really available to the team, and thus was actually detrimental to progress as the team had to keep bringing this "leader" up to speed and could not become truly empowered and self-organising.

Not really Scrum then! And this is a great awakening to help teams go through - many think they are agile or Scrum, but when they understand those 2 terms, and when they understand deeply the evidence in support of or opposition to, this can be quite shocking for some team members, whilst being the "I told you so!" moment for some other team members. You  have to be ready to coach for this situation and help each individual and hence the whole team successfully negotiate this awakening phase.

I suggest helping everyone with calm and focus in the current moment, and hope for the future to envision a future they all want to become the new current reality!

Thankyou for reading! I hope I convinced you to try with your team! It's really good stuff!

Friday 29 June 2012

My favourite coaching tools: Visual Individual - Squiggle Completion

Caveats:
None. You can do this for group work as well, and I have used it quite successfully for Agile Retrospectives.

Required:
5 minutes to draw
5-10 minutes to explain (per coachee/group member)
Paper
Pens/pencils/colours or not
Quiet space

Step 1:

Take the paper and draw a quick random squiggle on it. In a group everyone can draw a squiggle on a piece of paper.

Eg:





Step 2:
Pass the paper to the coachee, or in a group ask the members to pass to the left/right. Ask the recipient to look silently at the squiggle. Depending on the context, you can choose to ask a question for instance "How has this past week/month/year been for you?" or "How would you like the future to look?" or "What does success look like?"

Step 3:
Ask the coachee or group members to now complete the squiggle they have received as appropriately as possible to reflect their context or their answer to the question raised. Timebox this to 5 minutes - the results are more useful if cognitive thinking has been reduced and instead subconscious knowledge is accessed.

Eg







Step 4:
Now ask the coachee to explain their picture to you and/or the group. The insights from this exercise are extremely varied. Remember to make no judgements, nor allow any in the group to make judgements. Visualising knowledge is extremely subjective and it's up to the drawer to interpret along with guided questions eg: "What does that represent for you?", "That seems far away from this?", "Did you choose red on purpose?", "Who is that big figure?", "The waves seem to grow?" etc

The data gained from this coaching tool is useful for individual coaching plans - sometimes there is the discovery of a motivational factor or an anti-motivational factor. And the insights for a group who use this have a team building effect - especially when people take their masterpieces back to their office spaces with them and leave them on display. Especially if, over time, you use the tool a few more times for different or the same question.

Thankyou for reading! Let me know how your practice goes!

Thursday 28 June 2012

My favourite coaching tools: Free online wheel of Self

Caveats:
Like all self-assessments, especially with scales, assessing your Wheel of Self reveals different results depending on when it is completed and how you're feeling and what you've been recently reflecting on.

Requirements:
Internet access
Quiet space
15 minutes to complete initial assessment
5 minutes to transfer to the second wheel
15-30 minutes to discuss

Step 1:
Give this link to the coachee: http://www.new-oceans.co.uk/new/wheel2.htm. Encourage the coachee to be as honest as possible, and not to think too much - go with their first instinct. The more honest they are, the more they will get out of this tool. Again I think the best time to complete this assessment is in the morning, before work really starts.

Step 2:
When the assessment is complete, you will have a "radar chart" / "spider graph" of various aspects of life that most people find important (Health & Well Being, Personal Growth, Achievements, Work-Career, Friendship, Security, Energy, Self-Esteem, Fun & Recreation, Home - Family, Relationship, Finance).

Discuss what the results mean to the coachee. Do they think or feel they should strive for more balance or are they comfortable? What do they think the outcome would be if they were willing to reallocate some of the time they spending on an outlier activity to lesser area? What prevents them from rebalancing? Would rebalancing take a long time? What are the rewards? And so on.

Step 3:
Another way to represent a 12-segmented Wheel is actually the Zodiac Wheel. Whether or not you believe in astrology, or your coachee does or does not, the Zodiac Wheel actually clearly shows opposite pairings (Career vs Home, Mental Explorations vs Communications, Death and Regeneration vs Possessions, Marriage and Partnership vs Self, Service and Health vs Self-Undoing, Creativity vs Hopes/Wishes and Friends). Thus usually it is clear if you overscore on say "Career" according to the Wheel on http://www.readingsbylafaye.com/12-Houses-of-the-Zodiac-Wheel.html you will underscore on "Home" and thus it is quick to create a prioritised plan to shift towards more balance ASAP.

Using both these wheels together (by transferring the scores from the 1st to the 2nd) make for a very interesting view for your coachee to look at themselves and understand themselves better. A lot of the people I work with for instance spend more time on Career activities or Home activities - a tiny minority actually feel they have balance between these two. And the same with Creativity or Friends - very few people commit to quiet times for themselves to engage in creative processes and thus recharge a different aspect of themselves for a more fulfilling life.

You now have more material, and perhaps a simple prioritisation mechanism, to help the coachee with setting up a coaching plan.

Wednesday 27 June 2012

My favourite coaching tools: Csikszentmihalyi's Flow (psychology)

Caveats:
None for using, but please be sensible whenever thinking and applying a model of thought. It's all abstract and in that experiential space - nothing is perfect for everyone in every context.

Required:
This is a "chat through" session with a coachee or a group
30 minutes and more, dependent on the group's size and engagement
Read the wikipedia page http://en.wikipedia.org/wiki/Flow_(psychology) and be sure to click on all the segments in the picture which are links to a bit more detail which you will need to know and understand.

Step 1: I either draw something similar or show the coachee or the group the following image (available in the public domain from http://en.wikipedia.org/wiki/File:Challenge_vs_skill.svg)


Step 2: Most important - do not cast, nor allow any group member to cast, any verbal or non-verbal judgements! This is self-perception stuff, so with a group, as facilitator of constructive listening and volunteering of important "self" information, the session must be managed sensitively and sensibly.

Step 3: And as the picture is quite self-explanatory, especially having read the background reading available on wikipedia and other sources, the conversation is quite easy to have. I ask for examples of what tasks the coachee or the group members perform that are Low in Challenge Level, and Low in Skill Level.

I then ask for examples on each flanking side, 1 sector at a time (ie, Medium Challenge Level with Low Skill Level, Medium Skill Level with Low Challenge Level) until finally reaching Flow.

Typically the sectors before Flow are quite quick and easy to find good examples for, though it is always interesting for me to see how house/admin chores such as sweeping, filing, dusting move around between Apathy-Boredom-Relaxation. And the same for what kind of tasks such as public speaking, waiting for feedback from a client proposal, writing a proposal, move between Apathy, Worry and Anxiety.

Often teaching, managing and mentoring type activities appear in the Control sector.

And sporting, extreme sporting, and "breaking the ice" with someone that is liked appears in Arousal sector.

And then, the tough one is discovered, and the real soul and past experience searching begins: Flow.

Step 4: Helping identify tasks that represent true Flow state requires covering the information found on wikipedia, summarised here:

1.The person must be engaged with something that has clear goals in order to provide direction and structure (aka Vision)
2.The person must believe that they have a good balance between the perceived challenges of the task and their own perceived skills - they must be confident.
3.The clearer and more immediate feedback the person receives whilst engaged, helps the person get into this "super state" and then stay there for longer
 
Flow psychology provides a great tool for explaining the enjoyment people report when they embrace modern/agile software engineering practices like Test Driven Development, Pairing, Collaborative Design and more.

I have not read Mihaly Csikszentmihalyi's book Flow: The Psychology of Optimal Experience yet, but I find the graph he drew above incredibly useful when talking to people about their experiences of work - what they have really loved in the past, and helping them understand what they are experiencing currently. This tool helps provide some motivational energy to help people make a decision to try something new.

And for team building, this tool provides great insights into the kinds of work individuals really want to do, to feel alive, to contribute as much as possible whilst at work, to be themselves, and to be with others, contributing to team success based on capability and capacity rather than role.

I like bringing this tool into discussion with the results from Belbin (see Coaching with Belbin), the Free Strength Finder (see Coaching with Free Strengths Finder), the preferred learning styles VAK (see Coaching with Free VAK (Learning Styles Visual Auditory Kinaesthetic)), and the positivity ratio (see Coaching With Free Positivity Ratio Tool). Together they provide a couple of very useful views on people that allow for the creation of great coaching plans, team plans, and ultimately greatly enhanced self-awareness.

Thankyou for supporting! Let me know what you think!

Saturday 23 June 2012

My favourite coaching tools: Graphical Facilitation - Bikablo

Caveats:
None. Being capable of bringing life to notes by drawing, infographic creating or just simple graphically facilitation of ideas and information for self or groups is extremely valuable! Only, balance time drawing with time facilitating or engaging with the group members to ensure there is growth of the shared knowledge space. Some group members may find watching someone drawing for too long distracting. (this is feedback from a paired training session where my colleague was training whilst 1 was in the background capturing and marking up what he was saying)

I can't draw well. As someone said - with writing, or speaking, we're given a lot of feedback, and even though we may be poor writers or speakers we have to do it. Not so with drawing. We are born with the ability to make marks on things. Because of poor feedback at early age typically, those without strong urge or ability, usually make a conscious decision somewhere to not draw anymore.

But these days, where nearly everything is group/team work, the ability to draw "good enough" is becoming a really key and useful ability to have.

And then I found Bikablo - or rather a colleague of mine told me about it. And then suddenly I could (and still can) draw some the patterns I find most useful for the work that I do.

Required:
The Bikablo book: http://www.neuland.com/DE/facilitation-tools-jc4rdwszaiw/bikablo-6s5uy80465f.html (in German/English) which is also sometimes available from amazon here
A set of thin+thick coloured markers as per Bikablo recommendation - I prefer the Artline ones which are usable on whiteboards as well as being comfortable on flipchart paper!

Some/lots of time to practice beforehand!

Step 1: Practice, and then practice some more. Pick just a handful of useful basic shapes and 2-3 colour pair combinations that you like

Step 2: Slowly bring them into your sessions and grow confidence that you can draw, and you can draw well enough so that people actually praise your work/talent!

Step 3: Within a couple of sessions over the time of a few weeks or months, you'll be drawing extremely high quality session outputs that people will be asking to keep for themselves. Success!

Step 4: Always take photos of all your facilitated graphics and be sure to get them back to the group as soon as possible after the session! Done well, you will not need to type them up! Win!!


Friday 22 June 2012

My favourite coaching tools: 2 Axes Visual Shift Chart

Caveats:
None. Usually used with groups, but can be used for individual as well.

Required:
Piece of paper - usually A3
A different colour marker for each measurement point (at least start and end will be required)

Optional:
The neater you set things up, the better the result will look.
Eg, use a ruler for drawing the axes, reserve the black marker for the axes, draw a neat legend, etc

Step 1: Place the sheet in landscape

Step 2: Draw straight vertical and horizontal axes along the left and bottom sides.

I place the "feeling" axis as the vertical as it is useful to visualise whether a vertical shift up or down was happier/sadder, more enthusiastic/less enthusiastic.

I place the "knowledge" axis along the horizontal as there is less emotional expression required for knowledge.

In the example, which I used for Agile Awareness training purposes, the axis on the left is "Agile Enthusiasm" and on the bottom is "Agile Knowledge"

Step 3: Pick 4-5 indicators for each axis. It is sometimes very useful, depending on what you are measuring, to ensure there is no obvious "average"/"middle of the road" indicator in order to subtly influence people to make a decision on where they are, which helps for self-enforced consistency during training and afterwards also (see Robert Cialdini's Influence).

In the example I've used:
- Agile Enthusiasm: Terrorist, Unsure, Apprentice, Master, Apostle
- Agile Knowledge: None, Some, Lots, Expert


Before beginning the session, select 1 colour marker, and ask the group members to indicate where they are on axes. Sometimes initials are useful to help them remember where they placed their "X".

Sometimes, for some issues where I use the "2 Axes Visual Shift Chart" an anonymous "X" is better - eg helping a team go through Tuckman's Mourning / Adjourning Phase when someone has abruptly left the team.

Step 5: Conduct the training, facilitatory event or retrospective. If it is a multi-day event, decide if you want/need to reflect on shifts that have occurred each day by asking for updates at the end of every day.


Visual Charts Help Make Meaning In 2 Axes
Two Axes Multiple Quadrants Making Meaning Visually Of Deep Information


This example is for a 1 day training course, with measurement taken in the morning, and again at the end of the afternoon. The visual changes above indicate an increase in knowledge (horizontal shift) and/or improvement in enthusiasm (vertical shift) - overall a very positive result for the training I provided that day!

Thankyou for supporting! Let me know how it goes!

Thursday 21 June 2012

My favourite coaching tools: The Invisible Gorilla

Caveats:
None.

Required:
The internet
Environment or headphones in order to listen to the video
2 minutes to watch the video
A lifetime to think about the video after watching it

Step 1: Prepare your coachee's browser by going to http://www.dansimons.com/videos.html

Step 2: Click on the first video in the box and let your coachee watch

This video, and others that Professor Dan Simons provides on the above link, as well as a few more at http://www.theinvisiblegorilla.com/videos.html, highlight some very interesting things about how very real and/or very imaginary our world is to ourselves. And hence how complicated things get when interacting with others who are experiencing the same brain processes. This is a problem more of encoding than memory apparently as humans are much better at encoding "things" occurring near the core of our current focus than those on the periphery.

I first found references to this video in Karl Sabbagh's book The Hair of the Dog: And Other Scientific Surprises which contains a number of other really useful scientific surprises some of which I have incorporated into my toolkit.

Friday 15 June 2012

Another phrase I remember from Will Greenwood's motivational talk

Another motivational/team building phrase I learned from Will Greenwood's motivational talk in 2010: "The strength of the wolf is the pack, and the strength of the pack is the wolf"

See 100 things, 1% better for the other!

1 phrase I remember from Will Greenwood's motivational talk

In 2010 I was fortunate to attend a motivational talk by English rugby hero Will Greenwood. Apparently his coach at time playing for the successful World Cup Rugby English team, Clive Woodward, pulled a lot of key motivational and team transformational statements/visions together.

1 of the phrases I still remember clearly from the talk is: "100 things, 1% better"

Wellbeck's just scored in the England-Sweden game and 1 of the commentators has just said "the only way he could have possibly scored!"

Which reminded me of Gary Player's famous quip / response to a spectator's "That was luck!!" after sinking an incredibly long and complicated putt. Gary replied "You're right! The more I practice, the luckier I get!"

Back to "100 things, 1% better" - it really is easier to improve lots of things a little, than 1 "bad" thing a lot. And the results...Will certainly made it clear (and is apparently earning a good income as a motivational speaker these days!): SUCCESS! (aka VICTORY!)

See The Strength of the Wolf is the Pack, the Strength of the Pack is the Wolf for the other!

Thursday 14 June 2012

My favourite coaching tools: Belbin's Team Roles

Caveats:

Before I get into the details of the free Belbin Test: all my favourite coaching tools - free, online, or other - need to be applied with sensible and cautionary advice from statistician George EP Box: "all models are wrong, some are useful". I discuss this principle with individual coachees, teams and team leaders this before giving them homework or some brief presentation on Belbin's Team Role theory.

I also explain about the problems of labels, and how labels applied to people become truthes that get played out. (see Stephen R. Covey's The 7 Habits of Highly Effective People (UK) (or US) for further information)

There are a number of ways to apply the Belbin Team Roles theory, which all provide shades of correctness. All applications provide valuable team member role insights and can be quite usefully combined with team building activities or coachee plan assignments.

The easiest, and only sanctioned way to apply the Belbin Team Roles Test, is to go online to http://www.belbin.com and purchase the required number of tests for you and your team. The online Belbin test reports are generated and emailed to you. The assessments are fantastically detailed and provide plenty of material to help a team improve and to give team members insights into themselves as people and members of "this" team they are currently members of. I recommend this approach for excellent results!

There is an alternative free Belbin Test that also works albeit unsupported and to a lesser scientific and correct level:

Step 1: Read everything you can on Meredith Belbin, the history of the team role theory, the opposition, and the advocates.

Step 2: Especially make sure to read and understand the Belbin Team Roles
http://www.belbin.com/content/page/49/BELBIN(uk)-2011-TeamRoleSummaryDescriptions.pdf
http://en.wikipedia.org/wiki/Team_Role_Inventories
http://www.mindtools.com/pages/article/newLDR_83.htm

Step 3: Have your coachee read the above links as well. Or in a team context, I discuss the roles (Plant, Resource Investigator, Monitor Evaluator, Co-ordinator, Shaper, Teamworker, Implementer, Completer Finisher, Specialist) and many of the points from the 3 above links with the team.

Step 4: Now have the coachee or the team members self-select the order of the 9 Belbin roles as they see themselves. Not really surprisingly, people know from previous feedback over the years of their lives if they are extroverted or introverted; if they prefer analysing new problems or finishing off final details of things; if they like to delegate or prefer to receive direction; etc, etc)

Belbin Team Roles Are Preferences Dependent On Dynamics And Context

Step 5 (for teams): Have the team members then rate each of the other members' top 3 Belbin roles as they see them. Again, not really surprising, team members also know how their colleagues are and usually can educated-guess-place them in appropriate Belbin Team Roles - once they know what those roles are!

Each team member can now combine and collate the results for themselves.

Step 6: Evaluate with the coachee/every team member how much resonance they feel with the top 3 roles others have placed them into. Is there a match between self perception and team member perception? If not, how much difference on a scale of 1-10? In what ways can the coachee think to close the gap or to make their own self perception the reality? Perhaps more feedback should be collected and then a re-evaluation. Every situation is different and it is helpful to have loads more coaching and coaching tools available if and when required!

Step 7 (optional): If at this stage the coachee or team really wants to evaluate still further, an online free Belbin test is at: http://www.123test.com/team-roles-test/. It has fewer and less detailed questions than the actual Belbin test and I can't attest to the correctness of its results at the time of writing this.

Jo Keeler, from the Belbin Institute as posted in the comments below, clearly indicates this "free Belbin test" is an unsanctioned Belbin test (and therefore probably should be called something else!).

The Belbin Team Role is a very useful and powerful self-perception/awareness tool that is easy to grasp by those with less time or psychology foundation. In some respects it is not important that it is 100% accurate at this stage as it could be an illumination and/or reflection of how/who the person actually wants to be. Other feedback from the workplace, or from experiential team building, or training events will make the picture clearer for each individual and the team as a whole - leading towards a high performance team.

With more self-awareness of natural team role(s) placement, and the ability to sensibly apply the Belbin model to self and colleagues, opens up possibilities to understand more about the workplace and give insights into what possible steps to take to change it/oneself as required.

For the coachee, this view can be used as input to their coaching plan, to set some goals to acquire new skills and behaviours (eg a natural Plant who's ambition is to become a Co-ordinator) or wishes to improve their team's effectiveness (eg evaluating for a missing or under-represented role).

For the team or the team leader, balancing of Belbin team roles is key. Too many of 1 role or a total lack of a  role, causes the team to behave/perform in sub-optimal ways. Awareness of the team roles and the Belbin theory is useful to encourage people to acquire new behaviours if they're interested, to set SMART Goals to encourage different outcomes, and even to help influence the next recruitment opportunity.

Thank you!

Wednesday 13 June 2012

My favourite coaching tools: The Five Why's / 5Y's

Caveats:
5 Why's is absolutely simple and brilliant for multiple contexts - both for individuals and especially for teams and groups. There is 1 caveat - the answers provided to the different level of "Why?" can sometimes lead off-course or way off-course. Part of the craft of learning to apply the 5 Why's successfully is some critical analysis/reflection to ensure you get relevant answers at each of the "Why?" questions.

Simple Looking Effective Tool The Five Whys Helps Find Root Causes Of Issues
Five Why's To Find The Root Cause Of Many Problems


I am not sure where I first read about the "5 Why's". It could have been in a management textbook that also covered Ishikawa Diagrams AKA Fishbone/Cause-Effect Analysis Diagrams. Certainly I found Taiichi Ohno's Five Whys tool usefully described in Esther Derby and Diana Larsen's Agile Retrospectives: Making Good Teams Great and even more usefully described in Eric Ries' The Lean Startup: How Constant Innovation Creates Radically Successful Businesses).

This tool is deceptively simple looking and incredibly easy to get wrong.
Five Why's Explained As They Are Not So Easy To Succeed Without Practice And Reflection
Five Why's Are Not So Easy To Practice Successfully - They Require Practice And Reflective Learning


Required:
Paper and pen, OR Whiteboard and marker
A fault/mistake/problem/error that has occurred

Step 1:  Ask "Why did the fault/mistake/problem/error occur?"
            Answer "There was some reason in the some place that caused the fault/mistake/problem/error"

            E.g.
            Why did the presentation not work properly at the event?
            -> It was an MS Powerpoint 2010 version file and the computer was running MS Powerpoint 2000.

Step 2: Ask "Why was there that reason in that place?"
            Answer "There was something underlying that reason in some underlying place"

            E.g.
            Why did Daryl try to present his newer version on an older version computer?
            -> His laptop did not work with the room's projector

Step 3: Repeat another 3 times to get to 5 Levels.
            E.g.
            Why did his laptop not work with the room's projector?
            Daryl's laptop's video outputs were not compatible with the projector's inputs

Step 4: E.g.
            Why did Daryl not have a converter with him?
            Daryl did not call the venue in advance to check the supported interfaces

Step 5: E.g.
            Why did Daryl not call the venue in advance?
            Daryl was too busy and forgot

Five Why's Appear To Be Linear To Discover Root Cause
At First Glance The Five Why's Look Like A Linear "Drill Down" To Root Cause


Too busy to ensure a professional presentation? I think we need a new procedure ... but will it be about company employees who present at public events or will it be about company employees who are working on projects that are forced to work in crisis mode? Or...?

And I can imagine an alternate Step 3
A.Step 3: E.g.
               Why did Daryl not export his newer file to the older format to run the presentation on the older computer?
               Daryl was running late and too stressed to remember this feature existed

A.Step 4: E.g.
               Why was Daryl running late?
                Daryl left the office late

A.Step 5: E.g.
               Why did Daryl leave the office late?
               Daryl was doing some urgent project work that caused him to leave late

Perhaps we need those possible procedures above. Perhaps Daryl needs some management mentoring/coaching on his time management skills or his prioritisation mechanisms. Or on his confident knowledge of PowerPoint's features.

It is very important is that the underlying cause and/or location is queried at each level. Do some critical analysis at each response and ensure the coachee/team is drilling downward on a realistic path. Sometimes there are multiple paths to drill, spend the time and drill them all, especially until everyone is much more familiar with the tool, at which point you'll notice far fewer possible paths to drill down as people are better expressing the correct underlying cause and/or layer first-time.

The final Why often highlights a human problem. Typically a system improvement is the correct solution to ensure the human problem is not repeated. For individual engagements this is usually a training item and/or a couple of roleplay scenarios. For team engagements it could be training or a new procedure or an update to an existing procedure. Be on the safe side and read Four Days With Dr Deming - better yet get your coachee or team members to study it BEFORE they try to fix the wrong problem with the wrong approach (and accidentally make things worse).

Identify Root Causes Of Complex Problems With Five Why's Practiced Correctly
Five Why's Help Teams Get Through Non-Linear Complexity And Often Identify Uh-Oh Root Causes Rather Than Ah-Hah Enlightenments!


Done correctly, it is possible to produce a correction action or step at every level uncovered/traced that would ensure that not only the level's specific fault in this instance is not repeated again, but also to prevent similar class faults - which is a major win!

Thankyou for supporting! Let me know how it goes!

A smarter SMART for even better collaborative Objectives (including OKRs)

My favourite coaching tools: SMART Acronym Another Update