While Agile 2021 was ongoing in summer, I was doing an observation activity that I never got around to finish. I was organizing series of new groups trying out ensemble programming, and watching what they do. What I ended up with was material I just run into today, that I had titled "Behaviors for Hands, Brains and Voices".
If you have every been wondering what should you do when ensemble programming, this listing might be beneficial.
The Roles
We have established we have three roles in Ensemble Programming:
- Hands (driver) are on the keyboard and don't make decisions.
- Brains (designated navigator, talker, translator, pilot) is the current main decision-maker and uses words to enable hands to work effectively.
- Voices (other navigators) are everyone else who support brains in getting the work done by providing added timely, correct information.
Sounds easy, but looking at what people do, what are typical things people in these roles do? What are the behaviors we could observe and fine-tune to get our group working really well together?
Behaviors for Hands
- Ask clarifying question on what to type
- Write/Do intentionally something the Brains did not mean to model correcting
- Write slowly to encourage thoughtful navigation
- Out of two ways of doing what the Brains ask, choose the one you think is worse to see the ensemble's reaction
- Listen to the Brains carefully and do what requested to your best ability
- Listen to everyone and ask the Brains to make choices when you recognize multiple requests
Behaviors for Brains
- Give instructions to hands on pace they can consume
- Navigate on level of intent and drill in through location to details if you see no movement
- Choose a solution from the ensemble you would not have chosen and give it a chance to unfold
- Invite proposals on the solution or next step from the Voices before deciding where to go
- Listen to the Voices making proposals and help the Hands choose what to do
- Navigate on high level of abstraction focusing on reviewing direction and implementation and make space for voices to improve end result
Behaviors for Voices
- Make an observation about the application and point that to out to others
- Make an observation about the group working together in the moment and point that out to others
- Notice someone trying to make a point and support them in getting the space
- Notice someone not engaging an invite them to contribute
- Categorize what you want to say as say now (you need to hear this as it changes what we do to be right), soon (you need to hear this on this thread of conversations) and later (I want to say this but it can wait as long as I remember)
- Raise hand to indicate you want to say something but it isn't urgent enough to interrupt
- Propose a better way of doing what is being done right now
- Ask a question that improves focus and gets the ensemble moving forward
- Recognize need to talk about how we work and propose a retrospective discussion
- Offload as post-it on a shared wall your ideas of next activity the ensemble should focus on
- Make quietly notes of bugs the ensemble isn't seeing to come back to them soon
- Propose to make a shared note on the shared computer for documentation / group synch purposes
- Correct small mistakes like typos after giving the hands (driver) a chance to correct at time fitting their writing style
- Point out possibility of passing-by cleanup or test
- Point out possibility of cleanup before changing the area
- Invite group to brainstorm solutions
- Invite group to choose least likely solution to be implemented first
- Point out to group if we are not doing what we agreed to be doing
- Point out to group if we appear to be doing what we agreed but not important
- Suggest changes in how the current work is done, e.g. "could we test in another browser / with another data sample?"
- Directly speak to the Brains to help them improve their navigation