Questions about Team Topologies


Matthew says…

For some years I’ve been thinking about this stuff, and so when your book came along (and of course I watched your talk when we presented together that time) I was really interested to see how it aligned with the thinking I’d been doing. And the answer is that it absolutely does – but there was something I’d been mulling on for some time which I’d hoped to see a solution to, but I didn’t. At least I don’t think I did!

So I’ll be really interested in your thoughts on it, and see if you can help.

For many organisations, websites and apps are the primary channel for interacting with customers, and often these are seen as differentiating products which benefit from having in-house software engineering teams working on them and owning them.

There has also, for some orgs, been an appreciation that having those teams operate autonomously and independently means a faster rate of innovation (reducing contention and cost of coherence as per the Universal Scalability Law).

This means carving things up into “vertical teams” who own their own stacks.

So far so good.

But we have to draw a line somewhere. How deep can your vertical slices go?

Autonomy and independence must have a limit somewhere.

Matthew says…

For one thing, you can’t allow teams to be completely independent because you would end up with spiralling costs.

Just for the purposes of this, I’ll give two concrete examples. Let’s assume we’re talking about an ecommerce company:

1. If the company ingests data from third parties for the purposes of product pricing, then you only want to pay for that once. You don’t want dozens of teams each paying for their own connections just to ingest the same data.

Matthew says…

2. You don’t want every team to build their own authentication systems for customer auth and service-to-service auth. Those things require specialist knowledge, and they’re expensive to engineer – you only want to incur that cost once.

Matthew says…

And of course, it’s not just about cost.

In the first example, you also care about consistency. You don’t want differences in the data ingestion and processing to result in customers seeing different prices for the same thing as they go through basket/checkout say.

Matthew says…

For the second example, something like auth will be a focal point for various audits (PCI, GDPR, SOX, ISO27001 etc.) so it’s beneficial to have a single standardised approach at least.

Matthew says…

And then of course, there’s cognitive load. You want your teams to focus on solving differentiating problems – innovating on things which make the company competitive – not all building and maintaining their own auth solutions.

(I’m going to assume for the purposes of this that there’s a good reason why the company doesn’t want to just buy such an auth solution off the shelf).

Matthew says…

How do we solve these problems? It feels like there’s an obvious solution for each example:

  1. We get a single team to ingest the data from the third party, and then make it available for other teams to consume. (Maybe the team would do some simple processing on the data if everyone would need to do that same processing).
  2. We get a team to build and own a single auth system, and make it available to other teams to use.

What I’m wondering is whether there’s something else to consider. So let me talk you through it.

I’d propose that it’s helpful to identify two sets of domains:

  • Experience Domains, which depend on:
  • Business Domains

Now they might not be the best names (naming stuff is hard!) but I would define these as:

Experience Domains

Comprised of teams which primarily provide products to the end customer – i.e. the website(s) and app(s). Let’s call them Experience Teams.

They aggregate and compose data and functionality provided by the Business Domains to create rich and compelling experiences for customers.

The stacks that these teams build are entirely use-case-specific, and entirely independent – no other teams should depend on them.

In these domains we optimise for rapid innovation.

Business Domains

This is where the two teams I described in my examples would sit. Business Domains are comprised of teams which provide commonly useful, self-serve, data and functionality to other teams (internal customers). For our ecommerce company we can imagine Business Domains like “Product”, “Customer”, “Promos”, “Marketing Content”, and so on.

They might take the form of RESTful services, or Kafka topics, or web sockets, or some other interface – but they’re fully productised with proper documentation, versioning strategy, feature requests, backlog/roadmap planning, published schema and so on.

The data and functionality they provide should be canonical, and generally useful (not use-case-specific). The whole design and purpose of these domains and systems is that other teams can and should consume from them and depend on them – solving the problems of duplicated cost, consistency (and also sometimes cognitive load). They’re where most Experience Teams’ vertical stacks bottom out.

In these Business Domains we optimise for re-use and stability.

Matthew says…

Are these concepts orthogonal to your Team Topologies models? Or is there room for this within them?

Experience Teams sound like Stream Aligned Teams from your book.

But what about the teams in the Business Domains? Are they just Platform Teams? Or are they just another kind of Stream Aligned Team? Or some hybrid?

Or something else entirely?

Matthew says…

Cheers,

Andy



Further conversations with Matthew…


Andy Butcher 5:07 PM
I realised that there’s another learning I took from our discussion, which I’ve just appended to the post.
I wasn’t clear when I first read TT that Platform Teams could be building what you might call “business platforms” rather than just “technical platforms”. So in other words, if a company requires an authoritative service for performing pricing calculations to be made available to its Stream Aligned Teams, that would be provided by a Platform Team in the TT model.
Being a techie, the word Platform always makes me think about technical platforms first and foremost

Andy Butcher 5:30 PM
I’m still mulling on the naming. Platform: Suggests a single thing which you must build on, and has tech connotations. Foundational Team: not much better but it’s not tech at least. Innovation Accelerator: I like it, but it’s not obvious what it means in practical terms.
I’m trying to think of a name which conveys the idea of something Stream Aligned teams could use if they want to, which would take away cognitive load or effort, and which are designed to be shared (i.e. designed for multiple teams to depend on).


Andy Butcher 5:34 PM
It’s a purely academic exercise because of course the term Platform Teams is what you went for and I’m not trying to rewrite TT 😂
But I wonder whether “Self Serve Teams” conveys the right sort of idea? It implies something you can consume if you want to, not necessarily a tech resource.
Or just “Service Teams” – although of course the word service is very overloaded. But still – it conveys the right sort of idea.


Andy Butcher 5:40 PM
One of the things I was trying to achieve with my Experience Domains and Business Domains, was to clearly state which areas of your architecture you can consume from or depend on, and which are NOT designed to be consumed from. Your Stream Aligned teams, for example, would be massively slowed down if another team started depending on one of their APIs.
I can think of one very well known company which has a horrifically tangled web of dependencies in some places, making changing anything unbelievably complex and risky.
So for me, one of the defining features of a Platform Team in TT is that it’s designed to be shared (i.e. have multiple dependants/consumers), whereas Stream Aligned Teams are definitely not. Would you agree?

Andy Butcher 5:49 PM
Perhaps the word “shared” is misleading. A TT platform is designed to be used or consumed by multiple internal teams?

🤓

Andy Butcher 6:33 PM
But if it’s designed to do that for “at least one” SAT, then by definition it’s designed to be used by multiple SATs?
What am I missing?
The “re-use” fallacy. Yeah absolutely with you on that. It absolutely is a fallacy!
I’m going to stop using that term

Andy Butcher 8:06 AM
Interesting! So should Platforms be designed such that they can be consumed by multiple consumers?


Andy Butcher 11:59 AM
That makes sense 👍

As a SAT, if I think “we could really do with X to reduce our cognitive load” and a Platform product exists for X, but hasn’t yet been designed for multiple consumers, it would be a valid approach to discuss consuming from that team? (The Platform Team in question would have to do some work to get their Platform product ready for multiple consumers)

Sorry for the noddy questions – just trying to make sure I get it

Andy Butcher 2:35 PM
Yes I think I will!

I’ve got another question though 😁
What if the SAT I mentioned above realises that a different SAT has an API (for example) which gives them what they need and helps reduce their cognitive load. Would it be a valid approach for them to start consuming from there?

My immediate thought on that is that the answer should be “no” because as soon as someone depends on you, your flow and independence are impeded.

Andy Butcher 2:56 PM
Okay cool – that definitely aligns with my thinking 👍

4 responses to “Questions about Team Topologies”

  1. Giuliano Bem Hur Firmino avatar
    Giuliano Bem Hur Firmino

    In the concept I created, I call the Experience Domain team the Delivery Team and the Business Domain team the Domain Team. The teams are associated with the separation of models, one for delivery as a Read Model and another for domain as a Domain Model. I call this separation of models DDMS (Delivery and Domain Model Segregation).

    View at Medium.com

    Liked by 1 person

    1. I enjoyed reading your post Giuliano. I like the analogous read models 👌

      Like

  2. Michael Maibaum avatar
    Michael Maibaum

    Hi Both – Interesting post – would love to get into this one day in a pub 🙂

    FWIW, I also think there are some interesting angles here we learn from attempts to make inner source work effectively and how to resource and prioritise across shared capabilities when multiple businesses with varying levels of independence want to develop against the same product.

    On the “platform team” – I think in some, but maybe not all (need to think on this longer), name is one we can borrow from DDD – If we imagine lifting up the concepts of a domain service to the team level this starts to feel an awful lot like a Domain Service, so a “domain team” – which is a weird coincidence given an almost entirely separate logical chain from Giuliano 🙂

    But to make it concrete and use your examples – you have a pricing or auth domain, which is then integrated into stream aligned teams to produce a coherent product.

    Liked by 1 person

    1. Hi Mike – yeah I agree about Domain Services in the DDD sense. That does feel right – e.g. a Pricing Service containing canonical business logic relating to pricing, which Stream Aligned Teams (or Experience Teams in my model) can consume if they wish to.
      The inner source thing is a really interesting topic – and definitely one to get into over a pint or two sometime. 🙂

      Like

Leave a reply to Andy Butcher Cancel reply