In my experience, the pros of stream-aligned teams vastly outweigh the cons. The major pros are reduced cross-team dependencies and fewer hand-offs, more ownership over work, focusing people on a narrower set of customer/business problems, and that stream-aligned teams are easier to refactor and decompose as the organization grows.
What I learned along the way is that you will still have some cross-team dependencies based on technical expertise. So you will benefit from your engineering leaders explicitly and regularly discussing these needs, then incorporating some resource sharing into their plans. For instance, you might have an engineer who really knows one area of the product or technology brought into another team's kickoffs and design reviews or even joining the other team temporarily.
We made the switch to cross functional teams at around the same stage as you. I think a lot of lessons are really org-dependant, but highlights from me:
- Team/Pod effectiveness varies hugely. When most team-members "get" what they are trying to do and actively participates, it works amazingly well. Where there is gaps in communicating things tanked. The early symptoms were usually the team adopting more complex org frameworks, more detailed specs, obsessing over QA processes, meeting schedules etc. It was initially tempting to view this as a problem with the org structure, definitely seemed like it at the time. But after a bit of time the root cause was obvious. The nice thing is it manageable as isolated as long as you don't overreact
- Relatedly, you need to put a lot of effort into making sure everyone knows what the goals are for a team and its very clear what a win/loose looks like. Also since most people will be taking on more responsibility, mentoring becomes very critical. So you need good mentors with time to dedicate to it. Its easy for a team to get stuck in limbo and for people to feel frustrated.
- Since more junior people are put in positions of responsibility, gotta watch out for overly theoretical approaches & lets use framework-of-the-month behaviour. Both on the product & engineering side. Another reason for goals & win/loose being clear and mentoring.
- It really helps for teams to broadcast updates & lessons learned to other teams periodically. People knowing who helped to build what was good for everyone.
- QA people turned out to be some of the best "glue" for teams
- People jumping around different teams was surprisingly practical. Some people like doing this. Obviously didn't force the people who don't like it.
- People currently struggling but just maybe under your radar will suddenly feel the heat if they are letting their team down. It can be traumatic for them. Its worth keeping an eye out and jumping in to assist.