我一直在思考这个确切的问题。
我认为区分按个人职责划分和按团队职责划分是很重要的。我将把这个答案主要集中在切片团队上。
对于某些背景:我曾在项目中与全栈开发人员,单层开发人员,垂直(全栈)团队,水平(单层)团队和对角团队合作。对角线团队,我的意思是包含一个故事所需的所有层,但不一定包含系统中的所有层,还可能包含多个专注于同一层的开发人员。换句话说,实际上是垂直的,但外观或实现细节可能有点水平。
最近,我在一个从水平团队过渡到对角线(几乎垂直)团队的团队工作。看到同一群人以两种不同的方式对齐,这特别具有指导意义。这使得一些优点和缺点非常明显。
到目前为止,我将通过以下摘要比较来总结我的观点:
横向团队
优点:
- 促进良好的关注点分离和松散耦合的层级
- 轻松得多的工作负载分配管理
- 易于专业技术负责人进行管理
- 促进内部协作,最佳实践,自豪感和卓越文化
- 符合自然/紧急的沟通模式
缺点:
- 可能导致层间隔离,从而阻碍层间通信
- 如果不缓解,则启用“泡沫”文化
- 难以利用通才领导
- 后援通才
垂直/对角线团队
优点:
- 一个团队中用户故事的所有部分(“一站式服务”)
- 特别有助于在一次冲刺中传递n层故事(尽管您确实需要吗?)
- 促进层级协作和通才技能的培养
- 支持通才
缺点:
- 工作量分配管理更加困难
- 实现关注点和紧密耦合的层之间的不良分离
- 通过减少层内通信来阻碍专业化;在不增加缓解横向/专业行为的情况下,很难看出卓越文化是如何从这种结构中产生的
我认为团队成员没有一种千篇一律的解决方案。但是,对于需要通用化的组织来说,垂直团队的排列似乎更好一些。如果您的工程师是通才,并且喜欢全职工作,那是考虑垂直团队的一个很好的理由。对于需要专家的组织,水平团队会更好地排队。如果您的工程师是专家,那是考虑横向团队的充分理由。
正如其他人提到的那样,将另一个方向分割的辅助结构/行为可以帮助减轻两个系统的缺点。一个有趣的缓解因素是冲刺持续时间。短距离的冲刺使横向团队的一些弊端更容忍。如果您可以在本周构建后端,在下周构建前端,那可能足够快?
要将其中一些拟议的原则应用于现实世界中的问题……我想说的是,水平切片对于一个我从事过的非常实际的SaaS开发团队来说非常有效,该团队正在解决各个层级中非常棘手的技术问题(我认为专业化非常重要),交付频率(以及高粒度/频率的可靠性)对业务成功至关重要。请注意,这个结论是针对一个非常特殊的现实世界团队的,而不是对水平切片优势的一般说明。
一个警告:我可能不相信现代软件开发世界中任何人都声称拥有通才能力而没有大量证据,尽管我知道一些罕见的杰出通才。我觉得普遍性确实是一个很高的(垂直的)顺序,尤其是随着每一层的复杂性不断提高以及替代语言/平台/框架/部署的增加,每种语言都能满足不同的需求。尤其是如今,各行各业的人很容易成为无所不能的大师。此外,我发现大多数人都想专门研究很多,除了一些例外。