Ensemble Programming

Groups produce better results when they work together as a team. Ensemble programming involves bringing a handful of people together—not just programmers—to work on a single task. Information flows freely and almost nothing causes the ensemble to become stuck. Individuals can leave the group, others can join, and together the ensemble continues along, producing great results. A learning organization already recognizes the power and value of the ensemble.

Isn’t this mob programming? You might know ensemble programming by its other name, mob programming. In some parts of the English-speaking world, “mobbing” has become synonymous with bullying. While the term doesn’t conjure up those connotations with me, I’ve volunteered to adopt the metaphor of the ensemble, such as you would find in music or the theater: a group of people performing together, growing together into a team. If you’re looking for mob programming, then you’re in the right place.

How It Works

Ensemble programming brings a group of people together—not only programmers—to build part of the product. Learning organizations favor this approach, because it results in greater free-flow of critical information, quicker convergence to common understanding of the product, and encourages everyone on the team to work to a higher standard of quality.

How do we do it?

The details can vary, but I think of the core practice like this:

  • A group of people, as few as 3 and as many as 8, come together in the same space—virtual or physical.
  • The ensemble agrees on a task and discusses what it means to have finished that task. They begin with the end in mind.
  • Someone takes the role of driver and someone else takes the role of typist. Everyone else feels free to fulfil the ensemble’s remaining needs. The roles rotate through the group during the session.
  • Sometimes we rotate roles based on a timer and sometimes we rotate roles based on completing various moves. The ensemble agrees on how they’ll work for this session.
  • The typist takes control of the keyboard. They act as a kind of intelligent input device, capable of interpreting somewhat vague instructions and turning them into code.
  • The driver directs the typist through various microsteps to make progress on the ensemble’s agreed-upon task.
  • The rest of the ensemble supports the driver, writing things down, doing research, answering questions, and offering advice when the driver asks for help.
  • Although the ensemble can rotate roles as they wish, I find good results when the typist ends their turn by taking over as the driver.
  • It helps to have at least one person present who can confidently and quickly answer questions about the feature that the ensemble is trying to deliver, in order to avoid them becoming stuck and needing to switch tasks.
  • We encourage members of the ensemble to take care of themselves, which means that they leave when they need to and return when they’re ready. The ensemble is usually able to continue even in the temporary absence of one of its members.

Facilitation Services

Sessions For Individuals

There’s another ensemble starting right now!

I provide public ensemble programming sessions through Pubmob. These sessions run for 75 minutes, have space for 6 members, and run periodically (sometimes regularly) throughout the year. Individuals looking to gain experience with ensemble programming or who wish to work on a side-project in a fun and engaging environment will find it enjoyable.

The current featured ensemble session is Evolutionary Design Without* Tests, where participants have the opportunity to focus on the evolutionary design part of TDD without stumbling over writing tests. When we don’t have tests, we feel pressure to change the design in tiny steps that are obviously correct. We try not to run the code until we believe we’ve completed a new feature.

Sessions for Companies

Your group might already know how to succeed with ensemble programming. Even so, some groups feel anxious about how to start, about whether they’re “doing it right”, and that distracts them from the important work that they’re trying to perform. I intend ensemble programming to help groups do their work better, not to become yet another thing for them to worry about. Accordingly, I support groups who don’t yet feel entirely comfortable with ensemble programming.

Sometimes I even work with experienced groups who merely need an outside facilitator to let them focus on a particularly delicate or difficult task.

Learn more about “What’s Not To Like About This Code?”

I attend to the meta-work so that the ensemble can focus on the work. While the ensemble puts their full energy into the task at hand, they can comfortably lean on me while I take care of the rest. I can coach them on the technical work while attending to administrative matters.

I create an environment in which the ensemble can work as though they have years of experience even when they are new to working this way.


Click here to see the current prices, check my schedule, and book your session. Relevant sales taxes will be added at the time of purchase.

“See One, Do One, Teach One” Package

If you’d like to develop internal facilitation skills for this kind of work, then book a 3-session package in which we follow the “see one, do one, teach one” approach.

Invite me to participate in future sessions if you feel you need help, such as a sudden significant change in the makeup of the team or in case of a particularly delicate or important task.