2017年10月10日 星期二

從法律經濟學的責任監管問題談 DevOps 間的關係



這題目是不是看起來有點太高深了,怎麼還可以跟DevOps扯上關係?

會有這樣的聯想,主要是啟發自薛兆丰的北大經濟學 - 法律經濟學單元,談論的主題是責任與監管問題,聽完的當下就突然覺好多東西似乎都可以用法律經濟學的角度來分析與解釋,因為在現實世界中很多東西都是 Tradeoff,不是非黑及白,但是總還是得做出判斷和抉擇,這時候法律經濟學的一個重要作用,那就是通過經濟分析,給我們的決策者提供可行性方案的比較和選擇。


身為一個工程師,我最先想到的就是 Dev & Ops& QA 常會討論的問題:誰要負責?到底誰多做一點可以免去另一方的痛苦?Dev 多做一點?QA 多測一點?Ops 多寫一點扣?



通常我們的思考都是線性思維,身處於怎麼角色就會從那個角色的視角思考,這其實是人類本能,所以常常就脫口而出:因為 xxx 所以 xx ,因此 xxx 應該要 xxx 就可以 xxx (不是在說上面大大們,上面大大說的都是對的! )

因此面對是一個複雜系統的真實世界,要跳脫線性思維改用系統思維則需要有效的工具和額外的練習,才可以看清整個局面的動態關係,薛兆丰老師在法律經濟學系列提出的第一個公式是漢德公式,這個公式是美國的漢德法官(Learned hand )用來釐清意外發生時誰要負責的簡單公式,假設有兩個人(or 公司跟公司),一個是甲方,一個是乙方:

B:甲避免發生意外的成本
P:乙對甲產生意外的概率
L:乙對甲意外所產生的損失

B < P * L

當 B < P * L 也就是避免發生意外的成本小於意外發生的損失時, 甲要負責,但是如果P * L 比較大,則乙負責,也就是說這個公式的核心精神是越是那些比較容易避免意外的人,他們所要擔負的責任也就越大。

所以透過這個公式就可以用來看Dev 和 Ops 誰比較避免意外?誰應該要負比較大的責任嘍?

但是責任的劃分本來就是一個連續的光譜,對應著法律術語就有一些定性的概念,比方說疏忽責任、嚴格責任等等,尤其是在現實社會,可能公式沒有那麼簡單,所以在可能會有更多種的責任分攤行為準則,在這邊薛兆丰舉了坦克與車的例子,我把它稍稍修改成 Dev 和 Ops 的範例希望可以更貼近我再這邊想要談論的議題。


假設一間公司有一個Dev 和一個 Ops負責開發維運系統,而一個營運中的系統難免會發生問題,為了減少問題的產生,我們應該怎麼去設計開發維運規則呢?

我們先假設營運中得系統發生問題只需要Ops去處理,都沒Dev的事,這樣假設只是為了方便討論,所以為了避免系統發生問題後所產生的損失,無論是Dev 或 Ops 都可以採取兩種措施:

第一就是增加預防性措施的投資。安裝各種監控軟體,設計各種HA的架構,演練設計各種fail over / roll back 軟體的方法,所有這些我們都稱之為預防措施。與此同時 Dev 和 Ops 在開發和維運系統都要盡量讓系統穩定,要付出一定的心力設計和實作,我們簡稱為注意力。也就是說做預防措施和付出注意力都能夠降低意外發生的幾率。 那麼,不同的開發維運規則設計,對Dev和Ops的行為會發生什麼樣的影響呢?

情況1:Dev不承擔任何責任 這個表標著「1」的那一欄,說的是開發維運規則規定,無論任何時候發生系統問題,Dev 都不需要負任何責任。在這種情況下,你細看,Dev 既不會付出注意力,也不會做出任何的安全防範措施,所有責任其實都落在了Ops身上。 所以Ops 會先付出代價、先做投資給系統營運做防範措施,安裝監控系統、設計各種HA的架構、演練設計各種fail over / roll back 軟體的方法等等。他支付的這些防範措施,支付到什麼程度為止?支付到邊際收益等於邊際成本為止,Ops 有多少人力和資源,他就相應地做多少防範措施。 與此同時,他也付出注意力,也就是說要小心營運,要遵守開發維運規則。 所以你看這一欄,在這種情況下Dev和Ops,為了防止意外所要做的貢獻分別是「否、否、是、是」。   (好幸福的Dev啊~~)

情況2:Dev 承擔嚴格責任 而你看這個表當中被標誌為第「2」的那一欄,在這一欄里情況剛好相反,開發維運規則規定,無論發生什麼情況,只要發生問題,Dev 便負有全部的責任。這1和2的兩種情況剛好倒過來了,所以Dev 和Ops 對防範意外所做的貢獻剛好相反,是「是、是、否、否」。
 (好幸福的Ops啊~~)

情況3:Dev 承擔疏忽責任 在標誌為「3」的那一欄裡面,開發維運規則規定Dev只需要負疏忽責任,也就是說Dev 只要能夠付出注意力,只要他在開發的過程中遵守開發維運規則就可以了,於是Dev 不會投資做任何安全防範措施。 與此對照,Ops 不僅要投資做防範措施,而且維運的時候也要小心,還要遵守開發維運規則。結果他們兩者對避免意外所做的貢獻就是「是、否、是、是」。

情況4:Dev 承擔嚴格責任+疏忽責任 在標誌為「4」的那一欄裡面情況更複雜了,那就是一旦系統發生問題,Dev 要負全部的責任。而與此同時,如果Ops 沒有遵守開發維運規則,他就要負連帶責任,也就是說Ops 他只要遵守開發維運規則就可以了,只要付出注意力就可以了,所以他就不會對維運進行任何安全措施上面的投資。 結果他們兩者對避免意外所做的貢獻就是「是、是、是、否」。

你看四種不同的開發維運規則,就會產生四種不同的行為規則,開發維運規則本身是可以相當精准地支配人們的行為的,至於我們應該選擇哪一種開發維運規則呢?那就要看在具體的情境裡面,哪一種開發維運規則使得公司為了避免意外所需要付出的成本最低,我們就選擇哪種規則。 這個歸納很有意思,這體現了法律經濟學的一個重要作用,那就是通過經濟分析,給我們的決策者提供可行性方案的比較和選擇。

回頭看現實公司組織責任的劃分似乎都比較偏向3 or 4?不...這時候第五種情況出現了....
這時候就產生了DevOps 一條龍,要負責完全的責任,也要付出注意成本,也要投資防範措施.......


The End.....







沒有留言 :