为什么奥巴马医保网站注定要失败 - 彭博社
Paul Ford
来源:healthcare.gov;插图由731提供就在美国政府于10月1日关闭的同时,新的国家医疗保险交易所也在healthcare.gov上线。该网站旨在为希望根据《平价医疗法案》购买健康保险的人提供服务,但从一开始就失败了。对于希望注册的数十万美国人来说,该网站无法使用。页面无法加载。一位试图通过网络聊天寻求帮助的女性被告知 “请耐心等待” 令人恼火地被告知了40次。尽管奥巴马政府官员承诺“故障”会迅速修复,但错误和问题的清单却不断增加。
Healthcare.gov不仅仅是一个网站;它更像是一个构建医疗市场的平台。访问该网站就像去餐厅。你坐在餐厅里,阅读菜单,然后告诉服务员你想要什么,服务员就会带着你的订单去厨房。餐厅是前端,所有的按钮和表单都在这里。厨房是后端,所有的数据库和服务都在这里。最负责后端的承包商是CGI Federal。显然,正是该公司的系统在数千名同时用户的负载下崩溃了。
但问题不仅仅是厨房着火了。报警系统也不起作用。服务员听不到厨师的尖叫。外部人员很难确切了解发生了什么,因为CGI Federal的代码被锁在视线之外,该公司也没有回复媒体的询问(包括来自彭博商业周刊的询问)。你无法引起服务员的注意来拯救自己。
宽泛地说,healthcare.gov的推出是一团糟。咨询公司Millward Brown Digital报告称,在第一周尝试在联邦交易所注册的370万人中,只有1%的人成功注册。即使问题得到解决,这场灾难也清楚表明,政府是时候改变其代码发布方式了——即通过采用已经彻底改变技术行业的软件开发方法。
像 谷歌、 亚马逊、推特和 脸书这样的公司都以平台与应用程序之间的互动为思维方式。他们部署了许多小团队,期望他们随时发布新功能和修复——有时是每天。就像任何涉及人类的事情一样,发布代码可能会演变成争吵、错过截止日期和缺陷发布。编程社区的关键认识是,解决这些问题的办法是创造更多的透明度,而不是更少:代码审查、大量的“单元测试”来自动发现缺陷、定期的站立会议,以及不断将新代码推向公开环境,让真实的人使用。举个例子,在线市场巨头Etsy的开发人员被鼓励在工作第一天就向世界发布代码。
政府IT无法以如此透明的方式运作。或者可以吗?已经有一整套工具、方法和流程准备好可以使用,这些都体现在开源软件开发的文化中。美国联邦政府在行政部门的领导下,应该默认将所有由纳税人资助的软件开发开源。从短期来看,这将有助于防止像困扰healthcare.gov的问题再次发生。从长远来看,这将导致更好、更安全的软件,并可能使政府更有效地提供一系列服务。而且这也将丰富民主。
自由软件运动的基本目标是让任何想要的人都能获得有用的软件代码。三十年前,这听起来像是共产主义,因为代码被视为一种财产。但在最近几十年里,许多人开始相信软件代码更像是一种对话。(正如 一本著名的编程教科书 所说,“程序必须为人类阅读而编写,而仅仅是为了机器执行。”)这就是为什么人们说自由软件是自由言论的自由,而不是啤酒的自由。
想要开源代码吗?选择一个 自由软件许可证,并将您的代码与该许可证的文本一起在线发布。这就是所需的一切。然而,历史表明,仅仅授权代码并使其可用是不够的。您需要围绕您的项目创建一种文化,并与其他从事相关工作的人员互动。如果您做得好,您和您的合作者可以创建出优秀的一流、高度安全的软件。像Mozilla Firefox和Google Chrome这样的网络浏览器就是这样构建的。您口袋里的智能手机很可能是建立在一个开源内核之上的。
政府在典型的开源项目中具有优势。人们,包括程序员,天生对它所做的事情感兴趣,通常是因为他们的生活受到直接影响。如果美国想要的话,可以动员一支准备支持官方工作的感兴趣的编码者队伍。
有趣的是,healthcare.gov的第一个发布版本是开源的。当它在六月推出时,最初的网页前端(餐厅,而不是厨房)被 广泛赞誉为一个现代、开发良好的网站——对于政府工作来说相当不错。它是由一家名为 Development Seed的公司编码的,这是一家位于华盛顿(D.C.)的初创公司。它在healthcare.gov上的所有工作都在 GitHub上公开可用,这是一个庞大的开源协作平台。
Development Seed被引入作为分包商,特别是因为它在GitHub上有大量代码。它在healthcare.gov项目中的部分是“默认开放的,” Eric Gundersen,Development Seed的总裁说。当它推出时,该公司“开源了整个代码库”(代码库的简写)。它是建立在开源框架之上的,例如 Bootstrap,这是Twitter的衍生产品,以及 Backbone.js,这是非营利组织DocumentCloud的衍生产品。使用这些解决方案节省了无数小时,并且没有成本。Gundersen说,Development Seed在重新利用软件的过程中贡献了改进。这种方法——多拿一点,少给一点——就是开源工作的核心;所有的小改动在数百万个项目中累积起来。“从整个项目的开始到结束,花了三个月零25天,”Gundersen说。“我们在一个非常快速的冲刺周期中运作。”(整个healthcare.gov的开放代码库自那时起已从GitHub上删除,且没有明确的解释,尽管第三方能够从外部备份中恢复代码。)
Development Seed 的工程师们并不是革命的英雄。他们是政府的分包商,按照分配的工作,采用最佳实践以透明的方式完成任务。冈德森本人指出,他的公司所使用的方法没有什么特别不寻常的。最终结果是一个有效的前端,即使 healthcare.gov 的其他部分没有。“我们对发布感到失望,因为我们想为我们的团队购买医疗保险,”冈德森说。
如果你从未查看过 GitHub,花些时间探索一下这个网站。它建立在 Git 之上,这是一个开源的“版本控制”系统,提供了一种跟踪项目随时间变化的方法。你可以快进或倒退历史,以查看项目如何成长和演变,并通过一个命令创建衍生项目。你还可以报告错误或提交更改,项目经理可以接受或拒绝这些更改。一些 项目可以追溯到几十年前。
healthcare.gov 的初始发布是基于这些原则构建的,但网站的真正核心——更大、更复杂的后端——却不是。这个过程仍然不透明。根据专注于提高政府问责制的非党派组织 Sunlight Foundation 的说法,至少有 47 家承包商以某种方式参与了《平价医疗法案》。白宫尚未发布自己对发生了什么的解释。因此,我们不知道出了什么问题;我们不知道它是如何构建的;就任何人所知,该项目没有为更大的代码开发文化带来任何回报。
为什么像GitHub和其他网站提供的开放、经过验证的流程不成为政府工作的常态?在评论healthcare.gov的失败时,Clay Johnson来自更好技术部,一家为政府设计和构建软件的公司,写道:“6500页的法规、繁琐的商业注册流程和敌对的投标环境确保了很少有新企业能够竞争合同。”此外,在维基解密和爱德华·斯诺登的时代,安全漏洞的恐惧使得官僚们对透明的软件开发过程产生过敏反应。根据汤姆·李,阳光实验室的主任,“最大的障碍是开放数据被视为全是下行风险。”
软件系统现在如此庞大,以至于它们无法与其他系统分开存在。代码总是依赖于其他代码。它从未完成:今天写一段软件,十年后你可能还在调试它。现代软件开发更像是可持续林业,你期望年复一年地回到同一片林地。科技行业已经认识到软件是一个过程。然而,美国政府却坚持认为它是一个产品——这很讽刺,因为我们可以追溯到一部开放的宪法,该宪法在第五条中定义了修宪的方式。
其他国家已经在开源方面有了国家级的规定,德博拉·布莱恩特说,她是公共部门采用开源软件和方法的专家。她列举了巴西、西班牙、法国和马来西亚作为例子。“我认为白宫在开源领域制定行政命令将非常有帮助。对于每一个在开源方面有所作为的[公务员],可能还有十几个希望得到这种行政命令所提供的保护的人。”
安全问题呢?如果每个人都能看到代码,黑客难道就不会有机会吗?不会。首先,没有人主张将私人用户数据公开——只是处理这些数据的代码。美国国防部,一个有着相当严格安全顾虑的组织,拥有一个很好的常见问题解答关于开源。“国防部是否使用[开源软件]进行安全功能?”是其中一个问题。答案是明确的“是”。消除用于国防的开源代码“将对国防部分析和保护其自身网络免受敌对入侵的能力产生立即、广泛,并在某些情况下是强烈负面的影响。”
目前,数十万人在开发项目时使用开源软件。这包括世界上最大的公司、无数初创企业和许多政府机构。有许多公共部门的开源项目(其中许多在停摆期间无法使用)。为使开源成为政府工作的标准奠定了基础。尽管如此,开源并不是灵丹妙药,正如汤姆·李所警告的。“healthcare.gov的确切问题尚未完全了解,”他说。“而且开放过程有时可能会更慢。除非它们真正有用,否则它们也不总是能吸引建设性的关注。”
他说得对。在被拆除之前,Development Seed 在 GitHub 上发布的 healthcare.gov 代码有一个关于“死亡小组太多”的错误报告。但也有真正的错误报告,还有很多人希望通过错误报告和代码补丁与政府更积极地互动。这听起来可能很奇怪,但有些人会为了乐趣而提交错误报告并追踪问题。培养这种开放性对每个人都有帮助,并将人们带入一个新的、奇怪的、令人兴奋的公民过程。
当被问及对 healthcare.gov 的看法时,《为什么我们失败:从体验设计失败中学习》的作者维克多·隆巴尔迪(Victor Lombardi)持乐观态度。“这些问题听起来并不灾难性,”他通过电子邮件写道。“我认为媒体只是需要一些话题。”(咳。)“历史可能会将这个项目视为革命美国医疗系统的催化剂,”他总结道,“而没有人会记得启动时的几个小问题。”
我们正在见证软件开发历史上最可怕的代码审查的开始
毫无疑问,这些问题会得到解决。所有的错误在总统的注视下都是浅显的。与此同时,很明显,数千万美元已经花费在启动一个破碎的东西上。(实际数字令人不安地难以确定,这是另一个透明度可以帮助的地方。)而共和党领导层没有浪费时间进行攻击:参议员拉马尔·亚历山大和众议员达雷尔·伊萨向卫生与公共服务部部长凯瑟琳·西贝lius发送了一封信,要求对一系列措辞强烈、高度技术性且合理的问题作出回应。众议院议长约翰·博纳称这一推出为“火车出轨”;参议员帕特·罗伯茨呼吁西贝lius辞职。我们正在见证软件开发历史上最耗人精力、最可怕的代码审查的开始。
无论你对医疗法案的看法如何,这都不是制作软件的正确方式。我们可能永远无法阻止网站崩溃或防止错误进入代码。但开放这个过程将揭示出问题出在哪里以及为什么。人们仍然可以获得大量报酬为政府编写代码,如果这就是所需的。他们只是不应该在秘密中进行。美国需要表明所有开发都将在公开环境中进行,使用像GitHub这样的工具,或者直接使用GitHub。如果有些事情由于安全或版权原因无法公开,那也没关系;说明原因并获得豁免。
修复healthcare.gov的问题将是昂贵且政治上有争议的。但这也是一个学习为什么会出错并确保这些问题不再重复的机会。随着越来越多的政府服务通过互联网以软件形式提供,确保其背后的代码公开是至关重要的。一个开放的社会应该是一个开源的社会。