修正組織的功能障礙
- 編輯:admin -在上面的引言部分,我們提到,JAD是個跨部]的流程。在存在功能障礙的組織中,實施JAD1會很有難度,但對治療這種功能障礙來說,JAD卻是絕對必要的。工程師和運營人員相互不信任的情況,在大多數公司都存在。團隊之間互不信任,甚至互相憎恨,這種情形雖然可悲,卻很常見。在我們找出解決這種功能障礙問題的辦法,開始通過團隊合作構建可擴展的應用之前,我們需要理解,為什么會存在這種問題。
在上面的引言部分,我們提到,JAD是個跨部]的流程。在存在功能障礙的組織中,實施JAD1會很有難度,但對治療這種功能障礙來說,JAD卻是絕對必要的。工程師和運營人員相互不信任的情況,在大多數公司都存在。團隊之間互不信任,甚至互相憎恨,這種情形雖然可悲,卻很常見。在我們找出解決這種功能障礙問題的辦法,開始通過團隊合作構建可擴展的應用之前,我們需要理解,為什么會存在這種問題。在大多數軟件開發組織中,不難找到一個工程師,他會覺得架構師、運營人員、數據庫管理員、系統管理員和網絡工程師要么就是不懂編碼,要么就是沒有完全理解軟件開發流程。另外方的不信任也很常見,即運營人員或架構師覺得軟件開發工程師只懂得編碼,不懂高端的設計或整體系統的概念。更糟的是,他們互相覺得對方的工作與他們自己的目標是直接對立的。你常常會聽到運營人員小聲抱怨,“如果軟件開發人員停止在服務器上發布代碼,他們就會保持服務器一直是運行的”,而軟件開發人員則會小聲地反擊,“如果不是運營人員讓他們遵守那些愚蠢的規章制度,他們就能開發和調試得更快”。這些想法和疑慮對應用和組織的可擴展性來說,打擊都是毀滅性的。它們也表明,不僅存在于業務部和技術團隊之間,也很容易出現在技術團隊內部。
對于經驗的鴻溝,我們曾經指出,兩個團隊之間教育和經驗的差別會給溝通造成破壞性干擾。軟件開發人員和系統管理員在大學中接受的正規教育可能非常相似,例如都是計算機科學專業,
也可能有很大不同,例如個是計算機科學 專業而另一個是計算機工程學專業。 真正使兩者開始出現較大不同的是在職教育。系統管理員或數據庫管理員前幾年通常會得到高級管理員的指導,直到他們精通某項技術為止,這樣會提高他們在那個領域中的專業性。軟件開發工程師的職業路徑相似,只是關注的是軟件開發語言。至于應用在哪臺服務器上運行、應用調用的是哪個數據庫,對于軟件開發工程師而言都是最不關心的部分,這樣他們才能專注于功能的開發。
一旦兩個團隊在一開始就存在經驗的鴻溝,那么當我們增加了不同的目標,有時甚至是相反的目標時,他們就會漸行漸遠,以致看不到任何共同點。在大多數組織中,團隊之間并沒有共同的目標。如果本意是想讓團隊一起合作,而不是讓他們彼此爭斗,那么這就是問題所在。運營團隊的責任通常是保證站點的正常運行時間或者可用性,任何停機時間都會使他們的獎金減少。而開發團隊的目標通常是交付新功能,錯過了交付日期就會使他們的獎金減少。在CTO看來,所有的目標都會被分配給各個團隊來處理,各司其職,無所疏漏。但現實是,像這樣劃分目標,事實上會引發團隊之間的沖突。
開發團隊交付新功能的目標會促使他們想盡快完成編碼,如果出現故障了,他們認為自己可以隨時修復代碼。這是迄今為止實現代碼的初次交付最快的方式,而交付時間通常也是唯一的衡量標準。但長期來看,這種方法實際上花費的時間更多,因為發現問題、修復問題以及重新部署代碼修復這一-問題的過程會花費很多時間。但正如前面我們提到的,這種交付后的時間,通常不會被計算在內,因此不會出現在交付目標中。
根據運營團隊的目標,他們想要的是保持站點正常運行,提高可用性。這就會促使運營團隊拒絕生產環境的變更,因為變更是造成問題的主要原因。他們認為向生產環境發布的代碼越少或者做的變更越少,團隊就越有可能實現目標。不論他們是否意識到,運營團隊突然間變得不怎么愿意讓代碼發布到生產環境了,事實上他們甚至還會開始查找系統變慢的原因。
現在你應該明白了,你有兩個或多個團隊,雖然他們各自對系統和架構的一般原理有著深刻認識,并對你的系統有具體了解,但他們就是本能地互相討厭對方,很不愿意協同合作。那么如何解決這個問題呢? JAD流程是個很好的人手點。正如我們將在下一節中討論的,JAD是個合作流程,它會用一個共同的目標把各個部門的團隊成員拉到一起。JAD團隊要么一起成功, 要么一-起失敗,對此在它的組織和領導團隊上就能體現出來。
JAD的基本網站建設思路是,一個重要功能不能只分配給軟件開發工程師,還要分配給個架構師以及至少一個運營工程師(數據庫管理員、系統管理員或網絡工程師),可選的還包含產品經理、項目經理和質量保證工程師,這可以根據該功能的需要而定。這個團隊的職責是根據組織已有的架構設計原則提出一個設計,這個設計要使系統能夠持續地擴展,使這個功能能夠滿足產品的要求,并且還要能夠通過ARB的審查。這個團隊中的成員最終要向ARB陳述這個設計,它是由這個團隊的同級人員和經理構成的,它將決定這個設計是否滿足標準。幸運的是,這種合作不會僅止于設計,由于這些人都已經和這個功能密切關聯在一起了,所以在這個功能的整個生命周期中,他們都會積極地關注它,確保它是成功的。這樣軟件開發工程師要對設計以及它在生產環境中的表現負責,數據庫管理員則要負責這個功能的設計不僅是可擴展的,還要能夠滿足業務需求。如此這般,我們就用一個共同的目標,讓軟件開發人員、架構師和運營人員一起協同工作了。