為什麼奧巴馬醫保網站註定要失敗 - 彭博社
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的問題將是昂貴且政治上有爭議的。但這也是一個學習為什麼會出錯並確保這些問題不再重複的機會。隨着越來越多的政府服務通過互聯網以軟件形式提供,確保其背後的代碼公開是至關重要的。一個開放的社會應該是一個開源的社會。