更新了“手术团队”的概念

2021-05-11 19:51:29

文章介绍"手术团队" &#34介绍;神话人为月份"在这里我们来看看:现代“手术团队”的崩溃,Meritocracy,如何缩放解决方案需要多次重复层次结构模式,为什么稳定的团队很重要,为什么小型团队重要性和可扩展性限制。

本文是我对如何组织软件开发的个人观点。这并不是为了成为科学论文,有很多陈述是故意大胆的,直接发短信。我尽我所能基于自己的观察和可用来源呈现这种方法,但我不是商业理论家,专业经理,也不是社会学家,我可能会完全错误。此外,本文不可避免地从开发人员/建筑师角度编写,而且我也可以向其他观点开放。我也没有机会如描述的描述完全练习所提出的方法,所以用剂量的怀疑剂对待它。

在他永恒的书中,“神话人月”,弗雷德布鲁克斯在Harlan Mills获得了解决软件开发的最佳团队结构之后。他提出“每个大型工作的每个部分都被一个团队解决,但该团队就像一个外科团队一样而不是一个猪屠宰的团队。也就是说,而不是每个成员切割问题,这是一个切割和其他人都给他一个能够提高他的有效性和生产力的支持。“

拟议的团队结构如图1所示。我添加了一个从原始概念中缺失的客户。

“外科医生[...](主要程序员)[...]个人定义了功能和性能规范,设计了程序,代码,测试它,并写入其文档。”他还决定他与谁合作。他的能力至关重要。

“Copilot [...]是外科医生的改变自我[...]。他的主要功能是将设计分享为思想家,讨论者和评估者。外科医生试图对他的想法,但不受他的建议的约束。他密切了解所有代码。他研究了替代设计策略。他[...]作为对外科医生的灾难保险。“

“管理员[...]处理金钱,人员,空间和机器,以及与组织的管理机制的接口。”

“编辑通过外科医生制作的[文件草案]并批评[他们],返工[他们],通过参考和书目提供[他们],通过几个版本,护理[他们],并监督生产机制。”

“程序秘书[是]负责在编程 - 产品库中维护团队的所有技术记录。 [他对机器可读和人类可读文件负责]。

“ToolsMith [...]是负责任的,用于构建,维护和升级他团队所需的特殊工具 - 大多数互动性计算机服务。工具构建器通常会构建专用实用程序,编目程序,宏库。“

“测试仪是一个对功能规范的系统测试用例的对手,以及为日常调试设计测试数据的助手。他还将计划测试序列并设置组件测试所需的脚手架。“

“语言律师[是一个编程语言的主人。 [他]可以找到一种简洁而有效的方法来使用语言[通过执行]小型研究良好技术。“

同行团队之间的差异是“合作伙伴划分工作,每个人都负责设计和实施部分工作。在外科手术团队中,外科医生和Copilot [自己]的所有设计和所有代码。这节省了分配[职责和]的劳动力也确保了工作的概念完整性。“此外,在“伴侣的传统团队平等”中,[兴趣和]判决的必然差异必须讨论或妥协。在手术团队中,没有差异的差异,判决的差异由外科医生解决了[单独]。这两种差异 - 缺乏问题和优越的下属关系 - 使外科手术组织起来就可以[作为一个],但该团队剩余时间的职能专业是其效率的关键,它允许成员之间的彻底更简单的通信模式。“

自布鲁克斯的预订已发布以来,几十年过去了。考虑到技术进步,原始模型可以如图2所示调整。

在现代的“外科团队”,秘书,编辑和语言律师已被硬件和软件的组合所取代,这使得能够增加团队的技术成员数量,从而增加其吞吐量。现代“外科手术团队”成员的角色如下:

架构师“亲自定义功能和性能规范,设计程序[...]并写入其文档。”此外,他解构成架构变更为工作单位,并将其分配给团队成员。他不断使用开发人员和测试人员咨询设计,虽然他要尊重他们的反馈,但他是最终决定的人。只要他的评价并批准合并请求,他就可以写出代码自己自己。他可能不是负责执行代码合并的人,但他必须有一个否决权,应尊重。建筑师应至少表现出一些“人物技能”(如中等媒体的人格特征,以经验高开放性,中等途径,低至中等神经质和中等令人信服的帮助,但可以在某种程度上以有意识的努力而得到补偿)和他的技术能力因为他负责预期和避免未来的技术问题至关重要。理想情况下,作为最经验丰富的,他必须对招聘和让其他团队成员的影响力。如果整个团队做得严重,上层管理人员将解雇建筑师,让新的人重新创建团队(相同的方法用于体育运动,教练为团队表现唯一的责任)。

管理员通常与原始模型中的职责相同。此外,他强制执行该过程(如Scrum Master),收集状态报告并维护工作积压。即使他是建筑师'从属,他们应该在串联中工作,因为它们相辅相成了。管理员应展示高“人员技能”来补偿可能的建筑师的缺陷。此外,更具订购和保守(高度良心,良好的休闲性和经验)应该有助于平衡建筑师(可能)混沌创造力,促进可持续的步伐和过程。建筑师和管理员都保护团队免受不必要的沟通负担,但不要限制团队或其他团队的沟通。

开发人员负责编码解决方案。即使没有描述,它们也会根据能力,人才和经验拥有自己的层次结构。在危机的情况下,至少有一个能够替代建筑师是重要的。

测试人员负责设计和自动化系统测试。如在开发人员的情况下,他们将拥有自己的层次结构。对于至少一个来说,至少是对建筑物的质量反馈提供质量反馈的软件来说是重要的。测试人员,即使在技术上是有能力的,也很少用作建筑师替代品,因为它们存在不同的心态(构建VS Destroy)。

自动化工程师的职责通常与ToolsMith的职责相同。此外,如果需要,他还应负责构建和维护硬件原型和测试钻机。

我已经用“软件开发作为价值领域的研究”和“软件项目失败的心理原因”,关于能力是软件开发的关键基础。

与敏捷软件开发相反,特别是极端的编程,我站在层次结构是先天的。如果它建立在能力之上,人们倾向于接受层次结构,因此不应该与杠杆合作,因为在层次结构上自然而然。正如杰拉尔德M. Weinberg所说的那样:“考虑团队的工作两类是有用的 - 在完成团队目标和致力于维持团队的有效运作的工作中致力于实现工作的工作。对于社会心理学家来说,这些活动被指定为“面向任务”和“维护型”[...]。在某些类型的团体中,通常在编程团队中,集团倾向于选择两个免费领导者 - 一个任务专家,他们分配,并协调工作;和一个维护专家,他在团体成员或个人目标和集团目标之间进行了冲突。指定的领导者,因为他在将外部目标携带进入集团的角色,最常见于任务专家的立场,虽然我们所知道,如果他没有表现出必要的能力,他可能会被小组取代。维护专家 - 谁将在集团中最能成为最好的人 - 可以来自任何地方。他在自己的斗争中可能不是特别好的程序员,但可能很可能。经常他会成为她。

在核家庭的十字文化研究中 - 父亲,母亲和孩子 - 这相同的划分是任务和维护活动,至少在文化理想中被发现。在大多数文化中,包括我们的文化,理想的父亲是任务专家,理想的母亲是维修专家。“

与一个家庭或部落一样,现代“外科手术团队”的层次结构应建立在能力,能力和人才之上,具有明确的责任师,以加强特定工作单位的所有权的概念。

在XXI世纪的外科手术团队中,每个工件都有指定的所有者。由于所有权对消费它的人评估的人工艺品的责任(例如,设计的消费者是开发人员的消费者,而且代码的消费者是需要审查它或与之界面的其他开发人员)。极端编程所倡导的共同所有权只能成为高度稳定的主管人士的最高形式的个人所有权,该团队另外开发了人际关系(A.K.A.友谊),并且愿意彼此支持。在其他情况下,集体所有权将最终得到社会厌恶造成的公共场合的悲剧。每个团队成员将在最不可能努力推动其其他人对他人的后果(产品伪影的质量变为"公共和#34;)。这也是软件开发外包无法生产质量解决方案的原因。

最后的支柱是尊重的。对于建筑师和管理员而言,不仅是将开发人员,测试人员和自动化工程师视为可更换的咕噜声(A.K.A.资源)是重要的。作为团队的前面的建筑师需要知识渊博和经历,但这并不意味着开发人员或测试人员不是。通常,开发人员(或测试人员或自动化工程师)和架构师之间唯一的区别是后者愿意将他的设计放在纸上,而前者同样有才华,知识渊博和经验丰富的“代码为导向”。没有相互尊重,由于内部冲突将继续撕裂它​​,球队将不会非常有效。不幸的是,真正的尊重需要诚实地获得,这使得团队大会进入挑战。

缩放解决方案需要多次重复层次结构模式,如图3所示。重要的是将具有主架构的主要建筑师在最重要的是整个产品和产品管理员是他的下级对等方面的负责。这将创建工程师驱动的组织,责任遵循技术能力。

在所描绘的情况下,管理员的日常报告沟通以及建筑师和产品所有者/分析师的大多数技术/战略沟通都会发生。这让每个人都集中在他的核心责任。

为了使这个组织结构有效,它需要遵循产品的技术结构(逆转Conway的定律),使人际通信路径遵循软件通信路径。到目前为止,最有效的方法是雇用一组“文件”,这些结构遵循并支持统一的组织技术结构,如图4所示(如Winston W. Royce表达它:"管理软件开发的第一个规则是无情的文件要求。")。

所描绘的“文件”不需要以纸张形式或以任何文件形式正式化(例如,产品积压是在整个产品寿命期间积极维护的一组记录),但所有权和参照订单需要清除。

Fred Brooks指定概念完整为软件系统的主要质量。据他说,只有当系统由单个人或小型密切合作组设计时,才能实现这一点。对于建筑师,开发人员和测试人员,在一个人的头部拥有整个系统/子系统的表现优势也很好。通过长期处理同一产品,人们不仅可以获得对技术的易于提供的知识,也可以减少必要的沟通,并加快每天需要采取的所有少数决定。在产品之间移动的人经常会影响这一点,因为人们有有限的保留信息。

最有害的商业策略之一是将人们对待可互换的资源,并经常在产品/子系统之间移动,以提供100%的利用率。这种策略几乎总是逆行,因为如图5所示,所带到新产品的每个人都需要增加时间来富有成效。这个增值时间通常足够长,以花费更多(在损失的生产率方面),而不是让这个人一段时间没有占用的成本。

还有另一个(长期的)成本随身携带。移动人员要求他们重复将大量知识和信息重新加载到他们的大脑中。虽然年轻人可能能够快速做到,但对于旧的人来说,这不是那么期望在长期从私密了解一个子系统或应用程序中获利。在稳定的团队中,人们可以通过如图6所示的每单位生产率的减少的努力来将所获得的知识货币化。

在这种情况下,努力 - 生产率比不断高。如果情况延长,这会强加智力疲劳会影响性能和动机。经过一段时间,人们意识到精神疲劳是不值得的,并将作业切换到较少的累人。这是公司的双重生产力。另外,产品/子系统之间的Shuffling Devs /架构师使它们更喜欢短期到长期收益。换句话说,质量下降,因为他们将来不会受益于此。

在产品之间洗牌开发商的最后一个负面方面是,它使得满足开发人员的基本需求是不可能的。我在“软件开发作为价值领域的研究”中写道,开发人员的基本需求是收入,自主,掌握和目的。在相同的产品上工作时间更长,让开发人员向其发展情绪依恋。观看它在一段时间内使用有用的功能来实现目的的需求。能够改善它逐渐满足掌握的需要。能够计划和继续发展路线图,满足了自主的需要。所有这些都放大了所有权,责任和自豪感的感受。然后这些都消失了,一切都留下来是一种沉闷的堵塞的感觉。质量遭受,士气遭受,开发人员营业额增长和侵蚀踢。

原来的“手术团队”由10人组成。已经观察到多次最有效的团队组成5至9人,最大数量约为12,队伍自然地分为较小的球队。另一个提示是价格的法律,即在创造性的努力的情况下,一半的结果来自所有贡献者的平方根。在新的“手术团队”,他们应该是建筑师,高级开发商和高级测试人员。

“缩放的外科手术团队”方法有其限制。考虑到12个下属是层次结构的每个级别的最大数量,最大有效的系统开发团队只能组成约122人,形成三层,如图3所示(12个+主要建筑师+产品管理员的10支队伍),哪些与“Dunbar号码”松散地对齐。在此数字中,每个架构师都能够直接在代码上工作,如果需要,主架构师能够支持或临时替换每个架构师(或在极端紧急情况下甚至在代码上工作)。这种情况每个主管实际上都可以做到他负责所做的工作。

推出超出这一点的数字将导致两种替代结果。保持层次结构平面队长超过12人的团队,并导致他们自然分为降低团队内部合作的小组。它还超出了建筑师的管理能力。这种减少的团队完整性以非线性方式影响生产力(添加团队成员不仅可以减少回报,而且实际上是负面的生产力影响)。另一方面,建筑层次结构需要引入中间管理,该管理从解决方案中分离了主要的建筑师,通过将热水下划线建造成组织。此外,很难精确地将责任分配给中间经理(中间架构师?),因为它们通常不会与系统架构保持一致。在这种情况下,中间管理人员需要用印象来证明他们的职位,而不是通过产生信息噪音来实现。此时,办事处政治通常对公司负面影响。

“缩放手术团队”的限制不限制公司的规模。一家公司可以通过雇用许多暂停自主“缩放手术团队”开发许多独立产品(系统)。为了使其成功,每个产品需要具有独立的发布周期,以避免昂贵的协调,并且每个“缩放的外科团队”需要对通过狭窄,仔细定义,稳定的第三方产品的集成来处理。如图8所示,向后兼容API(质量设计在此处支付大)。

本公司应对产品互操作的互动(路线图)进行非常通用的愿景,但临时发散应广泛接受。换句话说,应普遍接受,在各个时间点,某些时候的东西不会最佳或预期。这是在感知产品套件之间进行的权衡,通常是普通产品间协调的欠款成本。

为了回答这个问题,假设每个产品在其寿命期间可以在少量的互斥方向(例如2)中。要使它更有形,可以想象,可以开发后端数据存储服务与数据库或更像是消息代理,但是

......