Sharing Concerns

When you have something on your mind that you want to share with others, their are skillful and not-so-skillful ways to communicate:

"Don't you ever do anything on time?"

"Why don't you fill out tickets for your defects?"

"How am I supposed to understand this mess?"

"Why am I always the one that has to write all the documentation?"

"If you weren't so lazy and got off your rear it would only take an hour to make this enhancement."


A Technique for Sharing Concerns

Sometimes we are reluctant to share our concerns because we anticipate that others won't understand or that it will just cause an argument.  Here's a method for informing others of your concerns in a way that will make it easy for them to understand and increase the likelihood of finding an agreeable resolution.


1. The first piece is the observation of whatever triggered the speaker's current state of mind. Observations are empirically verifiable, not subjective opinions. We do our best to state our observation free of any evaluation: "When I see spelling and grammar errors in the comments in code I'm reviewing ..."
(Not: "When I see poorly written comments...")

2. (Optional) The second is the effect the event had on the speaker or the speaker's interpretation of what is observed. We do our best to take responsibility for our own assumptions, reactions, etc. This step is optional and may be omitted. "It takes me longer to understand what the code is doing" or  "I assume that the author didn't spend enough time proofreading their work."
(Not: "You should care more about the quality of your work.")

3. The second is the speaker's feelings in response to what is observed. We do our best to identify an emotion, sensation or state of mind that is free of thoughts: "I feel annoyed and irritated...."
(Not: "I feel I should require everyone use a spellchecker.")

4. The fourth is the unfulfilled need that is generating the feelings mentioned. We try to identify as closely as possible a universal need or value, or at least a desire stated in positive terms: "because I want it to be easy for me to comprehend code I'm reading so I can be productive."
(Not: "Because I don't want to maintain lousy code.")

5. The last piece is to invite the other person to assist you in devising a strategy that can meet everyone's needs, or to make a request that provides the listener with something concrete and achievable that would meet the speaker's need. "Do you have a minute to brainstorm a way that I won't waste so much time figuring out spelling errors in comments?" or "Would you be willing to run your comments through a spell checker before you commit your code? "
(Not: "Would you pay more attention to writing good comments?")


This method is variation on a model available at  http://www.cnvc.org



Scenarios (rate: good, ok, or poor)

1. Instead of calling Sam a "lazy slacker" he attempts to be more diplomatic: "I noticed that you haven't done any work yet.  I feel annoyed that other people have contributed, but you haven't; everyone should be doing there part. Is there some reason why you haven't had time or is there something about our project you don't understand?"

2. A developer finds code she is responsible for has been modified by someone else without filing a defect report or a change request.  She angrily accuses the other developer "You need to start following the change procedures!"

3. "Dude, don't put Unicode characters in files you submit to Subversion.   It makes Windows users unable to use the repository."

4. During a code review one reviewer comments "It looks like the cyclomatic complexity of this method is greater than 12.  This makes the code hard to read.  I would appreciate it if your code complexity stayed within our design QA standard of 12 or less. Can I help you fix this?"

5. One developer habitually turns in work late.  The manager brings this up: "Fred, we noticed that you have not been getting your work in on time.  Could there be other things going on that may be hampering your work?  Would you be willing to re-evaluate what you can do for us and possibly try to make this class a higher priority?"

6. A developer shares with his teammate: "While reading the Revision Log, three times in the last week I found myself having to look at the actual diff of the code to see what changed because the commit messages didn't tell me what I need to know.  This feels like a waste of time to me. Would you be open to hearing some suggestions for improving your commit messages?"




Exercises

Rewrite each of the following communications so it follows the framework above.

1.  A tester creates a defect report that describes how to fix the defect but doesn't describe the steps to reproduce the problem.  The developer assigned the defect is unable to create a test to reveal the defect because of the missing information in the defect report.  In frustration, the developer confronts the tester "Why can't you fill out a defect report correctly?"

2. A tester, after finding a third defect in a single module, added a comment to the defect report saying "I'm tired of writing defect reports on this bug ridden piece of junk."

3. Getting up from the couch, Joe knocks over a half-full cup of coffee left by his roommate.  Later Joe confronts the roommate, saying "Stop leaving such a mess in the living room."

4. A team is developing an online card game. During a code walkthrough, the author explains his method for displaying card images by fetching the image from the server whenever that card needs to be displayed.  A reviewer complains "That's such a stupid idea, the performance hit will kill you."