Note 05 Team Topologies
This chapter tired to explain below question .
Four fundamental type of teams needed to run modern software systems.
When run with effective software boundaries Bounded Context and team interaction and the restriction of these four teams acts as powerful template for effective organisation design.
1. Stream-aligned team
1. Its mission is to ensure smooth flow of work for a given stream.
2. It is the one of the core teams in the organisation to delivery value to users as quickly, safely, and independently as possible. Team should be are empowered to run independently. Since they are close to service/product they are creating they are most efficient to in reacting to system problems in near real time, steering the work as needed.
3. Service they provide should be through APIs, either for internal or external consumption. Other team should void interfacing with them directly. Team should provide API contracts, documents and other helpful artefacts which should be sufficient enough for other teams to consumer their services. In-fact it can be the measured as KPI for the their success.
4. In-order to efficently perform team require below mentioned set of skill sets and capabilities within it.
5. Stream-aligned team is NOT “Product” or “Feature Team”
Usually product or feature team are focused on end-to-end delivery of a feature or piece of software. But in this world of rapidly changing business requirement based on competition and customers need, we have to be more felixible. It is not just about delivering and handing over to operational/maintainance team anymore. It is about continuous process which include continuous design based on requirements. Hence this stream aligned team is long lived.
Expected Behaviour of stream aligned team
2. Enabling team
Why this team exist ? High performing teams are continuously improving their capabilities in order to stay ahead.Since steam aligned team focuses on the flow and delivering value to the business, we need to provide a way to keep their knowledge and capabilities improving, and this where enabling team helps.
Expected Behaviour:
3. Complicated-subsystem team
A complicated-subsystem team is responsible for building and maintaining a part of the system that depends heavily on specialist knowledge, to the extent that most team members must be specialists in that area of knowledge in order to understand and make changes to the subsystem for example complex legacy applications, mainframes etc. The goal of this team is to reduce the cognitive load of stream-aligned teams working on systems that include or use the complicated subsystem.
Expected Behaviour
Prioritise and deliver upcoming work respecting the need of the stream aligned team.
4. Platform team
Expected Behaviour
A good platform is “Just Big Enough”
Care need to be taken to ensure that platform always serve the needs of consuming application and service and not the other way round
Platform team should always focus on user experience and particularly developer experience
Good platform provides standards, templates, APIs, and well-proven best practices for Dev teams to use to innovate rapidly and effectively. A good platform should make it easy for Dev teams to do the right things in the right way for the organization; this applies to all kinds of product development, not just those involving software.
In all cases, we should aim for a thinnest viable platform (TVP) and avoid letting the platform dominate the discourse. As Allan Kelly says, “software developers love building platforms and, without strong product management input, will create a bigger platform than needed.”A TVP is a careful balance between keeping the platform small and ensuring that the platform is helping to accelerate and simplify software delivery for teams building on the platform.
The most important part of the platform is that is build for developers . Developers are its customers.
Platform should not live in isolation, there should be way to provide feedbacks.
Attention to user experience developer Experience such as How-to guides and comprehensive documentation (but not verbose), up to date, and focused on achieving specific tasks, not documenting every last corner and niche of the platform.
A good test of developer experience is how easy it is to onboard a new Developer to the platform.
Platform should follow software product management and service management techniques for good developer support.
The platform, therefore, needs a roadmap curated by product-management practitioners, possibly co-created but at least influenced by the needs of users (Dev teams).
The user personas will help the platform team to empathize with the needs, frustrations, and goals of typical users of the platform. Members of the platform teams will engage with customers (Dev teams and others) regularly to understand what they need.
Platform is not just a collection of features that Dev teams happened to ask for at specific points in the past, but a holistic, well-crafted, consistent thing that takes into account the direction of technology change in the industry as a whole and the changing needs of the organisation. A good platform will also serve to reduce the need for security and audit teams to spend time with the Dev team.