So if you read my previous post, I saw saying that for Platform / DevOps you dont want to have 1 single team but several small teams actually. However, when we are talking about Product Teams I believe we need to go the other way around. Could we have small teams in the product and yet be a good thing? Well depends. IF the Product teams are completely autonomous and selling their own product or completely independent module in sense of the business (Meaning autonomy is a business construct). Well for that case yes, have smaller and more teams will make sense however in practice what happens is the other way around. What happens is that many small product teams tend to create small microservices with have dependencies on each other and at scale, it becomes more problem they benefit. In order words, business verticals or bigger scoped SOA Services would make much more sense and also would fix several problems that small services at scale tend to create. If you want to know more about current industry issues with microservices read this post here.
Small Product teams Issues at Scale
When we have so many Small Product Teams making so many microservices at Scale the issues are numerous but we can consider the biggest headaches being:
* Who is the Owner? People come and Go, who knows that software? Who to talk to?
* Coordination: Open PRs to multiple repositories and coordinate deploys across several services.
* Complexity: When things fail, where is the issue? How to trace it?
To fix these problems, we need to reduce the comunication blast radius, that can be done by the simple fact: Have fewer Product Teams. Meaning more “Business Verticals” more centralization and more isolation and independence inside the business silo. This idea is completely wrong for DevOps/Platform teams but for Product I believe is actually a good idea and not new at all. Look “Monorepos”.
This sorta the “Monorepo” principle. Things that are the “same” should be together. It will be easier to:
* Release: Since all together — bump versions is simple.
* PR Review: All Related code on the same PR rather than multiple PRs.
* Easy to Maintain: Since is all on the same repo
The industry got it all wrong(mostly). Currently, everybody has Small Product Teams and Centralized DevOps / Platform teams and we need the other way around. Big Centralized Product Teams and Small Platform / DevOps Teams.
Small Product Teams alone will do nothing for you
Any org can split Product Teams into small(Pizza teams) like amazon. But can you also make the Pizza Teams business independent? (Like Amazon). That the hard part. The business has dependencies, breaking the same thing into multiple places it does not make your life easier, actually, it make much harder because:
* Multiple Services == Infrastructure / Deployment Complexity
* Multiple Services == Harder to Debug and Understand (Require Observability)
* Multiple Services == More complexity, harder to maintain, Who is the owner?
* Multiple Services == More coordination, slower execution
Creating small product teams where you dont need it is a huge problem you are creating for you future-self company. Believe me. Lots of big companies are realizing that such as Uber. It’s small Product teams always wrong? No. But to be right you need to have business autonomy meaning:
* Can you have your own business model?
* Can you have an independent product or module?
* Can you experiment and respond to business metrics and OKRs but yourself alone?
* Can you operate alone? Meaning do you need other modules to work? how isolated are you?
Teams organization and topologies are an amazing and interesting subject. Software Architecture and team organization/topologies walk along since computer science day 0. Conway’s law rules.
Originally published at http://diego-pacheco.blogspot.com on October 28, 2020.