心理学和行为经济学与软件开发有什么关系?
企业IT部门软件开发的成败,乃至企业数字化的成败,不仅取决于企业能否选择合理的软件开发技术和过程, 更取决于运用这些技术和过程的软件人 ,能否做出提升软件产品质量和用户价值的 有效 行为。
而“心理学的目标,就是描述、理解、预测和干预人们的行为”(Coon, D.; Mitterer, J. O.; 2013)。
另外,包括行为经济学在内,“所有的经济学,都是研究行为的,即研究人们在不同情境下,当需要采取行动和分配资源时,如何做出选择”(Wilkinson, N.; Klaes, M. ; 2017)。
由此可见,为了提升软件产品质量和用户价值,企业需要描述、理解、预测和干预软件人在工作中的行为,这就将软件开发与心理学和行为经济学联系在一起。
不懂人心地做软件开发会怎样?
举一个不懂人心强推敏捷工程实践,导致浪费的例子。某企业IT部门管理者认为,开发人员在写代码前,采取先写测试代码的TDD(Test-Driven Development,测试驱动开发)实践,能促使开发人员在实现需求前,思考该如何验收生产代码,并做小步重构。由于良好的测试代码只测试封装良好的接口,所以这样做,有利于设计或重构出高内聚低耦合的代码。另外所写出的自动化测试代码,能保护生产代码的逻辑,不会在将来被自己或其他人破坏掉。
开发人员听明白了这些好处,也在编程道场里练过了TDD。但等回到工位上,看到管理者走过来 催进度 ,在进度的压力下,开发人员就会很自然地把TDD抛脑后,只关注对自己绩效考核直接挂钩的进度,毕竟这是管理者最看重的。
即使企业IT部门为了提升产品质量,制定了必须把测试代码和生产代码同时提交的开发规范,并在部门内进行了宣贯,在持续集成流水线上设置了门禁,若发现测试代码没有和生产代码一同提交的情况,就不允许提交代码,但开发人员还是有办法 应付差使 ——随手写几个没有assert断言的测试代码,与生产代码一起提交了事。
这样没有断言的测试代码,能让其所覆盖的生产代码运行起来,通过工具能让测试覆盖率在研发效能仪表盘上显示出令人振奋的数据。但由于测试代码不做任何有关代码逻辑质量是否达标的判断,所以根本起不到生产代码质量保护网的作用。这种不懂人心的软件开发实践,只会让开发人员浪费宝贵的时间,写一个花架子测试代码,摆样子罢了。
懂人心的软件开发会是怎样的?
如果IT部门的蓝军小组(这是国内的叫法,在国外一般叫红队;Hoffman, B. G.; 2017),事先与开发人员合作,设计出生产环境故障注入实验。之后告诉开发人员,在新代码上线后,会有一个自动化的故障注入工具,专门在上班时间,针对生产环境关键业务逻辑的代码,注入事先设计好的故障,验证开发人员所设计的系统稳定性代码是否奏效。这样会有什么结果?当然,这种生产环境的故障注入实验,会预先在实验设计中,对故障爆发的范围进行了控制,设计了紧急情况下的恢复预案,并在准生产环境进行了验证,以避免生产环境故障注入实验严重影响业务。
由于懂人心的蓝军小组,充分顺应了开发人员敬畏生产环境的心理特点,所以开发人员此时 会把自己手上其他的工作暂时放一放 。在故障注入前,会优先做强化生产环境系统稳定性的设计和实施;在故障注入后且出现小范围的生产故障时,会优先排查和解决生产问题。
这样的懂人心的软件开发,再加上与之配套的混沌猴工具,Netflix公司在2011年就已经在其亚马逊云生产环境上大规模实践过了,且取得了良好的规模化提升系统稳定性的成效。之后,该公司将这种实践,命名为混沌工程,并在2020年,出版了同名书籍。
但遗憾的是,包括《混沌工程》一书的作者和该书所有篇章作者在内的混沌工程实践者,都只强调混沌工程的技术和过程,却 忽视了顺应软件人视生产环境为神明的心理特点 。而这才是规模化落地生产系统稳定性的关键点。
虽然混沌工程的高级原则,明确指出要在生产环境进行故障注入实验(Rosenthal, C.; Jones, N.; 2020),但由于没有强调上述关键点,其后果,就是我在为客户做混沌工程咨询项目时,以及在阅读一些企业混沌工程实践经验分享文章时,看的这样的场景:国内众多企业的故障注入实验,往往 止步于测试环境和准生产环境 。在生产环境进行故障注入实验,他们犹豫再三,终究下不了决心。这导致混沌工程实践,沦落为另一种软件测试。“混沌工程不就是测试吗。出问题给我发邮件。”开发人员对测试人员说完后,就 又忙着手上进度要求最紧的事情了 。混沌工程实践在准生产环境所发现的生产系统稳定性问题,被抛入长长的bug待办项列表里,不知何时有出头之日。
作为《混沌工程》一书的合译者,我在翻译这本书时,当看到要在生产环境进行故障注入实验这条高级原则,也只是目光一扫而过。只有在后来,当我在做混沌工程咨询工作时,看到故障注入实验仅在测试和准生产环境进行,引不起开发人员的重视,并且在阅读了行为经济学的书籍,进行了深入的思考,才悟出开发人员视生产环境为神明的心理特点,才是混沌工程成功的关键点。由此看来,只有 在生产环境中进行的故障注入实验,才配得上叫混沌工程 。只在测试和准生产环境中执行的实验,不能叫混沌工程,只能叫测试。