使用现代工程实践,微软核心服务开发与工程(CSE,前身为Microsoft IT)团队可以快速有效地响应,以满足内部客户和合作伙伴的业务需求。微软的开发平台Visual Studio Team Services(Visual Studio 团队服务,VSTS)提供并内置了支持工程基础(Engineering Fundamentals)和应用程序生命周期管理的工具,为CSE团队带来了采用敏捷方法的机会。通过使用VSTS,CSE致力于持续集成和持续交付的增量更新,并维护以客户为中心的开发流程。
Microsoft IT曾经使用的是传统的瀑布式开发流程,通常需要业务部门等待三个月才能发布新的解决方案或修复bug。此外,Microsoft IT也无法改变关注的焦点,快速响应优先级高的请求。随着服务、软件、PC 和设备业务的变革步伐加快, 传统的软件解决方案发布速度并没有跟上业务需求,而花费的时间越长就会导致失去越多的市场机会,而微软已经错过了许多潜在的销售机会。
Microsoft IT改进了为微软内部客户开发应用程序和服务的方式,通过敏捷开放和现代化的软件工程,帮助微软内部业务团队更快的创造商业价值。为了支持微软的内部客户和合作伙伴, CSE更快地响应不断变化的业务需求,不再花费六个月的时间交付应用程序或更新,而是更快、更高效地传递价值。为了提高反应能力, CSE开始了现代软件工程的旅程,CSE的目标是每天都以持续集成、持续交付的流程发布新功能。
随着VSTS服务和现代软件工程方法的灵活性和速度, 高优先级的项目可以在项目开始的两周内就发布出来。最终, CSE计划在持续发布的基础上,使用 VSTS团队服务为CSE的解决方案提供每天的增量更新。
为了缩短功能和服务开发周期, 并更快地响应内部客户需求, Microsoft IT/CSE开始了向现代软件工程的转型之旅。作为一个组织, Microsoft IT/CSE变得更加敏捷, 采用了 DevOps 的紧密合作和共同负责的文化。Microsoft IT/CSE在改变团队的心态, 更改组织结构, 并开始合并团队角色。Microsoft IT/CSE也在学习如何更好地关注客户体验,这些变化支持新的敏捷工程实践, 并对客户更敏感。
Microsoft IT/CSE的敏捷开发团队,也称为冲刺(Sprints)团队,由工程师、产品经理和业务客户组成,他们协同工作为微软内部业务客户定义和开发解决方案。现代软件工程需要巨大的团队合作和紧密的协作,创建支持这种团队合作所需的组织文化并不是一下子就能完成的,改变人们的思维方式和方法需要时间。在开发团队和领导层中, 人员的心态必须经历重大转变,微软正在进行这一转变的过程中。
从瀑布式开发模型到敏捷开发的转变不仅仅是将一个流程替换为另一个流程。敏捷是一个新的思维方式和持续的批判思维, 因为它要创造新的流程。当客户需求变化时,开发团队必须改变所交付的软件及解决方案,在这种环境下, 结果比过程更重要。微软的工程师团队不再花费数周或数月的时间来设计和规划一个整体解决方案, 然后用甚至更长的时间来开发它;相反, 新的功能请求会在未完成任务(Backlog)中成为高优先级,并且在两周的冲刺中完成编码,新代码将定期集成到生产环境中构建。
在这种环境下, 开发团队成员和管理人员必须要接受模糊性(Ambiguity)和快速改正错误,必须迅速适应新的要求和改变目标。每个团队都必须实现自治并逐步提高,在一个项目中获得的最佳实践,将成下一个项目中成为新的最佳实践的出发点。没有任何事物是一成不变的, 甚至是目标本身。
另外, 团队中的每个人都必须对质量承担同样的责任。微软认为,等待某个人来解决某个问题,这很浪费宝贵的时间,第一个有时间的人就应该能够处理问题。理想情况下, 每个团队成员都应该具有能处理任何问题的背景和技能。最开始的时候,微软还没有达到这个理想的状态, 但是正在稳步地朝着这个方向前进。
现代软件工程
为了更快地响应客户和业务需求, CSE转向了一个现代化的软件工程模型。此模型有两个组件。首先, 通过合并软件工程的开发和运营两个角色——DevOps,提高了工程师人员和文化的成熟度,从而提升了效率。这样, 任何工程师都可以在团队中执行任何任务。第二,采用了敏捷开发原则、方法和工具来提升服务成熟度,从而进一步缩短周期。
(上图为微软现代软件工程成熟度模型)
工程师人员和文化的成熟度
作为迈向现代工程的第一步,微软根据业务流程重新调整了开发团队的组织结构,让二者匹配起来,从而消除了组织障碍, 以便可以将适当的资源分配给每个项目。然后, 微软开始将软件工程 (开发和测试)和服务工程(运营和维护)角色合并到一个敏捷的 DevOps 团队中。目标是让每个团队成员都知道其他角色所面临的问题, 以便能够协作解决问题,这增加了团队的效率和有效性。最终, 任何冲刺 (sprint) 团队成员都可以在任何工程角色中执行任务。
从传统到现代软件工程的发展, 微软确定了四个层次的人与文化成熟度。通过每一层的向上发展, 运维和开发/测试功能逐渐合并。这四个层次是:
1 级——信任:软件工程师(开发和测试)和服务工程师(运维)更多地了解彼此的角色。当他们开始更好地了解彼此, 就培养了更大的耐心和信任。
2 级——共享目标:角色仍然被区分。服务工程师和软件工程师继续了解彼此的角色, 并开始共享一个常规的工作。他们开始互相介入,并在可能的情况下互相帮助。
3 级——角色共享:角色开始合并。服务工程师和软件工程师开始使用通用的系统和工具、培养新的技能, 这样他们就可以开始相互进入对方的角色了。
4 级——完全集成的角色:最后, 服务工程师和软件工程师之间没有区别。每个人都是同一个团队的一员, 有着共同的目标,客户是重点。Bug不再是软件工程师的问题,服务器宕机也不再是运维服务工程师的问题,任何人都可以处理这些问题。这个层面上没有更多的交接, 只有通用工具、流程和项目,所有团队成员对流程和项目都有充分的可见性。每一个人都可以无缝地进入任何一个角色并承担相应的责任。
CSE的工程团队正在这些层级上进步, 尽管速度各有不同,大多数团队成员处于2级或3级。向上一个级别发展的一个障碍是团队成员学习新角色的时间, 同时还要承担日常的任务。
服务成熟度
为了通过快速交付周期保持高质量的软件及解决方案,CSE开始采用现代软件工程成熟度模型的第二个必要方面:服务成熟度。在遵循适当的实践以确保业务客户和最终用户都具有良好的体验并获得想要的结果,就会产生服务成熟度。CSE专注于支持服务成熟的八大支柱和相关原则,它们为一系列方法提供了概念框架,这些方法在开发过程中将这些原则付诸实践。
(上图为微软现代软件工程支柱和原则)
流程和工具
为了缩短发布周期,微软采用了敏捷开发流程,创建了一系列支持的基础环境和工具。
敏捷开发意味着迭代设计,在现代软件工程的流程中,有一个重要组成部分就是迭代设计。迭代设计过程使用快速原型来验证和细化设计选择, 而不是像传统方法那样在项目开始前要创建详细的计划。
微软同时设计了一系列的敏捷开发方法,称之为工程基础(Engineering Fundamentals)。这些工程基础是微软工程师所必须遵守的原则,工程基础以Epics(大的历史版本)、Benefits(收益)、接受标准(Acceptance Criteria)的方式,被嵌入到Visual Studio Team Services(VSTS)中,这些工程基础在工程师的冲刺(Sprints)任务单中不断被继承。工程基础有助于加快软件的开发和部署,通过定义如下实践的方式:快速、按需的开发和测试环境资源调配;无人值守的部署;自动化测试;安全、兼容的服务等。
微软建立了一个基础架构来运行敏捷项目, 包括:
应用工程基础
每个冲刺团队都将工程基础应用于每个项目。现代软件工程方法是对发展过程的根本性文化变革, 而不是清单上的一组新项目。这鼓励工程师们不仅要考虑他们所提供的代码, 还要思考他们将如何交付, 以及将如何最好地为客户服务。
工程基础作为指导性要求, 每个基础都要在继承的基础上有验收标准。冲刺(Sprint)团队确保他们提供的服务遵循工程基础要素。新员工将其作为指导原则, 以学习如何CSE组织的工程方法。而工程基础也嵌入在VSTS中——工程师们每天都使用这个工具,所以他们很容易找到和使用工程基础。
持续交付
专注于最小可行性(Minimal Viable Product,MVP)的产品:微软的工程师采用了MVP思维,他们专注于开发最小可行的代码, 以便最大程度的收集用户反馈。
以客户为中心
在生产环境中进行安全的测试:工程师可以在任何时候开始测试, 从实验中了解或证明软件服务的健康程度。了解用户如何从服务获得价值:工程师们坚持不懈地关注利益相关者,包括用户、客户和合作伙伴,这可以帮助他们了解和传递需求并将需求转换为软件功能、用户情景和任务,从而让客户满意。
CSE工程实践
准备编码:软件工程师可以随时将代码签出到任何开发环境 (本地或远程), 以便在几分钟内编译、运行和调试。
准备构建:软件工程师可以在任何时候获得具备所有必要组件的开发环境, 以便可以签出、编译和运行代码。
组件化:软件工程师使用组件,这让代码库更易于构建、编写和部署。通过使用Flighting函数,可以使新功能和代码变更独立于解决方案的其余部分而被打开或关闭。
安全和隐私遵从性。所有软件服务都非常安全, 并遵守安全和隐私标准,微软工程师将安全基础设施和工具集成到持续交付流程/任务中。
服务健康、分析和监控:微软工程师使用远程测量和数据来形成对用户体验、系统运行状况、服务的业务价值的洞察力,从而支持自动化。
现代软件工程在行动
(上图为微软现代软件工程在行动)
Visual Studio 团队服务 (VSTS) 是微软工程师默认的开发环境。在云中托管的VSTS为微软工程师提供了一个全球可用的、具有弹性的共享开发平台,以创建和开发软件。微软在典型的软件构建中使用四个单独的开发环境方案,每个环境都代表了开发、测试和发布过程中的一个重要部分。这些方案是:
实现现代软件工程的收益
除了更快的发布周期外, 工程师审查和与用户互动的方式也带来了文化上的转变, 从而提高了客户满意度。工程师们现在更好奇软件是如何运行的, 以及用户是否对这些功能感到满意。为了改进软件并使用户的生活更轻松, 工程师们正在学习如何将用户问题转化为工作任务并将其列入优先级。
现代软件工程的最佳实践
迈向现代工程文化需要在多种学科中进行广泛的努力, 包括思维方式和传统领导方法的重大转变。在进行这一转变的同时, 微软学到了一些宝贵的经验教训。
在团队内部建立合作关系。传统管理团队的方式是衡量每个成员的表现,这往往导致团队成员相互竞争。 为了让敏捷开发工作顺利, 团队成员必须在彼此的工作基础上互相依赖, 而不是竞争。为了帮助建立团队合作,要以一个团队为整体来进行评估,衡量每一个团队是否成功达到团队目标。
鼓励团队自行解决问题。团队应有权自行解决任何问题,如果需要向上升级, 那么团队成员应该在提出问题的同时,尽力也提出解决方案。应该鼓励团队成员使用数据来获得洞察力并做出正确的决策。他们的目标应该是克服障碍, 更快交付价值。
采用分阶段方法进行文化变革。任何一个开发组织也不会在一个大的推动下就转变为现代软件工程文化。通过分阶段的方法,设立一系列可实现的阶段性目标,迈向理想的、敏捷的文化更有可能成功。
企业规模敏捷开发的挑战
微软成功的开始在内部小型项目中采用敏捷开发的模式,但在走向大型项目的时候却遇到 了问题。
在较小的项目上, 敏捷为CSE提供了很好的效果, 但是当微软开始在大型的、企业级的项目上使用敏捷模式时, 遇到了瓶颈——减慢了工作速度,、降低了质量,而问题出在团队规模上。敏捷模式最适合九名成员的小团队,当微软试图为大型项目增加人员时,增加的人员越多、团队的效率就越低。有些开发团队非常庞大,达到150人甚至更多,于是陷入了困境。此外,微软也无法预测完成一个超过两周冲刺的大型项目所需的时间和资源,这就产生了预算和资源问题,因此必须找到在企业规模上使用敏捷开发的更好方法。
为了解决这些问题, 微软研究了将敏捷应用于企业项目的第三方框架, 如针对精益软件和系统工程的可扩展敏捷框架(Scaled Agile Framework for Lean Software and System Engineering, SAFe), 并将它用于开发微软自己的方法论基础。
为了更好地理解微软是如何实现可扩展的敏捷模式, 首先要了解CSE的小型敏捷团队是如何运作的。使用已经建立的敏捷模型, 小型的跨职能团队负责构建和交付服务。微软内部客户创建所需要的用户情景, 定义服务必须提供的内容,即业务价值。用户情景以简单明了的方式编写,很少带有细节。这些明确而简单地定义了开发人员在两周冲刺期间必须要交付的业务价值,然后敏捷团队将用户情景分解为若干可以在一天内完成的任务。使用这个方法, 开发团队能够根据实际信息和客户的需求快速迭代和解决问题。
CSE的小型敏捷团队具有如下角色:
当然,随着微软向现代软件工程演进,这些角色也不断变化融合。
在微软应对大型敏捷工程的时候,出现的问题包括:随着每个团队的变大, 复杂性也随之变大,加入的人越多, 团队的交付能力就越慢——接近几乎闲置的状态,而每天的站会变得越来越长。同一个团队的人,最终工作在极端不同的任务上,彼此之间很难协调。
因此,微软希望保持小型敏捷团队的效率和有效性,同时让小型团队能够在大型项目上进行合作。在提到第三方框架(如SAFe)基础上,微软开发了一个框架, 可以在各个层面上扩展敏捷的规模。从上往下框架层面分别为:
(上图为微软可扩展的敏捷框架)
下图显示了可扩展的敏捷过程如何在项目级别上的运作。
(上图为项目级别中的可扩展敏捷过程)
扩展敏捷规模时的焦点区域。微软的框架是在企业项目中使用规模化敏捷方法时的基础。要使项目在新的框架内成功,就必须不断地集中精力减少依赖关系、在自治与一致性间平衡、改变文化以及将冲刺和发布分离开来。
减少依赖。微软了解到, 不断减少依赖关系很重要, 否则会减慢工作的速度并造成瓶颈。而如何减少依赖关系,则是在个案的基础上,找出依赖关系并确定它们的影响, 然后减轻甚至消除它们。依赖关系可能发生在团队、体系结构和流程等方面。
团队。微软组织和构建团队的方式会影响依赖关系。基于这个原因,微软正在从一个横向的团队结构转向一个纵向的队伍——从专业化分工的团队变成一个可以独立而全面解决自己问题的团队。例如, 当多个团队依赖单个数据库团队时, 数据库团队必须分级并排定工作的优先级,这会造成瓶颈。为了避免这种情况, 每个团队必须具备解决问题所需要的所有技能,并自治式地完成工作。
微软还致力于组织地理位置偏远的团队,让他们能够相对独立,并且只在冲刺或增量级别进行定期沟通。例如,微软CSE的一些团队在印度,于是就让这些团队做自己的工作,这样他们就不必经常与雷德蒙德的团队沟通,否则会让他们慢下来。
架构。微软试图在设计产品时,减少依赖关系和瓶颈、避免重复性工作。微软不希望多个团队依赖于单个产品或功能,当不能完全消除依赖关系时,尽量减少它们的影响。例如,微软在销售和营销领域的五个团队使用SAP系统进行支付,尽管他们在一个为期两周的冲刺周期中工作, 但SAP的更新仅每6个月发布一次。与SAP的发行版保持同步是一项繁重的工作,而且每个团队还要分别管理版本同步的工作。为了解决这个问题,微软组建了一个团队来构建一个称为“Pay as a Service”的抽象层,它具有简单的输入和输出体系结构,并使用各个团队管理版本同步的同样方法,这样团队可以更快地行动,因为不会重复同样的工作。
流程。流程包括跟踪和组织数据、变更审批委员会(CAB)会议、每天的跨团队协调会议和帮助台等。共享过程提高了团队之间的一致性, 实现了规模经济效益。另一方面, 多个流程可能会产生大量的开销, 因此在必要的时候要统一团队步调,这需要“足智多谋”。微软希望确保采取的任何流程都要有明显的收益,而对团队的影响要微乎其微。专注于流程还包括关注团队的持续改进, 不断减少依赖关系。
在自治性和一致性间保持平衡。从一组服务中组装解决方案,就像让每个敏捷团队在被子的一部分上工作一样。如果每个人都独立工作而没有协调,那么当他们把所有独立制作的被子的一部分拼合起来时,会发生什么呢?可能不像预期或期望的那样。而且,这么做很可能导致效率低下,所以需要团队之间的协调。
另一方面, 微软的敏捷团队又希望快速而持续地改进,自治可能是最简单的方法;但是对于大型项目,每个团队都是一个更大规模团队的成员,必须要与其他团队协作。为了平衡团队目标和大型项目的需求,要确定团队需要在哪里被协调, 以及在哪里可以自治。
这样做时要记住,很容易将术语“一致性”转换为“标准”或“需求”。如果试图向团队提供工作的刚性细节, 这反而会阻碍他们。相反, 只对小团队进行需要的调整, 足以给更大的团队提供所需的数据和功能即可。微软的目的不是让小团队以某种方式做事, 而是要提高与其他团队在相关合作领域的效率。在这些约束条件下, 每个团队都可以自由地找到最适合自己的解决方案。每个人都不必以同样的方式工作, 但所有团队都在关键领域保持一致,这样更大的团队才能发挥作用。
微软在特定区域统一团队。例如:所有团队都有日常站会, 使用相同的流程和基础设施, 并分享相同的两周交付节奏;所有团队都已迁移到 Visual Studio Online在线版;处理同一程序的团队也共享相同的待完成任务列表;而团队如何从待完成任务列表中选取和分配任务的顺序,是基于更大的目标。微软还使用一种通用语言来报告团队进度、速度,并演示团队价值和影响。这让微软团队对未来有了更大的视野和一定程度的可预测性。
微软还提醒团队,尽管大规模使用敏捷会产生更多的依赖关系和降低自治性,但它也会产生规模经济效应。相应的系统和基础结构已经建立,团队不必在它们上面花费时间和资源。
改变文化。在为企业项目而扩展敏捷工程的规模时,问题会被放大。做每件事需要更长的时间, 包括在整个组织中改变文化。微软不得不后退一步, 找出如何弥合领导层、利益相关者和敏捷团队之间的沟通鸿沟。微软努力消除在人这一层面的障碍,以增加更多的认同并在所有层面推行一致的愿景。清晰的沟通、减轻依赖关系和解决障碍是一个不断发展和重复的过程。微软以与项目中对待backlog的同样方式,对待这个过程。
微软发现合理设定期望值很重要。当微软开始大规模使用敏捷方法时,所有的项目都被标记为“最高优先”。微软认识到,需要让合适的人提前参与讨论,以便让每个人都知道将采取什么行动以及何时采取行动。微软CSE会沟通交付的优先级,并讨论交付顺序。
微软改变的另一个方面是如何定义将要交付的内容。在传统的瀑布模型中,相关人员和客户能清楚地知道在未来很长一段时间才能交付的软件到底是什么样,详细到颜色、大小和功能等。而在敏捷模型中,需要承诺了产品线和日期, 但为了允许在需要时进行修正,导致对最终产品的确切含义是含糊不清的。例如,可能会说到2017年底将生产出世界领先的虚拟现实眼镜,然后就没有更具体的了。
领导力在规模化敏捷工程中的作用也是不同的,需要改变思维方式和学习过程。领导人过去每年都聚在一起创建路线图和项目, 并将它们交给工程团队,工程团队则响应承诺的交货日期,领导层将推动团队实现既定目标。随着敏捷程度的提高, 领导层应该了解到团队具有一定的工作能力,必须为这些团队提供适当的工作量。领导人还需要事先了解组织如何根据工作量而扩大或缩小的规模。他们知道结果是他们的责任,例如随着销售和营销团队的领导越来越多地参与Epic和Scenario,他们正在对开发过程拥有更大的自主权。通过开发生命周期, 他们实际上是在进行更大范围的冲刺。通过这一经验, 他们正在学习像 Scrum 高手一样规划自己的backlog。
将冲刺与发布分离。除了软件代码,商业价值可能是一个计划、有关设计的决策、测试环境的框架、Epic和Scenario等。为了交付商业价值, 没有必要将软件推向生产环境。在这种扩展的敏捷模型中,软件发布在冲刺(sprint)之外发生。
这个问题涉及流程和工程上的最佳实践,这需要改变团队的心态。通常,瀑布模型下的版本具有交付项目的目标日期。微软发现从瀑布到敏捷的大型团队,通常会试图将瀑布流程变成冲刺,包括通常的瀑布发布里程碑——alpha版、beta版、预发布版、生产环境发布版和清理(Cleanup)版。他们认为提供商业价值同样需要发布,如果一个团队需要六个月的时间来发布服务,那么首次冲刺将持续六个月。当这样的团队被告知要进行为期两周的冲刺时,他们经常会尝试将瀑布方法强制推入这个被缩短的冲刺周期,但是却不会起作用。
相反, 当使用现代软件工程最佳实践进行发布时,会移动到已运行的系统中去。微软从规划和体系结构开始, 构建一个功能, 然后执行代码;将远程测试就位, 以便跟踪系统中发生的情况并自动进行测试。开发人员应该能够很容易地发布代码,如果代码有问题,就会被踢回来。最终目标是让团队按下按钮, 就将功能发布到生产环境中。
随着团队在规模化敏捷模型中的成熟, 他们正在学习将发布过程与冲刺分开。在冲刺 (sprint) 中发生的事情不一定会在发布中达到高潮,而是代表定义的业务价值。随着团队采用越来越短的冲刺,他们意识到需要在更长的周期进行持续发布,即使仍需要六个月。随着时间的推移, 发布周期可能会变得更短, 但不需要与冲刺 (sprint) 匹配。通过分离冲刺与发布流程, 可以让敏捷系统更成熟, 也让发布周期更加成熟,互相不需要让另一方产生负担。发布应在后台进行。
经验和教训
在扩展敏捷方法时,微软了解到, 优先考虑以下方面很重要:
微软在做什么
随着微软继续进行现代软件工程的旅程,微软提供的商业价值比在瀑布模型下交付的要高,客户对结果更满意。使用微软模型来改进敏捷扩展的领域包括:提供更好的质量代码, 降低服务的波动性;设定并满足期望;团队成员积极参与这一过程;创建更准确的计划, 实现准确的预算编制;提供接近100%的计划增量功能。
在规模化敏捷的前提下,微软发现那些领导层最了解并参与流程的团队,将获得最大的好处。小型团队每天都在敏捷环境中工作,对这一套工作流程通过日常经验变得越发熟练。然而,项目和应用组合级别的团队领导,被从日常的敏捷过程移除了。此外,需要更长的时间来完成一个完整的周期而不是两周的冲刺,一个完整的周期可能需要几个月的时间。因此,领导层需要更长的时间才能完全理解敏捷方法是如何规模化运作的,甚至在领导者经历了一个完整的周期之后,微软期望继续扩展敏捷模型的规模来处理更大的项目,让领导者学习如何在更高的层次上管理敏捷。
为了加强对敏捷方法的采用,Microsoft IT/CSE将“直接负责人”(Directly Responsible Individual ,DRI)添加到了DevOps团队中,通过关注事件管理、服务可用性和服务健康状况等,轮换角色可帮助微软的敏捷团队在问题影响客户之前主动发现和修复问题。由于需要解决的服务问题越来越少,团队成员有更多的时间来交付业务价值。因此,微软得以更快的速度和更高的效率提供更好的服务。
增加直接负责人(DRI)是许多信奉DevOps文化的高性能敏捷软件工程团队的选择,这个角色也被其它不同的名字所熟知, 比如Google的“警长”(sheriff)或者 Facebook的“特定响应者”(Designated Response Individual)。在敏捷团队中轮换, DRI负责服务可用性、服务运行状况和事件管理,DRI以客户为中心并推动积极的变化, 以改善客户的服务经验。
在Microsoft IT/CSE中,也使用了DRI来帮助微软敏捷团队更快、更有效地提供更好的服务。DRI积极地着眼于生产环境中的服务, 从而帮助敏捷团队更加积极主动。这帮助微软敏捷团队减少了多达50%的服务请求单和bug数量,也让团队其他人有更多时间来提供业务价值。
没有增加DRI角色之前,微软工程师团队每天只能从每个软件工程师那里得到四到五小时具有生产力的工作。自从将这一角色添加到团队中,每个软件工程师每天可创造生产力成果的时间增加到六小时。该角色还降低了风险,因为解决问题不会影响团队在冲刺(sprint)上交付的能力。此外,微软还发现DRI减少了与服务项目交互的次数, 所以成本也在下降。
DRI流程与期望
在微软的敏捷团队中,有一个主DRI和一个辅助DRI。主DRI把时间100%分配给这个角色,没有其它团队任务。每天,主DRI要检查事件日志,对关键事件或事件模式作出响应,还记录缺陷,并根据根本性原因将其分配给个人工程师处理。为了保证可见性,辅助DRI会被主DRI抄送所有的事项。在主DRI不可用或繁忙的情况下,辅助DRI会介入。
所谓轮换,即主DRI和辅助DRI角色会在所有团队成员中轮替。为了实现无缝转换,辅助DRI成为下一轮的主DRI。在同一冲刺期间,主和辅助DRI不会与Scrum 大师的角色重叠。轮替的节奏是每两周一次, 与理想的两周冲刺节奏一致。这确保了DRI可以参加每隔一周举行的服务审查和其它服务线的会议。这还确保了DRI在冲刺中有足够的影响力,并且有机会花时间在首选的工程活动中。轮换从冲刺的第一天开始,持续到下一个冲刺的第一天,冲刺团队自行跟踪和管理他们的DRI计划。
对于出现的问题,DRI执行根本原因分析, 并与负责该功能区域或组件的软件工程师交互。DRI没有被期望成为英雄并修复所有问题;然而,如果问题很容易解决,DRI可能会独立地继续解决问题,同时也会跟踪扩展团队的可见性。DRI需要创建一个VSTS的工作项目,并在可能的情况下将其链接到出现问题的事件中,以便于追踪。
由于DRI活动需要团队的一定配合,这占用了团队的“带宽”,因此微软将主要的DRI时间安排为Visual Studio Team Services (VSTS)中的“休息日”,这使得DRI工作不会对冲刺计划产生影响。DRI以两种方式响应出现的问题。在核心工作时间内,DRI会检查需要解决的关键问题或问题模式。而在核心时间之外, 当需要软件工程来响应事件时,服务工程团队会与DRI合作。主要DRI的随叫随到时间表是轮换的,这样没有人需要在每年一个以上的主要假期中被随叫随到。
在处理严重程度较高的现场生产环境问题时,主DRI应该参与到辅助DRI的工作中去,除非主DRI确信问题可以快速解决。DRI还有权与具有相应知识从而可以帮忙的其他团队成员联系。找他人援助,即使那些人并被有处于随时被召唤状态,也是正确的做法。多人在关键问题上一起上可以缩短解决问题的时间并减少DRI的压力,否则DRI只能自己处理问题。这种互助也会帮助团队成员更加理解DRI,从而得到成长。
当然,微软希望随着DRI这一角色越来越成熟,将减少甚至最终消除对团队支持的需求,这样将解放敏捷团队的“带宽”,让他们创造更多业务价值和提高质量。今后,主DRI还将负责把软件部署到生产环境中,DRI将确保部署过程中具有正确的部署文档、自动化和验证,部署之后还将检查结果和服务状态。这种做法还将减少接触潜在敏感信息的团队成员数量,这也是一种符合Sarbanes-Oxley(SOX)法规的模式。
DRI收益
随着DRI主动调查内部异常和提交问题(Tickets)趋势,微软团队在每次冲刺时都在解决bug。这改善了客户经验, 减少了每周的异常和提交问题的趋势。
而当团队成员作为DRI参与时, 他们会获得有关端到端服务的知识。DRI负责全面了解服务、客户体验以及服务如何实现业务价值。这种更广泛的关注,使团队成员更负责地交付高质量的客户体验,并推动更丰富的设计。每个DRI都带来了独特的视角和不同的值,这种关注的多样性有助于团队在许多领域改进服务。例如,一个微软的DRI发现一个服务与数据存储不在同一个区域运行。这种模式在预生产中不存在,如果没有DRI的职能可能就不会被注意到。现在,团队可以将服务重新部署到与客户相同的区域,这将减少延迟并改善客户体验。
以前, 当客户遇到软件缺陷时, 会重试要执行的任务或使用其它已知的变通办法。DRI则在客户把问题升级之前,就主动识别阻断问题并修复缺陷。在某些情况下, 在客户甚至意识到存在问题之前,DRI就已经记录了软件缺陷,这极大地缩短了微软团队平均检测(MTTD)和平均解析(MTTR)两个指标的时间。
在企业的数字化转型过程中,通常期望从自己的IT团队中孵化出创新能力,通过自己的IT组织来推动数字化转型。然而,企业的IT组织往往背负“技术债”。企业内部IT往往行动缓慢、过度流程导向、缺乏灵活性、倾向于规避风险、缺乏创造力,这也经常导致企业会引入外部专家以避免内部IT的掣肘。
微软认为,与其引入外部专家,不如提高自己内部IT团队的现代化程度与能力。其好处包括确保更好的解决方案可持续性和可重用性,利用公司内部已经有的专业知识和关系,以及减少供应商支出和总体复杂性。从员工统计的角度来看,随着数字原生的千禧一代的越来越多,对速度、创意和新技术趋势的使用驱动力只会越来越大。
内部IT组织的现代化,可以从建立一个孵化中心开始,孵化中心是组织内的一个小组,专注于新的应用、新的想法、最新技术,并利用新的方法进行交付。该小组旨在与内部业务团队和其他IT团队合作,开发具有创造力和敏捷性的现代解决方案,他们必须愿意违反标准的IT惯例和流程,以超越客户的期望。
内部创新孵化中心的作用不仅仅是提供具体的解决方案,还向企业内部展示了可以在整个IT组织中采用的新技能组合和工作方式。一旦该小组开始取得成效,就可以作为其它更好、更快、甚至成本更低的交付的例子。其最终目标是转变为一个创新引擎——一个快节奏、灵活、有创意的数字化解决方案交付引擎,以类似于消费类初创企业的方式满足客户需求。
历史上,曾经的微软IT也引入了的现代化IT创新小组,旨在帮助满足数字化转型的需求。在2014年的时候,该团队分别位于华盛顿州雷德蒙德和印度海德拉巴,这个团队旨在创造创新的、具有消费者价值的企业级体验——让内部用户喜爱他们的设备,同时提供前所未有的灵活性体验。
微软现代化IT创新小组的方法论:
内部IT组织的现代化对任何企业来说都不容易,这就像在开发应用程序时执行迭代循环一样。当然,来自高管的支持也很重要。就微软而言,直接来自最高层。通过微软的实践,有理由相信大多数企业可以很好地将IT转变为创新引擎。(文/宁川)