Throughout my career, I’ve worked in many industries and organizations from start-ups to large global enterprises, all struggling with how to communicate effectively about the software they were creating. While each had differences in when to communicate or whom to communicate to, there was consistency in the struggle to identify what information was important, and how to create a deep shared understanding of their software projects and products.
Imagine: At a medium-sized organization, 10 developers and 3 testers are gathered together in a meeting room too small for 13 people. The room is hot and stuffy but they don’t seem to notice. Huddled around a small table, everyone’s eyes are fixed on a whiteboard with so many lines, shapes, and letters it looks like the scribbles of children. It is noisy, people are pointing at the board, talking in parallel conversations. One person steps to the board and adds a large red arrow to the drawing while stating loudly “so this is the path the data entered through the mobile interface is taking to the database?” The room falls silent. A person meekly answers “yes”. Silence. Then someone softly adds “oh no!”.
The team had just identified why their system has corrupt data which is causing mass failure in production. But why had they not known this could or would happen? Why had they missed this in testing? This story for many will be familiar and painful. How do we move away from talking about the blame questions to how they identified the problem? The team couldn’t really understand how the system was operating or what was happening until they created the diagram of scribbles together to reach a deep shared understanding of what was happening in their system…by making the invisible visible.
In this paper, I’ll share my experiences with identifying important information and presenting it in ways that can deepen shared understanding. I’ll share stories about the challenges I’ve faced, what I’ve learned from both success and failure, and what I’ve found to be effective in communicating and reporting on the state of software.