文章指出,软件开发中的“蛇油”问题在于缺乏批判性思维。像瀑布模型这类被误解的方法,并非全无价值,关键在于甄别和提取其中有益的成分,避免盲目追随或排斥。
译自:Process Theater vs. Technical Excellence: A Recurring Software Crisis
作者:Steve Fenton
“江湖郎中(snake oil salesman)”一词常用于描述从事欺骗性营销行为的个人。像克拉克·斯坦利这样的狂野西部人物曾将他们的蛇油宣传为神奇的万能药。但在1916年,美国政府化学局对这种擦剂进行了检测,发现其价格过高且价值有限,斯坦利因此被罚款20美元。
然而,故事并未就此结束。
你可能正在使用蛇油
蛇油并非完全无用。虽然它确实与瓶子上的宣传不符,但某些成分,如辣椒素和樟脑,在用于正当目的时被证明是有价值的。
辣椒素来源于辣椒,现在被用于皮肤外用止痛产品中,以缓解肌肉和关节疼痛。它是一种FDA批准的治疗方法。樟脑也常被用作反刺激剂,帮助缓解昆虫叮咬引起的瘙痒。它也是胸部擦剂制造商的首选成分,你可能在感冒时将其用作减充血剂。
因此,尽管蛇油未能达到其推销者们夸大的宣传,但它并非完全没用。在软件行业中也是如此,因此能够将有价值的成分与被证伪的软件交付方法区分开来,是一项至关重要的技能。
瀑布模型价格过高且价值有限
“瀑布模型”一词通常作为分阶段软件交付的统称,其中任务按类似瀑布的顺序依次执行。当轻量级革命推翻了当时的重量级模型时,它造成了一种错误的观念,认为分阶段的软件模型是完全错误的。
但这些旧模型的创建者受到了委屈,因为他们一直告诉我们以这种新方式工作。
来源:《大型程序的生产》。赫伯特·D·本宁顿。1956年。
赫伯特·本宁顿(Herbert Benington)在1956年的论文《大型程序的生产》中,讨论了我们现在称之为平台工程的概念。本宁顿谴责了自上而下编程的思想,即在编写代码之前完成规范。温斯顿·罗伊斯(Winston Royce)在1970年的论文《管理大型软件系统的开发》中,建议人们以小增量更改的方式工作,因为这会降低复杂性,并允许组织在方向错误时回滚到以前的版本。这些思想在巴里·玻姆(Barry Boehm)的螺旋模型中再次出现。
敏捷的成功很大程度上归因于轻量级软件交付的倡导者如何巧妙地从1990年代主导行业的流行重量级蛇油方法中提取了好的成分。他们保留了好的部分,并丢弃了大量有毒的部分。
理解这一密集的过滤过程,是我们摆脱行业中反复出现的危机的途径。
反复出现的危机
危机源于管理层倾向于被流程吸引,并排斥技术和文化实践。他们渴望重新引入那些被专业移除的瀑布模型元素,并且希望丢弃他们不理解(或听起来很费力)的关键技术。
增加流程的重量同时降低技术卓越性是一条毁灭之路。
这种管理错误的典型例子来自敏捷的早期。在《敏捷宣言》时期,领先的轻量级方法是极限编程(XP)。它具有与Scrum相似的流程元素,以及一张相互关联的技术实践图谱,这些实践保持了较低的变更成本,这是长期维持敏捷性的关键。
对管理者来说,Scrum对流程的独家关注是无害的,而XP对技术技能的强调则让他们心生恐惧。在管理方面,Scrum是主导者。结果,我们原地踏步了十年,直到戴夫·法利(Dave Farley)和杰兹·汉布尔(Jez Humble)在他们的里程碑式著作《持续交付》中复兴并更新了XP的思想。
当然,Scrum并没有就此止步。当你没有技术卓越性时,Scrum的流程元素并不能带来敏捷软件开发所期望的结果。因此,管理层通过增加流程来“大规模运作”或“处理企业需求”。这背后的真正动机当然是流程对抗现实复杂性的舒适感,而这种复杂性只能通过社会和技术手段解决。
当DevOps首次出现时,它可以概括为打破开发和运维之间的壁垒。这个想法进一步细化为协调两个团队的目标,并鼓励他们更有效地协作。每个人都赞同这一点,直到十年的研究揭示了那些令人生畏的技术元素、转型型领导的必要性以及精益产品管理的价值。当DevOps变得过于真实时,逃避的愿望就愈发强烈。
从复杂的现实中仓促转向简化,是我们反复犯的错误。不客气地说,所有优秀方法的衰落,都是因为管理者们对他们本应更了解的事情,因恐惧而逃避。
寻找真正的疗法
软件行业的蛇油问题不在于我们技术和实践过多,而在于我们太少。在于我们失去了批判性思考它们的能力。我们应该精挑细选时却全盘接受。我们应该实验时却墨守成规。
最有效的软件团队不是找到了完美框架的团队。他们是那些学会从不完美的框架中提取价值的团队,他们理解每种实践都与上下文相关,并且不断质疑他们正在做的事情是否真的有帮助。
蛇油教会了我们重要的一课,但不是我们以为的那一课。不是说旧的疗法一无是处。而是我们需要看穿营销,了解真正有效的东西。软件实践也是如此。在每个框架、方法论和最佳实践背后,都隐藏着解决实际问题的核心洞察。
我们的工作不是盲目追随或不假思索地拒绝。而是理解、提取并明智地应用。
