The goal of software delivery teams is to deliver value, at least successful software development teams do this. Often, the term flow is used to illustrate the ability of a team to quickly deliver value. By way of an example, I want to provide a few patterns that interrupt flow – patterns that are common in most of the organizations we work with.
In many organizations achieving flow is much easier to interrupt than it is to establish. So what are the specific organizational challenges we face when we encounter impediments to flow and how can we create flow?
First an analogy. Bernoulli’s principle and equations in fluid dynamics are found in a variety of situations when liquid and gas are present. These principles are the reason why an aircraft is able to fly. Aircraft wings operate from air flowing over the top of the wing’s surface which is longer than the bottom surface of the wing. This faster air flowing on top of the wing generates a pressure differential that creates lift and propels airplanes into flight.
When impediments to flow are present we can reduce or even eliminate lift, leaving the wing unable to perform and obstructing flow through the system. Another interruption that can occur from the obstruction of flow is we begin operating too steeply. This leads to a situation called stall, which we can directly tie to what we see in many of today’s organizations. These interruptions to flow change the wing and contribute to it not performing well. In the case of a stall, recovery may be possible at great cost or not possible at all. Lets discuss some real challenges to flow in many organizations.
Impediments to Flow: Team Structure
A common problem we see is around team structure. A fundamental principle of agile is to create stable cross-functional teams. This creates the correct shape for the wing that improves flow. The familiar forming / storming / norming / performing loop that all teams experience represent an improving wing design as they transition from forming to performing. Unfortunately, teams are often not formed to stay together. You know the pattern, form a project team and just at the moment in time that the team, or the wing, is performing well they are broken apart and new teams are formed for the next project. This creates churn, interrupts flow, and undermines the performance of the team. Once we have a wing that is performing well, leave well enough alone and bring the appropriate work to the team. This brings up a deeper topic around the importance of forming teams correctly which has been discussed by Mike, in Failure Modes of Team Based Scrum.
Impediments to Flow: Lack of Co-Location
Challenges arise when organizations are unable or unwilling to increase co-location of team members. I’ve seen patterns where an organization will split teams up just to get some cross-architecture or cross product discussions started. In one situation, component or product area teams were split so each team had one person from each area and created a situation where there was very little co-location. Though there are certainly collaboration techniques that can help, I compare this to the challenges you have when frost or ice appears on a wing. It will work but at reduced efficiency and higher costs (why are we burning so much fuel?). This may be unavoidable but just as airlines must invest in de-icing capabilities a lack of co-location will require an investment in better collaboration tooling and more rigor in software development processes.
Impediments to Flow: Non-Sustainable Operations
Wings are designed to function within a set of operational tolerances. If the aircraft operates outside of those tolerances then the integrity of the wing diminishes to the point of failure if the situation is not dealt with accordingly. Similarly, our teams have a natural cadence of delivery that is sustainable for the long haul. If they are required to operate outside of that cadence, they exceed the team’s tolerances for delivering quality work, then the integrity of what the team delivers diminishes. This may result in low quality, team member burn-out, and an inability to deliver.
Impediments to Flow: Lack of Direction
Smooth air creates an opportunity for a wing to perform at its best. If the wing is asked to perform in great turbulence then it will operate with less efficiency and could stall. Similarly, teams need to have a clear understanding of the problems they are trying to solve which creates alignment across team members and across other teams. A lack of alignment is similar to operating with great turbulence, the teams churn, have a lot of rework, reduced quality, and unsatisfied customers.
I worked with an organization once that had been working on a project for two months. When the company brought stakeholders into the room to articulate what the problem is they’re trying to solve, it took over two hours to achieve a shared understanding on what they’re trying to accomplish. I expect the teams that had been working for the past two months had created value but I suspect it was a bumpy ride with some frightening moments. A clear direction would have created better alignment and allowed the team to operate more efficiently, better flow.
Creating a Well Formed Wing
Improving flow will allow our teams to perform better, create more lift. Doing so is not something that happens by chance. Some things to think about to help your teams fly include:
1) Create the correct team structures, structures that allow the teams to stay together and operate well so that we can increase flow. And when we do increase flow it should be because the team understands the strengths and weaknesses of each other and they have a sense of performing together. Collectively they’re not the individual parts of the wing but instead they are actually performing together as wings in flight. Create smooth air and reduce churn so the teams can focus on delivering value.
2) Attempt to create co-located teams where possible. When unable to do so then make investments in de-icing such as better collaboration tools, increased use of video conferencing, and though more costly, increased rigor in your processes.
3) Don’t ask the team to operate outside of their tolerances for delivering well-working, high-quality code. Don’t break the wing. Understand what those operational tolerances are and respect them. Teams need to operate in a sustainable manner, at a pace they can continue to operate for the long haul. Don’t let them stall. Instead let’s have them perform well and deliver, as we need them to.
4) Let’s also create flow through alignment. We should be talking more about how we can create a solid vision and understanding of the problems we are trying to solve. We should be talking more about how we can frame the problem in order to obtain a clear understanding of what we are trying to accomplish. Let’s focus on providing the sufficient requirements and make sure the organization, in particular the product owner organization, is collaborating closely with the team, providing the team with the tools and the information they need to clearly solve the problems of their customers. Don’t push the team to work in turbulent air, which decreases their ability to perform and could cause them to stall.
I would love to get your thoughts on whether or not this analogy is useful. It made sense to me when it popped into my head but then again I have more things in my head that don’t make sense ;-)
Here’s to creating wings that have great lift and operate safely.