As a VP of Engineering, I work with 30+ software engineering teams, and from time to time, we work in troubleshooting their velocity problems. I've recently written about why most attempts to improve velocity consistently fail. Here I try to summarize the three mindsets that help teams to work in a way that optimizes for speed:
Finish stuff before starting new stuff
If you want to optimize for speed, you need to finish what you start before switching to something else. Teams optimizing for velocity should start the day looking at what is closer to completion.
What makes it challenging: working in big batches, switching priorities too often, interruptions due to quality issues
Global optimization instead of local optimization
Teams need to optimize the goals of their team rather than each member's outputs. The entire team wins when a team member completes a task and loses when they cannot complete it.
What makes it challenging: a culture that rewards individual contributions vs. team contributions, knowledge silos or gaps among team members, a team of specialists.
Generalists vs. Specialists
We need people who can be flexible in the types of tasks they perform. If our team is composed of specialists, they won't have the skills to jump around and tackle the pending work that's causing a bottleneck.
What makes it challenging: people too focused on their specialty, people not willing to do other tasks, lack of cross-training
A team committed to improving velocity will need to embrace these mindsets to constantly adapt to the natural variability of bottlenecks in the development process. Achieving these mindsets might involve a radical transformation in how teams or organizations operate.
Follow me on Twitter for more articles on troubleshooting software engineering teams' problems.