It’s a Matter of Trust
Trust
Trust is the cornerstone on which many great things are built; friendship, marriage, teaching, programming.
Yes, programming - for example, when your team is all heads down, working on their own solo, you are trusting they are doing the right thing, and will communicate what the did, what they’re doing, and what they need help with. Not a great way to work, but prevalent nonetheless.
Pairing
Better than that would be pair programming, which involves one person at the keyboard handling the mechanics (the driver) and another person focusing more on the abstract (the navigator). After agreeing on the “why”, which could be a story kick-off, or just a simple conversation about what the goal of the current task is, then the pair should figure out who is playing what role, and when to swap roles. Those roles are the drive and the navigator. The driver should trust that the navigator will provide them with the high level “what”, while the navigator should trust the driver to handle the implementation or the “how”. Then both should trust that when the agreed upon state is reached to swap, they’ll swap. And if either of the pair is not honoring their agreement, then both should trust that the other will call them on it.
Mobbing
Another version of this is mob programming - where there are three or more people all engaged in the same programming activity. Again, trust is a major component. The person driving should trust that the mob will navigate in an effective, safe, and respectful way. Likewise, the mob should trust the driver to implement the mobs designs, provided at as high a level as the driver can understand and implement. If using a strict navigator, where only one person in the mob is the designated navigator, then the same dynamic as pair programming is relevant. The additional points of trust are in the driver to filter out the rest of the mob and focus on just the directions that the strict navigator provides, while the navigator should trust that they can ask the mob for help, and that help will also be given at the highest level, in a respectful, safe, and effective manner.
High Level Intent
Something that we’ve noticed when pairing or mobbing, is that, by having the navigator express their intent at as high a level as possible, the driver is much more engaged. Instead of providing instructions like, “Hit Enter, tab over three times, do ‘less than’, ‘x’, ‘m’, ‘l’, ‘greater than’”, but “Ok, let’s make an xml tag”, the driver feels much more respected and actually needs to think instead of merely being an extension of the input devices. If the driver doesn’t understand the direction, or the intent, then certainly ask for clarification, but make sure that you, as a navigator, start at as high a level as you can, and only move down, incrementally, as the driver needs. Remember, even if it seems counter-intuitive, going slower now means going faster later.
Trust is key in many things. Software development, which is so very much driven by our interactions with one another, is no exception. Trust your team, trust your peers, trust the community, and help foster that trust through your own deeds.
We’re all in this together.