People talking without speaking; People hearing without listening

Lyrics from “The Sound of Silence” by Simon & Garfunkel.

Actually, I like the rendition by Disturbed best, but that isn’t important here.

What is important here is that most people do hear without listening. Of course, it doesn’t help that so many people talk without speaking … especially on the internet (more about that later).

Are these distinctions without differences?

Talking is mutual communication and speaking is one way of doing that. The context of the song makes the distinction clear … communication without speech and therefore, presumably silent.

On the other hand, hearing – strictly speaking – is the purely physiological process of receiving sound. Listening means actively apprehending those sounds and making sense of them. To hear without listening is a different kind of silence – the silence of minds.

Soon, a new school year will start.  I will be doing a lot of talking both with and without speaking.  My students will be doing more than a little hearing without listening, but I will make my best effort to help bridge that gap.

There will be time for some sounds of silence in my classroom.  There is precious little silence these days … a different problem than what Simon & Garfunkel (or Disturbed) were indicating.

More anon …

Developing A Development Team – Part II

How does a group develop integrity – wholeness, cohesion, unity?  How does it become a team? Last time I talked about trust and shared values in accountability, performance, and communication.  Let’s keep drilling in.

There needs to be clarity on roles and responsibilities.  There is dynamism here … rigidly defined roles with rigidly specified responsibilities fail in a world where different people bring different strengths (and weaknesses) to the table.

Roles will – or should – generally define what the person with that role is expected to produce during different stages of the SDLC (software development life cycle).  The role imparts the responsibility to the person with the role.  Before a person is assigned (or accepts) a role, the person should know what responsibilities they are shouldering.

Senior engineering responsibilities include mentoring junior engineers … one problem with an ad hoc development team is that there is no sense of permanence … not that anything is really permanent these days … but there is no sense of continuity … no sense that things will continue on after our involvement has ended.

There also needs to be clarity on authority.  Team and project management generally rely on authority rather than persuasion to get things done.  A self-directed team will exercise that authority over its own activities … but that team needs to be above average before it is truly capable of self-direction.

Finally, what should be done about “social loafers” or “toxic team members?”  I want to spend some time on communication so “toxicity” is going to have to have its own blog post …

So … communication

A gelled team communicates.  That is probably a no-brainer, but you may be surprised at how little (or how badly) most people communicate.

Communication has 4 aspects:

  1. Transmission (w/ medium) – generally, in technology, speaking/writing … much more generally, it includes art, music, etc.  But we are engineers, not musicians … on the job, anyway.

2. Reception (w/ medium) – perceptually that is hearing/seeing, with luck (and some training) it is listening and reading with comprehension.

3. Cognition – the often neglected art of thinking before speaking and writing or while (and after) listening and reading.  You know you haven’t finished listening until you have reflected on what you heard … absent that reflection you never finish listening to what you heard.

4. Attention – focuses the mind.  You see (or hear) what you focus on … not vice versa

If your attention is focused on thinking about what you are going to say rather than receiving what is being said to you then you are hearing but you are not listening.

People are immersed – drowning – in an ocean of “communication” these days.

We get a tsunami of content – both audio and visual – from our environment.  But it is mostly noise with some few signals sprinkled in.

Signal to noise ratio measures the relative strength of the meaningful (signals) compared to the meaningless (noise).  The internet has a horrible signal-to-noise ratio. 

So … the real question becomes … what is your personal signal-to-noise ratio? 

Mindful communication encourages us to ask whether what we are about to share is “true, necessary, and kind” … we should add “does it improve on the silence?” If we could get some silence, that is.

Developing A Development Team – Part I

There is a reason that all-star teams “draw hard vacuum.” A team is not a collection of individuals.  If it devolves into that then you can stand back and watch it disintegrate … notice that word … dis – integrate … to lose cohesion or unity.  The loss of integrity. How does a group develop integrity – wholeness, cohesion, unity?  How does it become a team? 

Credit where due … I have drawn some of this from the website “thebalancecareers.com” where you can find some interesting blogs on business management and leadership;

To be a team a group needs to have (or develop)

Trust – mutual trust of the team members … if it isn’t mutual then it is a problem.  Different people have different levels of trustworthiness and … what I call “trustwillingness” – a person’s baseline predisposition to trust others.

There must be at least enough mutual trust so that people aren’t walking around with their backs to the wall all day.

An interesting article from June, 2009 by Roderick Kramer in the Harvard Business Review on their website – “Rethinking Trust” … he argues for “tempered trust”

“Salting your world with lots of small trusting acts sends a signal to others who are themselves interested in building good relationships … [, and decades of research by social psychologist Svenn Lindskold and others have proved that it leads to more positive interactions.] It works because it’s incremental (and thus manages the risks intelligently) and contingent (that is, tied to reciprocity). By taking turns with gradually increasing risks, you build a strong and tempered trust with the other person.”

When you think about it … tight-knit teams are all built that way … the individuals learn to rely on each other increasingly over time.  Over. Time.  This doesn’t happen overnight.

Besides the fact that it is just a group of individuals, this is one reason why all-star teams suck … there is no time to build a resilient level of trust.

Beside trust, the team has to have shared values … everybody needs to buy in, more or less, to common expectations of

Accountability; commitment discipline – we can advertise that our team has “extreme accountability” (it is in our corporate value statement), but if the team members don’t buy-in … it is just a despair.com poster waiting to happen.

Shared accountability for team success (failure) – the whole team wins/loses together.

Performance and communication – Clear expectations about the level of performance and how and how often the team will communicate. 

There also needs to be agreement – a consensus – on things like

How the team will make difficult decisions – difficult, as in, somebody is not going to get his way.  That somebody needs to already have signed up to accept the decision if/when it goes against him.  You know you have a gelled team when the wrong decision is made and the person who had the right idea (and has been proved right) feels badly.

How the team will deal with differences of opinion – civilized people (and some developers) know how to agree to disagree without it becoming personal.  Flintlocks at 20 paces is probably not a good way to moderate differences of opinion.  In an engineering environment, the proof is in the pudding (which means, I think, that there is whiskey in the cake).  It’s engineering, not personal.

How the team members will support each other.  Nobody left behind, right?  Read up on the Navy SEALs to get a sense of what it takes to form an elite team. 

With respect to training and team formation, the SEALs have an 80% washout rate … you cannot afford that, but if you are trying to build a top-notch team then you have to have the wherewithal to absorb a certain amount of tech churn as you let under-performers. 

Chances are good that you do not have that kind of wherewithal … in which case you are building a team from average performers that you generally won’t want to lose … unless they are way below average.

A Look At Development Teams

What does a productive, gelled development team look like?  What does any productive, gelled team look like? You may as well give up the idea of working on a high-performing team.  Unless you are willing to do what it takes to elevate your team’s performance.  And that might not be enough.

Even if you are willing to do what it takes, does everybody on the team?

A development team is not that different from any other kind of team.

Let’s face it, if a team is going to have a chance at becoming a high-performing team, it needs to have an overall commitment to excellence. 

On a sufficiently dysfunctional team, one person trying to lead by example or one voice exhorting the team to work smarter, harder, faster, better will be met with derision. 

If it is a manager calling for improvement it will be met with passive resistance (at best).

People have compared development teams to orchestras … or, better, jazz bands.  And some developers do like to think of themselves as … artistes …

but what is different about a development team, though, is that it is supposed to be building a working solution – it is more engineering than art – and that creates an environment that is more like an academic department than an orchestra …. or jazz band … or athletic team …

… and academic departments are never dysfunctional …

Depending on the type of project, the actual development team may be created ad hoc or pulled together from existing staff.  Or some combination of both of those.  Unless you are unusually fortunate, we assume the following:

Your team will be, on average, … average.  That means that – assuming we have a normally distributed population – 68% of the population will be within +/- 1 standard deviation of the mean.  The average.  It also means that 84% of the population will be +1 standard deviation or worse.

I am willing to be convinced that our population of developers is skewed … towards excellence, of course.  But the argument holds that you will not draw your entire team from the lofty reaches of engineering excellence.

The job is to take a generally average group of performers and build them into an above-average team.  It takes an above average leader to do that.

Many of the arguments for self-directed teams presuppose that the team is above average.  An average or below average team will fail at self-direction.

There are more than a few average (and below) performers out there who believe that they are well above average … or that they are owed self-direction. 

If you have the time, patience is a virtue.  The team should be allowed to start work as it sees fit – within bounds.  The team’s metrics will save you.  One of four results can be expected:

Metrics are not produced.  If the team cannot even reliably collect data and produce process metrics then it is clearly below average and incapable of self-direction.

Metrics show below average performance.  Is there a trend showing improvement?  If so then encourage the team and sustain their ascent.  If not then intervention is needed.

Metrics show average performance.  Is that good enough?  Again, is the team showing improvement?  Keep an eye on things and if performance slips, intervene.

Metrics show above average performance … pop a cork and celebrate … everybody wins.

Next time we will talk about building a development team.  What kind of group characteristics and dynamics need to be developed.

Version Control Part 2: A Version is More than Just a Number

The benefits of version or source control include: history, branching/merging, and traceability.

Sometimes the smallest detail can have an astonishingly large impact … and a version number is such a small thing.

Keeping track of small details tends to be something of a strength of computer systems. Tiny details … even ones that don’t seem to matter. You know what I mean if you have ever used a technical term slightly incorrectly in the presence of a dev-ops engineer.

Let’s consider the benefits of a version control system: history, branching/merging, and traceability.

  • History – complete change history of every file.
    • Every change made by many different people over the years.
    • Changes = creation and deletion of files, edits to their contents.
    • Should include the author, date and written notes on the purpose of each change.
    • Enables going back to previous versions to help in root cause analysis for bugs
    • Crucial when needing to fix problems in older versions of software. (If the software is being actively worked on, almost everything can be considered an “older version” of the software.)
  • Branching/merging – allow team members to work concurrently, but even individuals working on their own can benefit from working on independent streams of changes.
    • “Branching” keeps multiple streams of work independent from each other and provides the tools necessary to merge the work back together. In software, this helps developers verify that changes on different branches do not conflict.
    • To that end, teams adopt a practice of branching for each feature or perhaps branching for each release, or both. We have even adopted the practice of creating branches for correcting specific defects – especially when the defect touches many different parts of the system.
  • Traceability – tracing every change made to the software and connecting it to project management and defect tracking software … annotating the changes with a message describing the purpose and intent of the change – helps with root cause analysis and other forensics.
    • the annotated history of the code aids understanding what it is doing and why it is so designed – this helps developers make correct and harmonious changes in accord with intended long-term design … note that the design itself is a high-value knowledge product that ought to be versioned and tracked
    • this is especially important for working with legacy (in some cases, ancient) code and
    • helps developers to estimate future work with accuracy

It is a poor workman who blames his tools … but tool is only useful if used …

There have been some amazingly expensive failures in IT – even where versioning systems are heavily used. Aviation, for example. The Airbus A380 suffered from an incompatible software issue … but not the avionics (a portmanteau: aviation electronics):

The Airbus issue of 2006 highlighted a problem many companies can have with software: what happens when one program doesn’t talk to another? In this case, the problem was caused by two versions of the same program – CATIA (CAD software that is used for design and assembly).

The Airbus A380, one of the world’s largest aircraft, was a major European undertaking. The problem arose because two organisations in the group – Dassault Aviation and a Hamburg factory – used two different versions of CATIA.

The German factory was using an out-of-date version of CATIA and Dassault used the latest version. Not surprising since Dassault developed CATIA.

When Airbus brought two halves of the aircraft together, the differences in the versions of the same software system meant that the wiring on one did not match the wiring in the other. The wiring was incompatible and had to be changed.

The problem was eventually fixed, but only at a cost that nobody seems to want to put an absolute figure on. But all agreed it cost a lot, and put the project back a year or more.

Moral of the story: even the best version control system on the planet is not going to fix using incompatible versions of tools on the same project.

Which is also why our devops engineers are soooo … picky!

Version Control  Part 1

Version – or source – control is a best practice that tracks and manages changes to software code base. It is especially important for products that are going to be worked on – simultaneously – by many different people in many different places.

Once upon a time, in the land of Pixar, somebody did a “/bin/rm -r -f *” command … and deleted the entire “Toy Story 2” film while it was in production …

In the early days of computing “source control” meant not dropping your deck of punched cards … the first time I saw a grown man cry was when I saw a graduate student with his thesis program strewn all over the floor of the Computer Science building. Weeping. The first time that happened to you, you learned the value of having numbered your cards in the card deck … anyway, things are different now with software systems spanning 10s, 100s, 1,000s of files on multiple real and virtual machines perhaps scattered across multiple continents … but the more they change, the more they stay the same.

I came across the description of the Pixar recursive delete in a recent Quora post and I was astonished that something of such high value as a slam dunk money making animated film would be developed without version control … not to mention nightly backups with redundant off-site storage.

Those can be two things … version control and backups with off-site storage … but the version control itself often includes backups/off-site storage as a side-effect. A distributed version control system (e.g. the tool called Git) maintains a copy of the file tree in “the cloud” where it is typically mirrored and backed up daily as a matter of policy.

Version – or source – control is a best practice that tracks and manages changes to software code base. In my opinion, it should be used for any high-value knowledge product (like an animated film). It is especially important for products that are going to be worked on – simultaneously – by many different people in many different places.

A version control system keeps track of every modification to the product so that the present state of the product can always be constructed … and any previous state of the product can be re-constructed. For example, in most large-scale software projects there is

  • one team of people busily writing new code,
  • another repairing old code,
  • yet another writing documentation, test cases, etc.
  • The version control system makes it possible for them to all work on the same project with a minimal amount of stepping on each others toes.

Could you develop software – or any knowledge product – without version control? Sure. People do it all the time. They shouldn’t, but they do.

It only takes dropping your deck once … one instance of a “/bin/rm -r -f *” event … to spark an ardent desire for version control and a robust backup and recovery process in the hearts and minds of even the most footloose code slingers.

Fear of Improvement

Health and fitness coaches often have to overcome their clients’ resistance to improving. Teams can resist improvement as well.

How many people don’t improve because they are afraid of leaving the herd?

What is culture but the shared beliefs and values of a group of people … because we are talking about a culture of quality we should look into what it takes to move your personal culture to a higher standard.

I have a good friend who is a health coach and she told me about a client of hers that hesitated to make the first step on that “road to improvement” … because she didn’t want her SO to feel like he was a slacker for not getting his own act together.

Health and fitness coaches often have to overcome their clients’ resistance to improving .. not because their clients don’t want to improve … they do. But their clients are afraid that they will embarrass or antagonize their families and/or friends – those who are not improving … or even those who are actively, intentionally spiraling into the turf on their race to the bottom physically, mentally, and spiritually.

Note that this is often what they think might happen when they embark on a program of improvement. Note: if you think that your family or friends are going to resent you for improving then you want to consider whether your opinion of them is lower than deserved … or if you have actually received negative feedback from them because you are trying to improve (so your opinion is justified) then you need to consider what to do about the toxicity of your relationships.

Take one of your favorite recreational activities … do you want to improve at it? I like to play hockey … and chess … both involve checking and boards … but anyway, I want to improve at both of those. I will never be a professional at either of them – so I have no illusion that I could ever be “the best” … but I do want to become better at those activities. So I do the things needed to become better…

On a more personal level, improving physical fitness, losing weight, for example, can sometimes be perceived as a threat to those who may aspire to improve themselves, but lack the strength of will to do so. Those who perceive your desire for improvement as a threat may try to manipulate you into failure … so that they don’t feel badly about themselves.

OK, so how does this apply to quality – especially software quality?

Because software is a team sport, (Yes, all of you techy introverts out there … you have to interact with actual people to get the job done :wink:) … the team’s culture is a mix of the individual cultures people bring with them. A sports team is (well, it used to be) a strict meritocracy – the better you are, the better you make the team, the more likely that you will stay. Individuals on the team have to individually improve and help the team improve as well.

A team that is focused on continual improvement will have members who do not get into a defensive crouch whenever their work product or process is critiqued. Of course such critiques should be directed at the work product and not the producer … but unless your team has mastered the art of “egoless programming,” it is not unusual for code reviews to be perceived as an attack. And if that happens, you can watch your team not just fail to improve, but actively, intentionally spiral into the turf on their race to the bottom technically, productively, and culturally.

Quality Culture – Part 2

If a real culture of quality is one in which the individuals truly care about the quality of their work then it is important for the individuals to actually care. The organization cannot care more about quality than the individuals that make up the organization.

Before you sit back and wait for your organization to adopt a quality culture … look to what you can do on your own!

Last time we looked at a quality culture from the point-of-view of the organization; today we’ll focus on the individual – that would be you … and me.We work with a software system the production version of which was delivered with 2 different UI/UX standards. It is jarring. How could any self-respecting software company release such a thing? There are also buttons that when clicked, result in an error pop-up … even the most rudimentary testing would have shown these problems.

A culture of “it’s good enough” is hard to fight at the individual level. Quickly and carelessly “hacking” code and being rewarded for it because one is getting a lot done quickly creates an environment – a culture – where quality is not valued.

A culture is a social phenomenon requiring group interactions for its expression. The individual either replicates and reinforces the cultural norms or alters and modifies them. Here are three ways that you can participate in those group interactions:

  • Habit – formed in response to a long process of learning and adopting social norms
  • Imitation – where your behaviors copy those of the people around you, like a group walking together that adopts a common gait (have you ever walked “with” somebody who is oblivious to this?)
  • Calculated risk – the power to either strengthen or change cultural norms resides at the individual level, for it is this level where control over the cultural phenomenon resides to the extent that it can be controlled at all.

Digging deeper … what role does quality play in your personal life? Do you demand better from yourself even in – or especially in – your recreational activities? It is not (just) competitiveness, although, for me, there is that … It is a drive for improvement … a willingness to work on improving. If you believe that you deserve “better” then you are also obliged to be – or become – better … or work toward that.

So, perhaps you can take a calculated risk and ask the question: “How can we release this software to our customers when it so obviously ‘draws hard vacuum’?” Well, our release schedule says this has to go out this month. Why is the schedule more important than the quality of the product? Because marketing has promised a new release every quarter. But why would releasing a defective product fulfill that promise? Because …

You see what I did there? As an individual, you can bring the 5 whys to bear on high leverage situations. What if you don’t want to risk raising the quality culture of your organization? Well, why would you want to work in a job where you don’t care about the quality culture of the organization?