从敏捷软件开发的视角看SpaceX 公司的管理模式
2023-12-30郑丹中国酒泉卫星发射中心
郑丹 (中国酒泉卫星发射中心)
1 引言
美国太空探索技术公司(SpaceX)成立于2002年,仅用20 年的时间就实现了火箭发射入轨、火箭回收复用、载人航天发射、“星链”星座部署等里程碑式的成果,成为了世界上最负盛名的商业航天公司。其像软件开发一般的强大的产品迭代能力,被称为“用写代码的方式开发火箭”[1]。SpaceX 公司的成功不仅得力于美国政府在政策、资金、技术和市场方面的大力扶持,也源于其独特的发展模式。SpaceX 公司的创始人埃隆·马斯克出身硅谷,这让公司继承了部分硅谷的精神与互联网基因[2],开创性地把扁平化管理、快速试错、迭代发展等敏捷项目管理方法应用到航天工程中,与传统航天在效率和成本方面形成了鲜明的对比。
软件工程和航天工程都是复杂的系统工程,都需要一套系统工程方法来避免质量低下、项目延期或者失败。软件工程发展50 多年,经历了由瀑布式开发到敏捷软件开发的逐渐转变过程,相比传统软件开发,敏捷软件开发更能适应迅速变化的需求,以较短时间和较少的成本开发软件,如今,敏捷实践已成为众多高效能软件组织的致胜之道[3]。航天工程也由传统航天的瀑布管理模式,出现了以SpaceX 公司为代表的“敏捷”模式,对传统航天的效益提出了挑战。
敏捷软件开发又称敏捷开发,2001 年,一些软件专家发表了敏捷宣言,标志着敏捷软件开发方法的诞生,敏捷宣言中的价值观分为四个方面:①个体和交互胜过过程和工具;②可以工作的软件胜过面面俱到的文档;③客户合作胜过合同谈判;④响应变化胜过遵循计划[4]。经过20 余年的实践,如今,“敏捷”已成为涵盖各种价值观、原则和实践方法的统称,也不再是不可分割的概念,不同的组织会关注不同的敏捷要点,可以自由地实施针对本领域更有效的敏捷要点[3],而SpaceX 公司为我们提供了商业航天实践“敏捷”的典范。以史为鉴,本文分析了传统软件开发向敏捷软件开发的转变过程,对比传统航天模式向“敏捷”航天模式的转变,从敏捷软件开发的迭代开发、重构、代码的集体所有权、自动化测试、尽早试错、消除重复代码这6 个敏捷要点,深入分析SpaceX 公司发展的关键理念,希望能为国内商业航天的发展提供参考。还有很多有效的敏捷要点,例如:简化设计、简化文档、客户合作等,没有在本文中给出,可以参考相关的敏捷开发文献。
2 迭代开发
敏捷软件开发中的迭代开发
传统的瀑布式软件开发按照需求分析、设计、编码、集成、测试及维护等步骤顺序进行,具有较长的发布周期[3]。敏捷软件开发的核心思想是迭代式开发,即将开发过程拆分成多个小周期,每个小周期都执行同样的流程(需求分析、设计、编码、集成、测试及维护等步骤),每个“小周期”都会新增一个用户可以感知的完整功能,通过尽早、持续交付有价值的软件使客户满意[1]。
传统的瀑布式软件开发首先要有一个良好的设计,然后才能开始编码,因此非常重视详细的预先规划、需求分析和设计。而敏捷开发在整个开发过程中都会响应用户的需求而不断调整,因此,通常只做一点点预先规划、需求分析和设计,而将大部分详细规划、需求分析和设计留到之后完成[4],这样就不会浪费时间去准备那些可能在后期被抛弃的详细规划、需求分析和设计[3],更适应客户需求和市场的不断变化。
迭代开发在SpaceX 公司的发展壮大中发挥了重要作用
SpaceX 公司采用了迭代开发模式,它首先设定一个不是那么广大的目标,先往前走,达到目标,给予市场一定的信心之后,再往前走一步,降低了开发风险,能够快速变更产品的技术状态,拥有了强大的履约能力。
(1)降低了开发风险
SpaceX 公司的愿景是将人类送到火星,但是,它并不是一开始就造大火箭,而是先造一个最简陋的小火箭猎鹰-1(Falcon-1)积累经验,在猎鹰-1第4 次飞行试验成功后,再研发中型火箭猎鹰-9,并于2008 年首飞成功,获得了创始人基金2000 万美元的投资,然后再研发“猎鹰重型”(Falcon Heavy)火箭,最后才研发能够登陆火星的“超重-星舰”(Super-heavy Starship)运载系统[5]。
(2)快速变更产品技术状态的能力
传统航天主张在前期设计中尽量暴露风险以降低错误成本,因此在前期设计阶段会投入很多时间和精力,产品技术状态将严格遵循前期设计结果,通常不会出现较大的变化。而SpaceX 公司的产品开发并不完全追求完美的设计,而是快速测试、快速失败、快速迭代,也就拥有了快速变更产品技术状态的能力,更能适应不断变化的市场需求。例如,公司能够根据美国国家航空航天局(NASA)的安全性要求,把第二代“龙”(Dragon)飞船的着陆方式由反推发动机改回到伞降着陆;果断叫停猎鹰-5 空射液体火箭的研制,摆脱了对载机的依赖;在“猎鹰重型”火箭运载能力提高的情况下,顺势取消了原定的推进剂交叉输送技术,降低了技术复杂度;在伞降回收火箭效果不好时,毅然改为垂直降落回收方案,取得了举世瞩目的成绩[6]。
(3)强大的履约能力
SpaceX 公司通过不断重复“规划、设计、制造、测试”的迭代开发降低了整体成本,实现了强大的履约能力。猎鹰-9 火箭的研制周期为4 年半,研制费约3 亿美元,而NASA 内部曾估算,如果自己制造猎鹰-9 火箭将花费17 亿~40 亿美元[7];“猎鹰重型”火箭研制费约5 亿美元;“龙”飞船的研制周期为4 年,研制费用约为3 亿美元,而日本“鹳”(HTV)货运飞船研制费用约为8.5 亿美元,欧洲航天局(ESA)“自动货运飞船”(ATV)研制费用约为19 亿美元。
3 重构
敏捷软件开发中的重构
在软件开发过程中,随着不断添加新功能和修改软件错误,最初设计的软件系统结构逐渐退化,代码质量也逐渐变差[8]。敏捷软件开发通过“重构”来应对这种情况。“重构”就是在不改变代码外部行为的前提下,对其进行一系列微小的改造,以改善程序的结构和设计[8]。重构的每个步骤都很简单,因此执行的速度非常快,但是,这些微小的修改积累起来就可以从根本上改善软件的设计,“重构”使软件开发不再依赖前期设计的完美性[8]。
SpaceX 持续开展全方位的“重构”
SpaceX 公司采用敏捷软件开发中的“重构”理念,持续对产品、生产方式、管理模式进行“重构”,实现了产品快速迭代升级和生产效率的不断提升。
(1)产品的快速迭代升级
传统航天在“保成功”的压力下,遵守着“如果可以运行,就不要改变它”的工程理念,在不得不改变的情况下,也需要充分的分析验证和繁琐的变更程序,因此,产品技术状态、生产方式和管理模式的更新较慢。SpaceX 公司通过对产品持续改良,实现了产品快速迭代升级。例如,“灰背隼”(Merlin)发动机最开始的推力只有30t,但它通过不断改良,研发了灰背隼-1A、1B、1C、1D、1D+,比冲接近分级燃烧的发动机,推力达到了109t,推重比达到了惊人的232[9]。猎鹰-9 火箭从2005 年到2018 年的14 年间研发了v1.0、v1.1、v1.2、v1.2Block4、v1.2Block5 等版本,同步转移轨道运载能力从4.5t一路提升到8.3t。从猎鹰-1 首飞到“猎鹰重型”第一次发射,10 年的时间,经历了多个迭代版本,SpaceX 公司将运载火箭的运力提高了15 倍。
(2)生产效率的持续提高
SpaceX 公司使用数字化的生产方式来避免传统航天缓慢的方案流程以及昂贵的改动成本[10]。公司曾耗时几个月将一些现成的软件和工具重新组合起来,以提高产品设计和生产的效率。例如,使用NX和Teamcenter 软件进行产品设计、模拟和数据管理;使用Leap Motion 体感控制器操控零件模型,工程师们只需了解模型的构建与交互原理,就可以通过手势操控和编辑零件模型,然后通过3D 打印机制成金属合金材料的原型;通过NX 软件为整个猎鹰-1 和猎鹰-9 火箭以及“龙”飞船建模,仅需5 ~10min即可加载25000 个组件[10],加快了产品设计的速度。
(3)管理模式的不断改进
SpaceX 不断在经营模式上改进,以适应其生产需求。例如,在SpaceX 成立初期,没有专门的质量管理部门,SpaceX 的质量人员分布在设计、生产制造、试验、测试、发射等各个环节,随着公司规模的扩大,为适应设计生产能力,质量管理部门也应运而生[11]。
4 代码的集体所有权
敏捷软件开发中的代码集体所有权
敏捷软件开发中的“重构”需要“代码的集体所有权”作为保障。如果编程人员没有全部软件的所有权,那么他只能修改本系统的代码,对其他系统的代码不能修改,而当一次“重构”涉及多个系统时,这个“重构”就会困难重重。因此,为了实现“重构”,开发团队的每个人都需具有修改全部代码的权利。同时,“代码的集体所有权”要求开发团队的每个人必须熟练掌握“重构”技术,以避免低水平的编程人员随意修改“代码”,反而会降低软件的质量,因此,敏捷软件开发团队的人员通常少而精干。
SpaceX 创建了能对全产业流程进行“重构”的经营模式
SpaceX 公司为了顺畅地开展“重构”,采用了扁平化的管理方式,确保公司每个成员都可以平等地提出对公司任何环节的改善建议;采用了“纵向一体化”研制模式,打通对全产业流程上进行“重构”的壁垒。
(1)扁平化的管理模式
传统航天一般采用“等级式”金字塔状的管理架构,管理链条较长[12],工程师们一般只对自己的工作负责,对与自己无关的工作几乎没有发言权。而SpaceX 公司采用了扁平化的管理模式,有意识地模糊部门的界限以促进信息交流[13]。在一个有6000 名员工的公司内,从普通工程师到马斯克之间的管理层级大约是4 ~5 层,各领域的员工平等地参与技术研讨、设计和开发等工作,很多新的想法都能够快速地传递到高级管理层,而高级管理层也通常直接和公开地认可员工取得的成绩[14]。
(2)创建精英团队
SpaceX 公司通过高薪招聘精英成员,并对公司成员进行交叉培训,公司中每个人都可以更多地参与开发过程[13],“少而精”的模式提高了整个公司的运营效率。
(3)提高信息交流效率
传统航天的各部门、各厂所之间的沟通手段相对匮乏,而SpaceX 公司通过建立一套完善的企业信息系统来支持研发、制造、采购等业务流程,提高信息交流的效率[14]。例如,采购人员可以从系统中下订单补充原材料和零部件的库存,工程师可以在系统中利用上述原材料和零部件来完成设计方案和工艺文件,最终生产部门的技师根据系统中的设计来查看每天需要完成的工作。公司除去发射场的员工外,不同业务部门的员工都集中在同一个开放的大型办公场所内,降低了交流的门槛和限制,将交流上的错误和不准确最小化[14]。
(4)纵向一体化的研制模式
SpaceX 采用纵向一体化的研制模式,实现了火箭研发、生产、试验、发射、销售和运营等全产业流程的集成[14],使公司能够在全产业流程上开展“重构”。在生产方面,猎鹰-9 火箭的生产线以及所有关键部件、结构和电气设备的制造全都位于公司总部0.05km2的厂房内;在试验方面,公司在得克萨斯州建造了面积为1.2km2的先进试验场,能够独立完成大多数的关键试验[14];在第三方服务上,公司不会让供应商提供火箭的关键部件,像发动机、子级、级间段、贮箱、整流罩、热防护和电气设备等大部分关键部件是由公司自己完成的,绝大多数供应商都仅提供机械加工服务或者商业现货部件[14]。同时,SpaceX 公司对供应商的筛选也有非常严格的标准和评估流程,以保证可靠性、成本及可用性。由于公司对于供应商的依赖度大幅降低,消除了在进度、技术性能方面的风险。纵向一体化让SpaceX 公司对研发、设计、制造、试验等所有关键流程具有全面的控制权,能够以最快的速度完成设计变更,确保生产进度,压缩时间成本,并且对火箭及其部件有更深入的认识和理解,实现更好的质量控制和更高的可靠性水平[14]。
5 自动化测试
敏捷软件开发的“自动化测试”
传统软件开发的测试通常安排在项目后期进行,并且由专门人员编写测试代码和用例,然后把测试结果反馈给编程人员,因此,测试与编程是分开的活动。由于软件排故的成本越往后越高,这种“最后测试模式”导致软件开发整体成本较高。敏捷软件开发为了避免在频繁地“重构”过程中引入不可避免的错误,在软件开发阶段就持续开展“自动化测试”,即测试代码和产品代码都由软件开发人员完成,一起放在软件里,并且自动运行,即软件对自己本身进行测试并检查测试结果[8]。
在传统软件开发中,“测试”强调覆盖性,这种理念产生的测试代码极为庞大和复杂,无论编码还是测试过程都比较缓慢。在敏捷软件开发中,“测试”是一种风险驱动的行为,对软件容易出错的边界条件等高风险点开展测试,而不会对非常简单的函数进行测试,确保从“测试”工作获得最大效益[8]。
SpaceX 的自动化测试
SpaceX 公司为了提高测试的效率,不仅面向风险开展测试,还在飞行过程中实现了在线监测重构技术,进一步提高飞行可靠性。
(1)面向风险开展测试
SpaceX 公司除了对其产品进行从部件到系统的一系列详尽的测试,还对全部硬件都测试非标准条件的工作状态[11],进一步提高产品的可靠性。并且,针对发动机点火的高风险性,利用了发动机可重复使用的优势,开创了发射台上的静态点火测试模式,进一步提高了飞行可靠性。
(2)自主研发测试工具
传统航天的测试自动化水平较低,“测试”成本占总成本的比例较大[15]。SpaceX 公司为了提高测试的效率,降低测试成本,自主研发了各种测试工具。例如,公司研发了火箭发射测试台,把火箭所需的所有硬件和电子设备的测试版本铺在金属台面上,用于模拟火箭的发射升空飞行过程[16],在火箭测试和排故中发挥了重要作用。在猎鹰-9 某次发射准备中,突然发现一个软件错误,先通过火箭发射测试台测试修改后的文件,然后再把文件上传给火箭,整个过程不到30min,最后火箭发射成功,据该公司的资深工程师分析,如果此类情况发生在NASA,只能等待3周之后再重新发射[16]。在焊接“星舰”不锈钢箭体时,公司开发了一种屏蔽X 射线机来检查焊接质量,仅需要几个小时就可以完成“星舰”的焊缝检测,提高了检测工作的效率。
(3)在线监测和重构技术
传统航天受限于箭载计算机的硬件水平,测试工作通常由地面系统在起飞前完成,在飞行过程中不再进行在线监测或重构。而SpaceX 公司则应用智能化的飞行软件进一步提高飞行的可靠性。例如,使用“发动机在线监测和重构”技术,使猎鹰-9 火箭在飞行过程中,即使一台发动机推力丧失,也可以通过在线调节其他发动机的推力实现入轨。
6 尽早试错
敏捷软件开发中的“尽早试错”
敏捷软件开发依赖于犯些“预期的探索性错误”,即在对结果没有十足把握的情况下仍然做出决策,且不论最终结果如何,都从结果中学习[3]。复杂的软件项目不仅依赖于从错误中学习,还需尽早试错,因为当软件需求连用户都说不清楚的时候,传统的软件开发是无法开展的,而敏捷软件开发却能通过尽早试错和迭代开发,迅速找出用户的真实需求[3]。尽早试错意味着失败的平凡化,因此,创造一种必要时毫不犹豫犯错的组织文化是很重要的,他们很高兴犯错,否则可能永远都不会增进对某些事情的理解[3]。
SpaceX“尽早试错”模式
SpaceX 公司采用“尽早试错”理念,在开发的整个过程中通过频繁试错实现产品的快速迭代和功能优化。
(1)“尽早试错”的理念
传统航天项目采用瀑布式开发模式,研制流程按照可行性论证、方案设计、初样研制、正样研制、飞行试验等阶段顺序开展,为了降低错误成本,在前期设计阶段会投入很多时间和精力。而SpaceX 公司则采用“尽早试错”的理念,节省了大量的设计分析时间,是实现快速迭代的重要技术途径。正如工程师大卫·吉格所说:“我们不会坐在那里分析某个产品好几年,SpaceX 是建立在测试基础上的[13]。”
(2)“宽容失败”的组织文化
SpaceX 公司建立了“宽容失败”的组织文化和工作氛围,鼓励员工勇于创新接受失败,失败对他们来说只不过是一次好的经历罢了[17]。当媒体问到为什么总是失败时,马斯克轻松回答:“我们每次试验都有目标”[18]。传统航天通常承担国家赋予的重大项目,飞行试验被安排在项目后期,用来验证整个项目的正确性,往往具有重要的政治意义和社会影响,这种前提下的“失败”不可能是一种好的经历。
(3)“尽早试错”的型号研发
SpaceX 公司在其各型号项目中均遵循“快速试错”理念,将成功建立在屡次失败的经验之上。例如,SpaceX 在验证猎鹰-9火箭可重复使用技术过程中,利用多型验证机进行试飞,连续失败多次还是坚持向世界展示飞行试验。在“超重-星舰”研发中,也是建造了多型验证机,通过频繁试错,实现设计的迭代和功能的优化[2]。
7 消除重复代码
敏捷软件开发的消除重复代码
软件代码重复的原因很多,最常见的操作是在添加新功能时,找到一段类似功能的代码,然后稍加修改使用。重复代码相当于自找麻烦,因为,一旦这种代码中有一个错误,很难找到全部类似的代码进行修改,并且由于这些代码并非完全相同,还需要逐个进行分析判断和修改。因此,敏捷软件开发中的一个重要原则就是消除重复代码,即避免对同一功能进行重复设计。
SpaceX 避免重复设计
SpaceX 公司通过火箭部件的通用化,避免了对具有相同功能的部件进行重复设计;通过构型收缩,避免了火箭型号的重复设计;通过继承现有技术,避免了对关键技术的重复研究。
(1)火箭部件的标准化和通用化
在传统航天里,对同一功能进行重复设计并不罕见。例如,同一枚火箭上采用了多种型号的电池,这些电池的性能、装配工艺和维护方法都存在或多或少的差异;火箭每一级的发动机型号也都不同,有的甚至推进剂都不相同。虽然这些差异性实现了性能上的最优,在一定程度上提高了火箭的运载能力,但也导致了生产、装配和维护过程中的额外成本。当每年仅发射数枚火箭时,这些额外的人力成本并不突出,但是当火箭大批量生产时,这些额外成本就会妨碍整体成本的降低。SpaceX 公司实现了火箭部件的标准化和通用化,通过批量生产的方式降低了设计费用及生产成本[19]。例如,猎鹰-9 火箭一级使用9 台相同的发动机,二级发动机是在一级发动机基础上的高空改进版,基本相同的发动机给生产带来了极大便利,同时大大降低了生产成本和生产周期;“猎鹰重型”火箭在猎鹰-9 火箭的基础上,增加了两个助推器,助推器与猎鹰-9 的芯一级基本相同,仅仅做了结构增强及部分适应性改进;全箭只采用一种推进剂,减少了发射场的推进剂保障难度;“龙”飞船分为载货型和载客型两种,除了座椅、舷窗、驾驶控制系统、生命保障系统、发射中止系统等外,其乘员舱和货运舱的结构几乎完全相同,可以在两种功能间快速切换,实现客货两用[13]。
(2)构型收缩
猎鹰-9 火箭以善于改进、逐步优化著称,但是只要完成改进,SpaceX 公司就会迅速放弃前序状态,将所有火箭构型归结为最终状态,比如目前只有猎鹰-9 Block5 火箭这样一种构型,构型收缩有利于公司维护产品技术状态、组织生产制造和发射[20],免除了不同型号微小差异带来的额外维护成本。
(3)继承现有技术
SpaceX 公司并不是从零开始研发,而是通过继承、组合和改进现有技术,避免重复设计。例如,“灰背隼”发动机直接来源于“阿波罗”(Apollo)计划中的登月舱下降发动机;发动机控制芯片的硬件与自动取款机(ATM)芯片同款[21];燃料箱焊接技术来自美国航天飞机成果;猎鹰-9 火箭一子级回收的凸优化算法源于美国火星着陆项目等。公司通过继承现有技术,降低了开发难度和成本,迅速发展成为商业航天的翘楚。
8 结束语
本文从敏捷软件开发的角度分析了SpaceX 公司快速发展背后的理念和技术支撑。公司在经营理念、管理模式、技术创新等方面的各种做法,从表面上看,其中的任何一个都不是发展航天所必需的技术途径,都是传统航天从其他方面可以补偿或者替换的,但是从敏捷软件开发的角度来看,公司的这些举措都是适应“敏捷”需求的,各种举措互为支撑和保障,才最终实现了低成本、高可靠、快速发展的目标。其他商业航天公司若想借鉴SpaceX 公司的敏捷发展模式,仅仅采纳它的“零星”举措是不够的,应从整体上去学习SpaceX 公司敏捷发展的一系列原则、理念和实践。