One of the most critical skills for a software developer is the ability to communicate a complex idea to other people. Whether another developer, a business analyst, client or manager, if you can’t get an idea across, lots of things get much, much harder.
That failed communication can prevent your project from getting funding, result in the wrong technology being chosen and, well, can make you look like an idiot.
For a variety of reasons, many developers struggle with this particular skill. For most, their college communication classes consisted of a semester or 2 their freshman year writing a few 2 page “response” papers and that’s about it. This can leave them completely comfortable digging through SQL dumps, but uncomfortable with non-technical people who have questions.
On the job, I’ve got a reputation as an analogy guy. In a meeting, when I can tell that one side of the conversation doesn’t seem to be understanding what the other is saying, I jump in and try to bridge the gap. Often, a really well stated analogy does so just right (though my colleagues will attest to my not exactly batting 1000).
After I’ve been at a gig for a while, this approach tends to catch on with other developers when they see that being able to get a complex idea across can make their day go so much smoother. Analogies are one critical piece of that strategy. However, 2 other pieces make up the complete picture of how I structure my explanations of complex ideas.
Depending on the audience, the ratios between the 3 change, but it nearly always requires all 3 to get the idea across.
Explanation
The approach that most developers seem to default to is to just plain describe the complex idea or concept. This often places the new bits in direct relation to other pieces. Often, this looks like a dictionary definition or a Wikipedia entry’s first paragraph and consists of a straightforward description of the technology or idea.
For instance, here’s the first paragraph of the HTML article at Wikipedia:
HTML, which stands for Hyper Text Markup Language, is the predominant markup language for web pages. It provides a means to create structured documents by denoting structural semantics for text such as headings, paragraphs, lists etc as well as for links, quotes, and other items. It allows images and objects to be embedded and can be used to create interactive forms. It is written in the form of HTML elements consisting of "tags" surrounded by angle brackets within the web page content. It can include or can load scripts in languages such as JavaScript, which affect the behavior of HTML processors like Web browsers, and Cascading Style Sheets (CSS) to define the appearance and layout of text and other material. The W3C, maintainer of both HTML and CSS standards, encourages the use of CSS over explicit presentational markup.
Example
A well-chosen example is almost always necessary when explaining something complicated. While the above explanation of HTML is accurate, and may be enough for someone who was just looking to fill in their gaps in understanding, a few samples often go a long way to clarify things. For our HTML topic, we could go on to say:
For instance, to make text bold, you surround it with <b> tags like <b>this</b>.
Analogy or Dramatization
Comparing the new complex ideas to something else is immensely powerful. There’s a reason that this is the part of my communication strategy that people latch onto and remember. That’s because the analogy is a bridge from something your audience DOES understand to the thing you’re trying to tell them about.
I won’t lie. This also makes it the hardest portion to come up with. Doing this well requires thinking like your audience and understanding where they come from. Good listening skills help out a lot here.
For most audiences, comparing to every day things like: household appliances, cars, retail stores, the IRS, etc. work out well. The better you know your audience, the more appropriate you can make your analogy.
For things like HTML/HTTP, I tend to put the components like web servers and web browsers into roles as people and have them “act out” the interchange.
The web client asks the web server, "Do you have a document called index.html?"
The web server goes into the back room and looks through the files and comes up with a matching document and hands it over.
It’s in a binder (the HTTP header) that describes the contents as being a text/html document and it’s got a Post-It note on it that says there were no problems finding it.
The web client opens the binder and reads the document before going to the whiteboard to draw out what the document describes. When it includes a <b> tag, he draws the text inside of it a bit darker, etc.
Sum Up
I keep finding that when I combine all 3, deliberately, I get WAY more nods of understanding. And, the feedback I’ve gotten is that non-technical audiences thank me for “finally” explaining complex topics in a way that they understand.
It’s worth thinking about and using the next time you’re faced with puzzled faces after you mention a term or technology.