In “Ensemble Programming: Tips for Software Teams to Survive and Thrive,” I discussed my experience with ensemble programming. The idea of performing ensemble all the time can seem overwhelming.
One way of gaining the benefits without having to go all in is to use it in specific instances when it really counts. In this article, I provide five tips that any team can adopt.
1. Start a Large Feature Together
When adding a new feature to the workstream, the team should work on creating the initial design. Let them build a workflow diagram or a discovery tree together, identify the architecture at a high level, and implement the initial contracts.
Once they have a sense of how things need to work, they can split off and work in parallel.
Takeaway: Working together fosters cross-team knowledge sharing, having a common understanding of what’s needed, and for making concerted progress quickly.
2. Mix Expertise
When implementing a wireframe or making large UI changes, for example, pair or ensemble with the designer, if available. This shortens the feedback loop as you make code changes and gain feedback at the same time. Also, I find CSS extremely challenging, so when I get help from the designer to make things pixel perfect, I save a lot of time and know that what I’ve built is what they wanted.
Takeaway: By having team members with different technical backgrounds work together, they make progress more efficiently.
3. Share Knowledge
Every person on the team has their own unique set of software development experiences, thought processes, and ways of approaching feature development and troubleshooting. One way of sharing knowledge across the team is through rotations of pairing sessions. For every feature or set of features, pair with a different team member. I’ve found I learn so much from each person I pair with.
I’ve also seen knowledge sharing through good documentation that captures information not normally known by looking at the codebase:
What are the gotchas with certain third-party libraries that should be known?
What are the latest patterns that the team has adopted, for both feature development and software testing?
How does information flow in the app? This can be done through the use of sequence and workflow diagrams.
Takeaway: Documentation is a way to perpetuate knowledge and reach the masses.
4. Shorten the Feedback Loop
When coordinating with a few different people regarding a topic, I could chat with them individually, especially if they don’t know each other, working through asynchronous communication and potentially delaying responses. Instead, I can create a group call aligned with a given topic. We discuss the different aspects of the topic together and make decisions on the fly. Oftentimes, this sparks additional conversations on cases that might not have been considered if I were talking with one person alone.
Takeaway: Having everyone join a call and make the decisions together is an efficient use of time.
5. Institute a Support Hotline
Ensemble programming allows team members to have immediate access to the skillset of the more knowledgeable team members — those who know the code base, the technology or the more intricate aspects of the application logic — because they are on the call with them.
Teams that don’t apply ensemble programming can still achieve this. As long as teams have a channel that is frequently reviewed and team members provide responses or assistance in near-real time, an individual does not experience downtime or long-running blockers.
Takeaway: Near immediate feedback allows progress to be made and people can still keep learning.
In Conclusion
Ultimately, we need to find what works for each team and give the team the ability to make decisions and pivot when needed. It is also important to note that what works today may not work tomorrow. It is our job as software professionals to find the best solution for the current problem and be adaptable to solve the next.