Team Topologies, Skelton & Pais, 2019
First of all, I very much like Matthew Skelton’s and Manuel Pais’s framework for designing effective software teams:
Four Team Types: ¶
- Stream-Aligned Teams: Focus on flow and reducing dependencies.
- Complicated Subsystem Teams: Handle specific complex areas; supported by platform teams.
- Platform Teams: Provide services and tools to other teams.
- Enabling Teams: Act as coaches and investigators for stream-aligned teams.
Three Interaction Modes: ¶
- Collaboration: Close teamwork.
- X-as-a-Service: Clear, minimal collaboration.
- Facilitating: Helping teams clear obstacles.
Those team types and the interaction modes can express basically every inter-team interaction. And this alone is incredibly helpful, as is having a vocabulary to describe things. (Like Shape Up also did not re-invent the wheel, but gives simple principles in understandable terms)
However, I don’t like that they pitch microservices all the time, making them seem like the only solution to solving scale problems.
Anyway, here’s a summary of my notes: ¶
Organizational charts often fail to capture the dynamic nature of real work environments. Instead of being static, team structures need to be flexible and adaptive.
Teams should be long-lived to maintain stability and effectiveness over time.
A key concept from the book is the Inverse Conway Maneuver: structuring your organization as you want your software architecture to be. This helps align the development process with business goals.
Effective team design relies on the same architectural principles: loose coupling and high cohesion. This means minimizing dependencies and ensuring each team has clear, bounded responsibilities.
It’s also crucial to minimize the cognitive load for team members by simplifying and clarifying their roles.
Not all communication is beneficial, so focusing on defined team interfaces and avoiding excessive meetings that can hinder progress is essential.
In managing teams, assigning specific domains to each team and limiting the number of domains to manage complexity effectively is vital. Avoiding anti-patterns like ad hoc team design and frequent team member shuffling is also essential.
Cross-functional teams are recommended for their ability to operate independently and cover multiple functions. When scaling organizations, match team types to organizational and software maturity levels and visualize dependencies to effectively manage knowledge, tasks, and resources.
Continuous improvement is a core theme, with team topologies needing to reflect the current context and always aiming to minimize dependencies. By following these principles, organizations can foster a dynamic and efficient team structure that supports continuous delivery and operational excellence.