Thursday, 5 May 2016

My favourite coaching tools: No Time To Improve Agile Retrospective Cartoon

This is a short and sweet one that always brings a little smile to my lips (and some or many team members) when I bring it up in front of the "we're too busy with important stuff" teams during agile retrospectives, or preceding an agile retrospective due to too much resistance because "we are too busy"!


No Time To Improve Retrospective Cartoon
From http://i2.wp.com/ecbiz168.inmotionhosting.com/~perfor21/performancemanagementcompanyblog.com/wp-content/uploads/2014/03/tobusytoimprove.jpg
It seems no one is currently sure where the original is, or who created it. For more modern updates there have been plenty, just search Google!

Once we all get past the uncomfortable "Gulp" moment after this cartoon is presented, the team discusses what things are keeping the team members too busy to think about or to reflect or to introduce improvements to the way(s) they are working.

I might even throw in the original Albert Einstein quote: “If I had an hour to solve a problem I'd spend 55 minutes thinking about the problem and 5 minutes thinking about solutions.”

And/or I might put this one in front of the team to reflect upon: "Give me six hours to chop down a tree and I will spend the first four sharpening the axe." - Abraham Lincoln

If there are still some people needing deeper understanding of the situation they are in, I would introduce them to, and request them to, complete the Covey Time Management Usage Matrix (also known as self-study lightweight time and motion study). After this step is complete, especially including the lunch breaks, random web surfing, tea breaks, urgent phone calls and all the other really important things everyone does with intention or with serendipity at work as normal Business-as-Usual, then people are open to the message, and a humble inquiry!

Always respect the people you are introducing this too, and respect it is THEIR context and THEIR experience that matters, not yours, as external coach / observer / non-invested in the focussed business outcome! And remember why you are introducing this to them - something they are doing must be wasting energy in YOUR ?humble? opinion. Be careful and go gently!

Tuesday, 3 May 2016

My favourite coaching tools: The CIA Of Any Situation

This was taught to me a few years back by one of the team leaders I was coaching in agile mindset and approach to team and delivery. I am not sure where it originated as a consequence and searches on Google have been non-satisfactory.

Essentially, as the C-I-A was explained to me, every situation that one finds oneself in (as I explain to coachees), one asks upto 3 questions:

Question 1: Can I Control this situation?

If yes, then Control it (by using your management position or leadership)!
If no, then ask the next question,

Question 2: Can I Influence this situation?

If yes, then Influence it (by working with your network, expanding your network, orchestrating and asking your network for assistance in changing the situation)
If no, then ask the next question,

Question 3: Can I Accept this situation?

If yes, then Accept it (by opening your heart and open your mind and embracing it, so that your new personal reality becomes your new personality)
If no, then you have only 1 healthy choice - to leave the situation.

Failure to Accept the situation, and not leave this situation will cause you stress and all the negative consequences that stress brings. It will lead to negative behaviours and cynical comments leaking out, causing you to be mis-labelled further deepening the pygmalion effect and negative vicious reinforcement cycles. (see my post on labels being applied to people and more importantly how you can help the team "fix" the problem)

So you can use the CIA for personal coaching, and you can use it for team coaching quite effectively as well. I typically use it for helping teams understand if the potentially SMART-ifiable productivity improvement and/or happiness improvement actions they have proposed within the team's periodic Retrospectives are actually Achievable.

I did see several parallels in Stephen R Covey's excellent The 7 Habits of Highly Effective People where he discussed the 3 spheres that we live and work within as concentric circles. The Control Sphere is the smallest space, followed by the Influence Sphere, followed by the Accept Sphere. Basically we need to realise how little in life we do control, versus how much we think we control. An example he uses is the common illusion of control when driving in our carefully selected vehicle...and getting stuck in a traffic jam. We think because we can control our music selection, volume, air temperature and fan speed, we have control, but actually we have to accept that the dynamic system of the traffic on the roads is in control, we have very very little in reality.

I am planning on adding another 2 posts to extend the conversation and observations I've had about this CIA over the past 5+ years, so keep an eye out for the followups!

Monday, 18 April 2016

My favourite coaching tools: Zimbardo's Free Personal Time Perspective Assessment

Caveats:
A reminder that all my favourite coaching tools - free, online, or other - need to be applied with the sensible cautionary advice from statistician George EP Box: "all models are wrong but some are useful". Remember also that this is about "them" and their perception - not you! I make sure to tell individual coachees, teams and team leaders these things before giving them homework or some brief presentation on Zimbardo's Time Perspective theory.

I was fortunate in 2014 to attend a Professor Philip Zimbardo talk where he introduced (me) to several topics including the The Time Paradox: Using the New Psychology of Time to Your Advantage. With the Time Paradox, Zimbardo's research and theory focuses on Post Traumatic Stress Disorder (PTSD) sufferers and how the new theory of time helps them "catch up" with their new current reality. Another great book about PTSD and help for sufferers is from Peter LevineWaking the Tiger: Healing Trauma - The Innate Capacity to Transform Overwhelming Experiences - which explains somatic experiencing and was my first introduction to the 3 instincts humans face when stressed - the familiar "fight", "flight" AND the 3rd one "freeze". The research in this space is amazing and continuously evolving to help us understand us and to help those who suffer.

I recommend both books to anyone in any situation - not least because sooner or later you will experience 1 or more of the top 10 stressful events in life and having any knowledge to help you deal with them is invaluable. And also because modern life is so full these days of multiple minor stressors and we've learned that all the minors add up substantially even without a top 10 stressor.

And upon receiving some feedback on this tool, I believe both books are mandatory reading for any coach deploying this free test.

Prof Zimbardo is a wonderful speaker - if you get the opportunity to watch/listen/learn - take it! Stories from his (in)famous 1971 Stanford Prison Study (anyone who studies psychology or those who want to try understand how war atrocities are committed by normal people reads about the Stanford Prison Experiment) and his own early childhood facing near certain death in a hospital ward surrounded by other dying children (amongst other very memorable anecdotes) are incredible.

Here's a much condensed Ted version of his new theory of time talk.

I believe the theory can be applied to anyone no matter what their current psychological disposition is. I mean - who wants to live a half-step behind, or a half-step ahead of current reality? Who wants to be sure they are actually "living in the moment"? I reckon everyone, upon reflection, sees the benefit of being present, preferably present in the moment.

In my coaching practice - I meet a lot of people who want to know. They have deep questions about some past event or current lifestyle "choices" they seem to fall into habitually. They want to know if they are practicing enough mindfulness meditation. They want to know if they are truly self-aware. How does anyone but the Buddha know? Anyway, my clients - like most people - want to know if they're okay! (yes they are, and not because I suggested that they completed an online test!)

Step 1:
Go to http://www.thetimeparadox.com/surveys/ - print the graph manually and keep for later. Or better still, you can save it on computer, my Macbook has a great and good-enough editing tool in the form of Preview!)


Step 2:
Do both free online tests!
Step 3:
Manually plot the assessments on the survey graph paper or pdf

Step 4:
Discuss the gap between the "Ideal Time Perspective" and the coachee's results.
This is critical to get right - it is the coachee's understanding and interpretation of the gap that matters, and it is the coach's role to suggest options to improve ONLY if required.

With more self-awareness of their time perspective, the coachee opens up possibilities to understand more about their historical events that affect their perspective on their workplace as well as how their vision of the future pulls them to a good place or not based on their behaviours. From there it is possible to figure out the steps to take to change 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 new behaviours (eg too much Present Hedonism might be an indicator of too much "good time, live for the moment" attitude and not enough time invested in the future thinking or planning and from there creating).

Step 5:
Several people find watching The River of Time video - inspired by the time theory - calming, reassuring and helps them to slow down enough to catchup with current reality.

I recommend also to complete Johnson's free international personality assessment as well as the free Belbin test.

Additional Resources:
  • Philip Zimbardo - The Secret Powers of Time is a 44 minute youtube video that has about half of the content I originally learned during the talk I attended.
  • RSA Animate: The Secret Powers of Time is a 10 min youtube video that has less content again, is focused on the theory, and the infographic drawn real-time is wonderful!

Monday, 21 March 2016

My favourite coaching tools: Free International Personality Assessment from John A Johnson

Caveats
The elusive quest to find out who we are on the inside. There's no single answer. Or even a set of reliable answers that create a complete picture - not least because we are too complex, but also because we shift around all the time based on our context which also shifts around all the time.

But there are certain behaviours which do get more embedded and fire more repetitively that any others - personality - a great word! A personal reality :)

As usual with any assessment where you are choosing more of one thing and less of another thing, your free personality assessment will shift around (a little) based on your current and immediate context. So a good time to do it is at the beginning of a day, before anything begins to sway your free thinking and feeling.

Required:
Internet access
Quiet space
15-40 minutes

Step 1:
Give this link to the coachee: International Personality Assessment and ask them to do the full assessment in the morning before work really starts....or on the weekend, in the morning, before weekend chores or resting activities take over!

Step 2:
When the assessment is complete, you will have an assessment of the coachee across 5 broad domains and 6 sub-domains in each (again, statistician George EP Box's "all models are wrong, some are useful" applies!). A scoring of Low, Average or High does not mean a guarantee / permanent status of the domain's assessment. I like to think more of trying to evaluate the overall picture and then to evaluate specific incidents within that context.

You will have a free computer generated profile report - and you will need to manually either highlight all the text and paste into a document editor, or print to PDF!

You now have material again to either focus coaching goals and plans on making more use of the personality insights - all up to the coachee and your understanding of the person's needs.

This assessment is really great for all team members to complete and share their results with each other. The quick insights about each other helps the team figure out how better to work to each other's own interests and strengths - in some ways similar to Belbin's team roles and the Work imperatives but this is a lot more indepth personal and less on how to work well with others in the current work context.

Monday, 14 March 2016

My favourite coaching tools: Free work personality assessment

Caveats
Some folks seek to find the answers of who they are, why they are, and what work are they supposed to be doing. They're seeking confirmation of their talents. Some believe we should be using our talents to achieve our destiny. Others believe we should be developing new skills until they become talents that we were not born with - and that these new talents are the path to our destiny.

If you feel good about what you are doing and you feel good about how you are doing it, then you feel good! When the Who, What and How are all aligned and in the right balance, you have a greater chance of getting into flow.

Success encourages success. Flow is particularly important for changing your life as these new higher level experiences actually change the brain.

As usual with any assessment where you are choosing more of one thing and less of another thing, your free work personality will shift around (a little) based on your current and immediate context. So a good time to do it is at the beginning of a day, before anything begins to sway your free thinking and feeling.

Required:
Internet access
Quiet space
10-15 minutes
An email account you don't mind using for the assessment

Step 1:
Give this link to the coachee: Imperative - bring meaning and fulfillment to work and ask them to do the assessment in the morning before work really starts.

Step 2:
When the assessment is complete, you will have the Who, How and Why the coachee works in the organisation, as well as some insights connected to the archetype/persona that has been matched (again, statistician George EP Box's "all models are wrong, some are useful" applies!). And a couple of hints about all the other imperative archetypes/personas that could have resulted if you had answered a couple of questions a little differently - because you will have an indicator of how many other respondents have been similarly labelled!

And you will have a free online profile you can share with others - friends, family and colleagues! It's very well presented and highly interactive!

You now have material again to either focus coaching goals and plans on making more use of the work personality insights - all up to the coachee and your understanding of the person's needs.

This assessment is really great for all team members to complete and share their results with each other. The quick insights about each other helps the team figure out how better to work to each other's own interests and strengths - in some ways also similar to Belbin's team roles.

Tuesday, 17 July 2012

Stephen Covey

Just saw this via linkedin: http://www.usatoday.com/money/books/story/2012-07-16/stephen-covey-obituary/56251996/1

My condolences to all his friends and family members - he and his books have helped so many with so much.

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) 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.