Original Internal Post: March 2020
For the last few weeks a number of us in Engineering and Product have been participating in a Book Club – Specification by Example reading Specification by Example by Gojko Adzic. In this past week’s session we talked about the concept of achieving a “shared understanding” of a problem.
One can simply parse the two words “shared understanding” with relative ease and conclude that a shared understanding is when two or more parties discuss a problem/topic and those parties have an equal or specific understanding of the problem.
The 70% Theory (which I’m coining) is that when a conversation starts, there is a likely outcome that the information presented and immediately understood between 2 parties is roughly 70% of a problem. The goal of the two people having the conversation is to elaborate with examples (concrete and discrete) to raise shared understanding from 70% to as close to 90% or more.
We often take for granted whether we have a true understanding of a problem. For example, I may send an email to one of my teammates regarding concerns about the assignment of another team member to a project. I may try to articulate my concerns in the email. My teammate might write me back and say they have it under control.
Do I have certainty that we have a shared understanding? There’s a good chance we might. My concern might be about related to schedule conflicts of another project that my teammate doesn’t know about and I failed to communicate it. She might derive my concern is over a skill gap issue and have nothing to do with my concern.
While the example above is somewhat weak and obvious. I’m using it to illustrate a point. We often fail to realize that there is information that is known that we often fail to communicate. There is information that is unknown that needs to discovered. There are implications to information that need to be evaluated and discussed. That last point might not be too obvious to most people. We will come back to it later in this blog.
The Game of Telephone
As a young engineer, I was taught that so much of my work was precedented in my ability to:
- Derive more complete specifications from the known (decoding the unknown).
- Identify, isolate and mitigate risk at the interfaces and integration points.
- Measure more frequently with the goal of eliminating/cutting less frequently.
- Increase my confidence in a solution using the scientific method of exploration and testing.
I often wrote very detailed design documents with elaborate specifications. I might spend 5 to 20 business days writing a document which I spent 30 to 90 days capturing notes from interviews and research.
Often those interviews involved talking with external and internal stakeholders. My stakeholders were usually representing other stakeholders. Communication streamed in one direction. It passed through a chain from person to person. Most of the time it would hit the mark, but a good number of times I found myself iterating back and forth. It was like a daisy chain or game of telephone.
A good system engineer, product manager, designer, etc…learns not only to ask questions, but to use examples to clarify. These examples have to be concrete and discrete. They are not effective when they are abstract and generalized.
The first phase in working with stakeholders is for these product representatives and stakeholders to come to a shared understanding. This is first of what could be many “shared understanding” between parties when addressing a business problem(s) and goal(s).
The game of telephone doesn’t stop once the stakeholder and product representatives come to this first shared understanding. Next the product representative(s) needs to articulate the problem(s) and goal(s) in some declarative form. The daisy chain continues to one or more members of the delivery team.
The anti-pattern of “the telephone game” can continue or worst re-start if the next set of conversations are not given a chance to iterate with the use of concrete and discrete examples. Let’s talk about this more in detail…
The Technical Translation
When the product representative(s) meets with the delivery team to discuss a customer’s problem(s) and goal(s), we have to go back to the 70% theory. We may have a high degree of confidence that our needs analysis and requirements vetting stage addressed the 30% gap. In all likelihood we may have written an elaborate design and requirements specification that articulates all of this wrapped in a pretty little bow.
There are two problems that we have put out there. First is that the delivery team is dependent on the product representative(s) to bridge the communication gap and accelerate the shared understanding of a problem. Reading a specification, set of emails or Jira tickets likely will only get the delivery team part of the way there. You might be the best and greatest author. It is safe to assume that this new set of conversations has a new baseline of 70%.
We have to ensure that there is a shared understanding between the next parties involved. I recommend that teams use a requirements or specification workshop to discuss known discrete, concrete examples to better understand the problem/goal at hand. Assume the documentation can be enough to present 70%. The workshops are effective at bumping that score to maybe an 80% or 85%. What will happen at those workshops are exercises in referencing and deriving more examples. Examples simplify the process of learning and understanding.
Getting to 80-85% is great, but it’s not complete. This is where teams need to be able to work together collaboratively to fill the remaining gap of 15 to 20%. I use the word collaboratively, but what I’m really intending to call-out is how we address the two points I made above “…information that is unknown that needs to discovered. There are implications to information that need to be evaluated and discussed.”
Workshops can be used to address and articulate the information that is known and present a forum to review and create examples to convert the “unknowns” into “knowns” in order to have a more thorough shared understanding. The workshop can also be used for elaboration on scope that the delivery team may present back to the product representative(s) that wasn’t discussed or considered. This might be a technical detail or a business risk that was overlooked in the first set of discussions with the stakeholders.
The workshop often leads to a technical discovery session. Remember that product delivery folks (engineers, designers, analysts) are pretty analytical. They generally need time to process information and come back with questions, ideas and concerns. This workshop → discovery loop helps fill that remaining gap through evaluation and more discussion.
Taking This Back to Your Teams
There is a lot of information to digest in this post. While encourage everyone to read Specification By Example, the cliff notes might be best served by spending an hour to watch this video.
The key take-aways from this blog:
- With any conversation the goal is to achieve a shared understanding.
- Shared understanding comes from iterating back and forth using concrete and discrete examples.
- It’s our responsibility as product representative(s) and product delivery members to iterate on discussions consistently to obtain a shared understanding.
- We can’t just be order takers if we want to be effective product makers.
The next sprint you start where you are accepting new work, whether that be a bug or a feature, make sure to iterate back and forth with the product representative(s) until you both have a shared understanding. Assume you only have 70% of the information. You might find that you have more. You likely might find that you have less. Don’t assume you have it all. Engage in conversation…challenge assumptions…use examples that are concrete and discrete…agree as representatives and delivery members that you have a shared understanding of the problem.
I would be remiss if I didn’t reiterate the visual above. Examples truly elaborate meaning to requirements and specifications. Those examples should become discrete tests. Those tests are used to verify the requirements.
Think about that lifecycle of examples → requirements → tests the next time you work on a bug or a feature.