Managing constructive disagreement

I am a big fan of constructive disagreement as you may have noted from a previous entry Working with sceptics to new practices.

To understand why you need to see how we usually consume information. For example, if you come across the statement:

Alcohol boils at 82C

What is the chance that you will stop whatever you are doing and confirm this fact?

Now imagine if you were in the middle of an argument with someone about which temperature to set your distiller, they say 78C you say 82C. Now, what is the chance you will actually take the time to research on this piece of data?

You see, arguments help us kick in our reasoning, Hugo Mercier and Dan Sperber in their paper Why do humans reason? Arguments for an argumentative theory state:

Our hypothesis is that the function of reasoning is argumentative. It is to devise and evaluate arguments intended to persuade. Reasoning so conceived is adaptive given the exceptional dependence of humans on communication and their vulnerability to misinformation.

Now obviously being in the middle of a disagreement is no fun, in this entry, we will be looking at what I think are some good practices to manage profitable disagreements.

What is the history of the team

Every team has a history. Sometimes you find yourself in a situation where some members of the team have nothing but vile for their colleagues. You can usually tell by the thinly veiled contempt remarks being thrown around.

In this kind of situation, no argument is worth even pursuing, your focus at this point in time should be in fixing the broken relationship.

It is no use trying to establish who is right, simply focus on forgiveness and the need to cooperate before anything meaningful can be done.

Keep calm

People generally have two natural conflict management strategies. One camp can be described as conflict seekers the other as avoiders.

The seekers have no qualms about speaking out their minds while avoiders will seek to preserve the relationship.

Personally, I am an avoider, I prefer it when everything is going smoothly and see no need for an argument for arguments sake. Yet I understand always avoiding conflict is the route to becoming a doormat.

It is imperative you understand your own disposition as well as your team members’. In this way, you can manage unproductive behaviors when they rear their ugly heads.

From seekers you can expect:

  • Public ridicule or insult of the other party
  • Shouting over the other decisions
  • Strong arming

From the avoiders you can expect:

  • Storming out of the meeting
  • Agreement without commitment (worse than disagreement)
  • Disengagement

Furthermore, don’t let yourself get lost to anger. Yes, it usually gets everyone in tow but at the cost of psychological safety.

Have some ground rules

You can not manage disagreement by fiat. Even if you get everyone to agree with you, what you now have is compliance not commitment. Even worse, you can find yourself dealing with a full blown mutiny.

Most developers are already sticklers for doing things right. Thus when there is a point to be made, avoid mystique about where you are coming from.

Focus on the process of arriving at decisions rather than the decisions. There is a reason rule of the law works better than the wisest of kings

Some sensible ground rules would be:

  • Don’t interrupt a speaker
  • Don’t use the phone or laptop as the other person is speaking
  • Always respect meeting times

Maintain participation

A disengaged individual literally sucks the energy out of the group. It is simply more effective to have the person not in the room at all.

I find one of the greatest joys in this world is intellectual communion with peers on matters of substance. I believe as long as you keep the conversation meaningful, there will be participation.

With that said, some people just don’t do well in big groups. In particular, you may end up with a situation where only the ideas from extroverts are brought to the fore and argued out.

To bring in the more silent introverts, you may need a different form of participation, say by having people either split up into small groups of two or three to discuss or write out their opinion on a piece of paper and send it to the front.

How do you deal with disagreement within your own teams? Talk to me in the comment section below or on my twitter @jchex


Questions I always carry in my backpocket


At some point in your career as a developer, you will come to a fork, you will need to decide whether to continue majorly on the technical path or go into management.

If you do choose to go into management, you will come to notice you very quickly lose touch with the finer details of software development. It gets very hard to remember all the vim key bindings when you rarely fire it up.

An even more insidious problem is the fact information more easily flows down the organization than up. To illustrate this point, imagine a scenario where you as the manager come across a problem, would you have some second thoughts at reaching out to the developer responsible and having them fix it? Let’s flip it over, if you are the developer, would you report issues especially ones you know you may be the cause of?

With time, you find yourself operating somewhere in the cloud out of register with the realities happening within your own team.

I have come to find questions, are a useful tool to bring you back.

In this entry, we will be looking at some of the questions I always keep in my back pocket when walking into any kind of meeting.

Would you mind telling me more about why this is true?

In his book The Discoverers, Daniel J. Boorstin writes:

The greatest enemy of knowledge is not ignorance, but the illusion of knowledge

As a technical manager, you will tend to confuse the familiarity you have with the product with a true understanding of how it works. Thus when a discussion is going on, you don’t bother to truly dig into what they are talking about.

By asking the question stated above, you are able to get more clarity on the problem. It works better if you compliment it with the question “Who else has some insights into this”. Then you are able to see even more viewpoints.

Have you considered this option?

Given my technical background, at times, I do have some contributions to make to the discussion. The problem is you may end up having an opinion which you have offered up for discussion being interpreted as a decision.

This is especially true for senior-level managers such as CTO.

To counter the effect, offer the contribution as a question. This seems to soften the need to comply. It points out that your ignorance maybe in knowing the answer or is it not even knowing the problem being tackled in the first place.

In this way, you support thoughtful disagreements that explore and weighs people’s opinions in proportion to their merit with the end result of the best idea winning.

Is this discussion more interesting than it is useful?

No one likes two-hour meetings. Yet it’s very possible to get into this spiral especially when having a discussion on which technology tool or process to use.

Like moths, developers will get attracted to questions related to newest and shiniest technologies.

This is inherently good, after all, if you are not willing to abandon your tools and pick up new ones, your career in technology is likely to be short-lived.

Still, you don’t want to waste more than is needed touching on the nitty-gritty. At one point you have to decide to park the issue or just make a decision and proceed on to the next item.

What is the cause of that?

As I mentioned in an earlier entry Why you should never give off the cuff estimates making instant decisions is not likely to end up well.

When an issue comes up and you immediately start looking for a solution, you risk missing out on possibilities for a deeper understanding of the problem.

For example, The email service failed yesterday so key managers did not get their morning brief. Why? Because we exceeded our service limit on mandrill and there was no credit card to bill. Why? Because we did not expect to send emails to so many people. Why? Because we did not expect the organization to scale to this size.

From the series above, you can see not only do you need to solve the current problem. But all other problems which may arise from your assumption your organization will not scale or even other key providers who you may need to upgrade to a premium account.

What kind of questions do you normally carry in your own back pocket? Talk to me in the comment section below or on my twitter @jchex


How to communicate your release plan

A release plan is simply the dates you expect to deliver on major milestones for your project.

The beauty of scrum and its sister methodologies is there isn’t too much ceremony around this information.

Really, once you get past trivial projects, you very quickly realize what is to be built is not very well understood. Any plan you come up with that ignores this fact is guaranteed to become a source of pain in the future.

I see planning as a search for value, if well done, it helps us answer the most important question for any software team. What should we build?

Its a consideration of the features, resources available and important dates. This then illuminates a possible path for development.

I find it ridiculous that some people write a detailed document complete with dates and then think they are done with it all and no further revisions are needed. A release plan should reflect the current context. This means the format you choose should be one that helps you best express your most current thoughts.

In this entry, I will be looking at some of the formats I have found useful for communicating release plans.

Outcome buckets

In a previous entry, I talked about Why I don’t assign deadlines by date

For context here is how tasks bucketed into weeks would look like.

Well, as it turns out, planning your tasks as such is also really good for presentation. You can very easily get a sense of when you expect things to be completed.

Even better, the system communicates a level of uncertainty, because you don’t have an exact date for any of the tasks, you know it can be delivered on any date within the bucket and the plan would still be true.

For highly uncertain outcomes, you can increase the size of an individual bucket, say to 1 month. This communicates to all stakeholders there is much more risk to the outcome but we will get it done early if we can.


Maybe it’s my finance background talking, but I must say I love spreadsheets!

I find it to be one of the most powerful tools to establish coherence of thought within whatever your team is working on.

As part of our communication kit, spreadsheets allow us to play around with the quantitative bits of our plan. For example, if we need to model what would happen if a story point takes 5 days to develop as opposed to 3 days, it would be trivial to do so with the tool.

There is a perception in the business world anything on Excel is more serious than on a goofy tool like Trello. The perception is wrong but since its there, why not make use of it?

Gantt charts

A Gantt chart is a staple of the project management industry. They are highly visual and easy to understand. As you can tell from the fact am using a stock image here, I am not the biggest fan of them.

TeamGantt sample
TeamGantt sample


The problem I have with Gantt charts is it doesn’t communicate the uncertainty inherent in any software project. Furthermore, when a date changes, you don’t immediately see how such a change escalates across all other tasks and further how the other outcomes are now more likely to take more time.

Not all of it is gloom and doom, because of its visual nature, its far easier for non-techies to grok it over say a spreadsheet.

Furthermore, for a high ceremony executive, a Gantt chat will likely fit better with the rest of the reports they have to go through for the rest of the day.

How do you communicate your own release plans? Talk to me in the comment section below or on my twitter @jchex