Crucial Conversations Book Review

I’ve been posting a lot about communication and safety recently and I want to give credit to the book which kickstarted my renewed interest.

Crucial Conversations is by Kerry Patterson, Joseph Grenny, and Ron Mcmillan. In the opening chapters the authors explain that a crucial conversation is any exchange where the stakes are high and emotions are running rampant. They describe how avoiding these conversations or handling them badly can leave lasting repercussions on our wellbeing.

Over the following chapters they describe how to recognise safety, how to reinforce it, and how to reach a positive outcome. It’s really strong stuff, in fact I’ve incorporated many of their ideas in my own style and recent talks.

The book isn’t targeted to a work environment, in fact many of the examples are close to home and personal scenarios. Asking for a raise or disagreeing with someone over a design choice will seem like small fry compared to some of the issues the characters in the book face.

However, I believe strongly that by using these techniques teams can communicate more effectively. By using some of the ideas Kerry and his fellow authors use to monitor safety in a conversation we’ll have better retros, planning sessions, and general collaboration.

If you’ve not read it then I strongly suggest you pick up a copy – it’s one of the few books I’ve rated 5* this year.

CCBook

Talent vs Hard Work

I recently read an article by Chris Brecheen, I follow his page on Facebook and his post about dungeons and dragons caught my attention on a slow Sunday morning.

In it, he discusses a D&D player with an unbeatable magic sword who saunters up to a dragon and, through lack of preparation, is reduced to a pile of ash. Meanwhile the team who have battled against ogres, orcs, and trolls for the last three years eventually manage to bring down the monster after several hours of hard fighting.

The message was that having “talent” in something (or at least believing you do), makes you overconfidence, brittle, and actually limits what you can achieve.

In his book The Art of Learning Josh Waitzkin discusses how children are given positive reinforcement in one of two ways. Either they are told that they’re really good at something, maths for example, or they are told that they worked really hard.

The difference comes, Josh explains, when they meet a challenge they can’t overcome. The kid who is told that they’re good at maths immediately assumes when they face a question they cannot answer that they are not good enough. The child raised to believe that they succeeded because they work hard has a different outlook, they believe that they’re stuck because they’ve not worked hard enough. One child will continue to work the problem, the other will assume it is beyond them.

Believe it or not I’ve seen the same thing in developers, some with fifteen or more years of experience. When a developer is faced with a bug they cannot solve, either they assume they are not smart enough (or, far more often, that they have not been provided enough/correct information), or they simply shrug and say they’ve not found the problem… yet!

This behaviour, in my mind is one of the key differentiators between a good developer, and a great one. The outstanding developers on the team will continue to look at a problem without frustration, continually attacking it from different angles until they reach the next breakthrough. Even if that victory is only one small step to resolving it.

So what can we do to encourage this kind of behaviour in our teams? Try thanking people for their effort, rather than their smarts. Understand that real success comes from hard work, not from a bolt of inspiration.

Also, one more thing before I put aside my soap box. If we want to continue to grow then throw aside any delusions of being where you are by being the smart one, you got there through work – just like everyone else. You didn’t inherit a magical sword or extraordinary talent. So make sure you’re not relying on it the next time you meet a particularly scary dragon!

Why is Safety So Important?

I wrote recently about safety and how I’d describe it, I gave an example of a developer who suspected that a particular approach chosen by the team wouldn’t work but didn’t feel confident enough to speak out and challenge the design.

In this post I want to discuss just how serious that lack of safety is. Beyond that lack of a warning a lack of safety can lead to bugs, disengagement, and even resignations.

If you’ve not already read it then I suggest picking up a copy of 5 Dysfunctions of a Team but Patrick Lencioni. It really is very good!

To back up my statement over resignations I want you to think of the last time you disagreed with your spouse, friend, or family member folder what to do one evening or weekend. Maybe they wanted to go shopping or redecorate a room. I want you to think about how you felt doing that activity and question whether you really gave it 100%

Not really being engaged is hardly unsurprising. Let’s say you wanted to see one film but you were talked into seeing something different. Are you really going to admit that you enjoyed it or will you secretly (it not so secretly) believe that your choice would have been better?

The point of this simple example is that humans struggle to commit to an idea while they still believe that their option would have been better. When we have joint design discussions if someone has an idea and doesn’t voice it or has concerns but gets shot down then they will never feel like their voice has been heard. They become disengaged from the end result, because they never wanted to do it that way anyway. It’s not malicious, it’s a defence mechanism because don’t want to admit that out way wasn’t better.

Only be encouraging all team members to openly discuss their ideas so we gain not just consensus, but buy in. As for staff retention, if your team member never feels bought into the work because they don’t feel like their view is listened to, how long do you think they will remain in that team?

What Exactly is Safety?

When I first heard about someone taking about safety in the workplace I assumed that it was part of an anti-bullying campaign, a Health and Safety initiative, or perhaps some huggy feely thing from someone in HR. It took a little while for me to realise that not only is safety everyone’s responsibility, it is perhaps the most important component of an effective team.

To try to illustrate what safety is I’m going to give you a fictional scenario.

I dropped in on the last few minutes of the team’s planning session. As their manager I’m not strictly required to attend but I like to join occasion to keep up to date with what they are working on.

One of the developers was up at the whiteboard, pen in hand, and he was gesturing enthusiastically at his design. The rest of the team nodded, some eagerly, others showing the fatigue so typical towards the end of a long meeting.

Seeing that the group were wrapping up I caught the eye of one of our senior developers. We had a 1:1 scheduled and I wanted to get started quickly so I wasn’t late for my next meeting.

A few minutes later, coffee in hand, he had just finished telling me about the new data access module he’d created for one of our legacy products. After giving him the appropriate thanks I shifted the conversation onto the upcoming work.

“So it sounds like planning went well?” I asked.

He shifted awkwardly in his chair, obviously not enamoured with the change in topic. “Yeah… but I’m really not sure it’s going to work.” He muttered “I tried something similar a few years back and it just got way to complicated too quickly, the code became unmanageable and we had to abandon the whole thing.”

My blood ran cold. There was a lot riding on the next piece of work. Deadlines, client expectations, the team’s reputation. Forcing calm into my voice into my voice I asked the most obvious question.

“Did you mention this in the meeting?”

“No…” he said “I didn’t think they’d listen to me…”

I’ve deliberately tried not to give extreme an example here. It’s all to easy to discuss nuclear reactors or operating theatres when taking about safety but that implies that the requirement to feel safe only matters in life or death situations. That’s not the case. The more confidence people have the better our teams will function at all times.

So, let’s talk about the problem here. The team has decided on a particular design for a piece of work. One of the developers believe that the solution is doomed to failure and has failed to share that concern. It’s very easy to blame the developer here, or the guy holding the pen for not listening, but in truth it’s everyone’s responsibility to make sure that people feel they can contribute important, and often unwelcome views without fear of reprisal.

But where does this fear come from?

Unfortunately it’s hard coded into our DNA. Based in the same rational as our irrational terror of public speaking the fear of speaking out and voicing unpopular views is grounded in our history as a tribal species. Millennia ago, if a member of the tribe appeared weak, either because their view had been successfully challenged or if they’d lost such a confrontation then they risked being ostracised from caveman society. We are programmed with a strong herding instinct not to challenge dominance or listen to viewpoints which may make us appear weak or incorrect. Unfortunately in the modern workplace these fears put projects at risk of failure.

Team members feeling safe enough to voice their ideas is crucial if you want your team to reach its highest potential. We need to build teams where everyone, not just those with fancy job titles or big egos feels safe to voice their opinions.

I plan to write more about safety over the next few weeks, however if you’re interested in learning more I highly recommend Leaders Eat Last by Simon Sinek and Crucial Conversations by Kerry Patterson.

But I’m Not In Customer Service…

I’m going to start with a confession before hopping on my soap box. I was recently copied in on a couple of emails going back and forth with a customer. I wasn’t overwhelmed by our responses, in fact there were quite a few things I would have changed, the information was accurate but it wasn’t conveyed particularly well. I was about to get involved when I had the thought “But I’m not in customer service…”

All I can say is that I’m extremely glad I didn’t say those words out loud, as soon as my internal monologue had paused for breath I realised just how little sense it was making. We are ALL in the business of customer service!

In most corporations we’re split into various teams, often with complimentary skills. We are then given goals and objectives to complete. The majority of my time is spent supporting my team and working with upcoming releases. On a day to day basis I don’t speak to our customers that frequently (unless we’re collaborating on a new feature or UAT obviously).

Does that mean I’m not in the business of customer service?

Does that mean that I don’t need to consider the customer?

Absolutely not!

Aside from the fact that it’s our customers who pay my salary as a developer the entire goal of my working day is to provide a high quality product to our customers. There are many parts of that, a good design, a high quality implementation, but also the marketing and support we provide to our customers.

If you were searching the app store and you found two equivalent 99p applications one with beautiful screenshots and another with bad grammar, typos, and a vague feature list which would you invest your money in?

If you were making the decision for a multi-million pound software investment would you rather work with the team who fob off your questions or the one one who can provide high quality answers?

Now, I’m not saying that we all need to move into marketing and join the OU’s customer service courses. But I do believe that we all need to remember that the reason our business is operating is because we have customers – providing a good service to them is in ALL of our remits from the developers to the accountants and everyone in between. Build your features with the customers’ frame of mind, write your email with the phrasing you’d like to receive and let’s not any of us mutter the phrase “but I’m not in customer service!”

Measuring your Support Queue

Last week I wrote about how we use a dedicated “SWAT Team” to handle the inevitable unplanned work which threatens to creep in and disrupt our sprints. This week I want to talk about how we measure our SWAT Team, what KPIs we use and how we know whether we are doing a good job.

There are hundreds of posts out there which discuss the merits of KPIs for developers and how the wrong ones encourage behaviour such as cherry picking or incorrect prioritisation. I agree with them entirely, that’s why it’s important that the measurements you do take should reflect the customer experience, rather than the team’s performance.

For example, counting the number of tickets solved would be a poor metric because only quick wins would be looked at. Equally timing how long was spent on each ticket would also encourage people to rush in order to get better stats. However, recording how long a customer waited (from raising a ticket to resolution) measures the customer experience – which is, after all what we should be more concerned about!

In my team we use two main statistics to measure how well we’re performing. The first is one I’ve mentioned before. Average Support Ticket Age is crucial for us because it places a numeric value on how long customers are currently waiting for our help.

The second metric we use is Cycle Time, this is the time between a Ticket being passed to the team and it being resolved. In other words, how long is it taking to solve tickets passed to us This is taken as an average of tickets closed over the last six weeks.

The reason we like these two values is not only that they give a customer’s perspective on our work, but because they balance each other nicely. If we measured Cycle Time alone then we’d get fantastic results by simply solving tickets as they come in but longer running and challenging tickets would be left behind. Equally by focusing only on the older tickets it’s likely we’re missing urgent tickets and quick wins which could be resolved quickly. It’s only by continuously improving both values do we provide a good service.

You’ll notice that we don’t worry too much about the volumes of tickets. I find this doesn’t actually matter, the number of tickets being raised varies from month to month, from customer to customer, and will change as customers leave and (much more ideally) join us. If the team is becoming overloaded with tickets then this will be highlighted in the metrics we already have (as we won’t solve the tickets as quickly). A measure of tasks in the queue is less import than whether the team is keeping up with the required workload.

A final point to make us where we start and finish timing. If you’ve ever read The Goal you’ll know that one of Eli Goldratt’s key points is whether you are measuring the right thing (he points out that efficiency increases do not necessarily produce an increase in profit). The decision you have to make with your KPIs (particularly when a ticket was opened) is whether to start your timer when the customer raises the ticket, or when it’s passed to your team. There is no perfect answer here, if you want to understand the entire customer journey then you need to look at Customer to Customer timings, however – if your team only plays a small part in that journey (as in our development team’s case as we have several support teams before us in the process) then your metrics will be less valuable if they include areas outside your control. Consider what you’re measuring, but never forget that you may only play a small part of the customer’s overall journey.

Hopefully I’ve given you a few ideas? Do you agree with my views? How do you measure the performance of your support teams?

Why Branching still has a Place in the Agile World

I’m sure every developer out there would love to have a single code base with builds which are automatically tested and pushed out to customers. However, let’s assume for a moment that you’ve not got a full CI system with triggered builds, automated testing, and thousands of automated deployments a day.

For the sake argument let’s say you’ve got some of these pieces in place. Perhaps you have nightly builds? Maybe even some unit tests! But if you’re like most of the companies I’ve worked with you still run manual signoff scripts and have a couple of guys who do the deployments, know every config setting by heart and can get your application to run in all kinds of new and innovative ways.

Despite what The Phoenix Project tells us deployments to customers are still a big deal and version management (finding a way to release bug fixes but not new features) is a fact of life.

If your customers are anything like mine they’ll be incredibly nervous about taking new features. They want lengthy UAT phases and opportunities to train their staff on new functionality. This may seem like Waterfall to us, but remember many of our clients have stakeholders in some very big business. In my industry (Health and Leisure) for example we have code freezes over the January period while New Years Resolutioners and marketing campaigns are at their peak. Very few businesses would open themselves up to the risk of IT failures during these critical times.

And yet support contracts and maintenance doesn’t stop. The busy times are when the software is really put to the test and we must be able to respond to any issue which may arise.

This is why we use maintenance branches.

Our job as developers and IT professionals is to deliver a good service to our customers. We need tools and processes to do this. Agile and Continuous Integration are two of those tools but if they don’t help us meet business needs then we should seek others which do.

My customers tell me that they want to be able to take patches quickly if required. That they want to be able to access fixes without the need to test and learn new functionality.

Techniques such as feature toggles help but in my view the only way to truly meet this need is to cut a release branch after each feature (or for convenience block of features) is completed. We usually use a minor version to represent this. Using this model we can support customers without surprising them with new functionality and continue to develop knowing that we can put out maintenance releases of older version at any time.

Controversial? Perhaps, practically over purity… I hope so. What are your views or release branches and support customers with on premise installations?