Are obvious things really obvious?
Bridging the communication gap - Gojko Adzik
Date: 8 March 2021
If you work in software development, I'm sure you have experienced this phenomenon where a bunch of people happily end the discussion of a new piece of work understanding everything, and weeks later, when the piece of work is "done" the happy faces are gone and the solution provided doesn't meet expectations or fully cover all necessary cases.
Day 1:
-Well, it's just supporting the same >>feature<< for a new country, it should be easy!
-Yeah, it'll be just adding a new entry in a registry and that's all...
Day 30:
-Why isn't >>this specific case<< working on this new country yet?
-Well, that was not in the requirements...
Classic, right? 😂
That's what we call a communication gap and there are many people trying stuff to prevent this issue from happening by implementing working practices (or rules) that they have heard of. And we already know that practices without understanding the principles and values behind them, won't get us very far. We'll be doing things we don't know why we do them for and get frustrated about this problem still happening as well as force others to participate in ceremonies that don't bring them any value.
How to prevent it
We can minimise the risk of getting something really wrong by doing our best to satisfy a set of rules. We assume we're already working in an Agile methodology, which won't prevent us from having communication issues - as shorter feedback loops also come with shorter deliverable timelines:
No Coding Monkeys
Don't prescrive a solution. Everyone in the process QA Engineers and Developers need to understand the business goal under a piece of work so that they can optimise in order to meet the target instead of just blindly implement a given solution which will come with misscomunication errors and not solve the original problem.
Build a shared language - Even if it feels very basic
When having a conversation, start by explaining or asking what people mean by each keyword of the explanation. It's fascinating how peple from different companies and teams call different things with the same word or same thing with different words. Having an ubicutous language is really important - One of the best product desiners I've ever worked with, would start by askinng and making sure we would all use the same word for different areas of the product before doing any work. That worked wonders! Don't feel afraid to ask too "basic" questions. Going form the basic will allow you identify inconsistencies that can get very expensive if they are ignored.
Communicate with examples
Examples leave less room for misinterpretation, they make us think harder and deeper are a avery effective communication technique. Way better than an imperative request. Imperative requests have hidden details behind the domain knowledge. As a domain expert (i.e: a nutrition team member at Tails.com) there are things that seem incredibly obvious to them but will hide details that can only be discovered by examples.
Run specification workshops
Having domain experts, QA and developers going through examples and identifying and analising edge cases, ensures that decisions are made by the right people, developers won't make asumptions implementing wrong cases and QA engineers will less likely miss details when running their QA tests.
Convert examples into test cases
Once we have examples, developers and QA engineers can build tests to either test-drive the implementation or to automate the e2e tests.
Create easy to read diagrams
Workflow and state diagrams, if kept simple, will also allow getting the key scenarios and edge cases cleared out and tidy, explaining rules for each decision.
The pinacle of efficiency
Gojko suggests some tools that allow having product owners or domain experts writing gherking format acceptance tests that would automatically run and validate or fail our release. I personally haven't got that far because it requires a lot of training and setup but I definitely see a lot of value on this.