Valuable Resources

Valuable Resource ?: “Communication is just as important as code”

Andrea Goulet recently held the keynote “Communication is just as important as code” at DotNetFringe 2016. I’ve been looking forward to this recording ever since I read about it on the Corgibytes blog. Andrea is also the creator of the Empathy-Driven-Development blog and has a podcast at legacycode.rocks.

I’ve written my summary of the talk and added some of my personal thoughts at the end. For a full transcript, read the Corgibytes-blogpost.

Summary

Introduction

Andrea starts off by introducing herself and her business partner, Scott. Scott is a high-school classmate and is, what Andrea says, is a stereotypical developer. She on the other hand is not your stereotypical developer. She talks about how she grew up with tech, but wasn’t encouraged to choose a career path in technology, and ended up choosing a marketing career.

Math class is hard. Shopping is fun. You shouldn’t go into computers

– Message to young girls of the day

When Andrea joined Scott at his company, Corgibytes, she decided she needed to learn to code. It was an overwhelming experience and she almost gave up, but Scott and members of the Ruby-community kept on encouraging her to keep at it.

Coding is a skill. You can learn it. We believe in you.

– Ruby Community

Communication-Definition

After being inspired by a talk on being a polyglot programmer, Andrea decided to get her feet wet and held a lightning talk on another language that developers should get into; English. Her message that communication is as important as writing the software in a programming language was well-received.

Communication is just as important as being able to write the software in a programming language.

What is communication?

As Andrea defines it, communication is rooted in empathy. Empathy is a thing to be acquired after listening and truly understanding where somebody is coming from.She emphasizes the fact that empathy isn’t something a person is born with, but rather a skill to be learned.

Empathy: Developed by listening & understanding applied by perspective taking

She talks about being an open-source developer and attending to the needs of a community through empathy. Also looking through the looking-glass and seeing what the community, or even yourself, will need in 6 months time.

She presents communication events along the axis Synchronous/Asynchronous and Obvious/Not Obvious. She emphasizes the value of putting more effort into the not so obvious forms of communication

  • Obvious / Synchronous
    • Meetings
    • Video Calls
    • Phone Calls
  • Obvious / Asynchronous
    • Email
    • Twitter
    • Stack Overflow
  • Not Obvious / Synchronous
    • Eye contact
    • Body language
    • Idle chit-chat
  • Not Obvious / Asynchronous
    • Commit messages
    • Naming
    • Pull request comments
    • Error messages

Communication: The artifacts of your ideas (not that different from code)

Legacy Code

Code that often is hard to work with since there often are so few communication artifacts around it.

Andrea brings up Michael Feathers definition of Legacy code definition: “Code without tests” and raises the point that it’s polarizing. This in turn leads to debates on testing, types of testing, test coverage. Instead she expands on his definition:

Legacy Code: Code without communication artifacts (of which tests are one of them)

She then continues with analogy of comparing legacy code to archaeology, where tests can be compared to bones. These tell you one aspect of the state of the code, but what about all the circumstances around how the code came to be?  This is where I understand a lot of the async, not-obvious communication comes into play.

Why this matters

She now moves to 3 reasons why any of this really matters:

Level up career

Examples Andrea brings up: Communication is essential to everything around code. Blogging, moving to a different role (ex: CTO). Communicating strategically vs purely technical. Open source work, like dealing with issues, pull requests, documentation, etc.

Build Trust

Trust as artifacts; Example of trust as a marble jar that you can add to over time. So each small interaction you have with someone builds up trust. These interactions are the artifacts of your communication.

Prevent Fires (not fighting them)

Communication is essential if you want to have a culture where you’re preventing fires instead of fighting them

A value they have at Corgibytes is “Calm the chaos“. The idea is that decisions should be made when you’re rested, calm, using the thinking mind. She believes that this is only possible when the culture is soaked in really good communication.

Patterns & Frameworks (How to get there)

Context switching

She defines concentration level when working on a task as inception levels on a scale of +10 to -10. Where values above zero represent strategic focus, and values below represent technical focus. At Corgibytes they use this scale to gauge whether someone is interruptible or not. +2 to -2 is interruptible.

With inception layers, the decision for disturbing someone gets moved to the person requesting. The person being disturbed can respond with what their inception layer and continue with their work -> Less overhead.

Shattering Glass

This is a communication technique where instead of answering questions or requests with “Well, actually…” you move to answering them with “Yes, and…”.

The example Andrea brings up is one of requesting a scope change to a sprint:

  1. Well, actually we can’t do that because..
  2. Yes, I understand that this is really important to you, and we’re in the middle of a sprint. Let’s sit down and have a conversation and learn about each others needs and figure something that works for both of us.

The example illustrates how the first approach doesn’t build consensus, whereas the second clearly is more inclusive and does build consensus.

Radical Candor (How not to sound like a jerk)

A communication technique about being able to phrase oneself in a way that conveys a message that aligns on two levels; Care personally and Challenge directly. When speaking this way you can truly convey your message to someone, and will more likely to be appreciated.

Radical candor is based in humility, helpfulness, immediate, private (criticism), public (praise), doesn’t personalize.

Source: www.radicalcandor.com

Communication is a skill

Communication is a skill. You can learn. I believe in you.

– Andrea Goulet

Book list

My thoughts

This presentation is packed with some really good material, and Andrea has a really nice presentation style that totally works. It’s really interesting to hear about her journey into software development and how she’s now paying it forward by helping developers embrace communication.

I really get what she touches on with Not obvious / Asynchronous communication. I’m currently working on a very distributed team, and we experience so much pain in this very area. I wrote a post on commit messages that’s quite relevant.

The Corgibytes inception level framework for context switching is just awesome, it really makes sense to just state your current level, and the other person can decide if it’s worth bringing you back out or not.

Shattering glass is something I already try to do, but I’m no where good enough at it, so continued focus there.

Radical Candor sounds really, really interesting. I didn’t really understand what exactly is involved. I think a few more examples would have been good here, but I’ll continue my search on radicalcandor.com.

The list of books are great resources. I’ve already read Thinking, Fast and Slow, here are some my notes.

I’m already sold on the value of communication for software developers. Anyone reading this blog probably know that as well. What I haven’t considered is how technical you can get with communication. How deliberate we can be when building trust over time to get to a place where communicating with radical candor is possible. Saving the next person to look at my code the annoyance of not understanding why things are the way they are. Being aware of how my words affect others around me, and how I can contribute to the team.

Please feel free to reach out to me directly or leave a comment bellow if you have any thoughts, questions or criticisms.

Valuable Resources are a collection of resources I’ve found valuable to my personal growth as a developer. I try to summarize with my interpretations and comments.