建立快速響應軟體開發的四個關鍵 - Andy Hunt

banq發表於2019-01-17

這是成功的現代軟體開發策略的四個基本部分。
  1. 無可挑剔,可靠,自動化的構建和部署系統
  2. 有效,低摩擦的協作
  3. 不斷學習和提高技能
  4. 可更換的一次性軟體的設計

無可挑剔,可靠,自動化的構建和部署系統
您,您的團隊以及您的組織必須依賴並依賴於連續,自動化的構建和部署。
無論您如何熟練地與使用者合作,創造出令人敬畏的新介面,提出出色的創意,優雅的設計和架構等等 - 如果您無法可靠地構建和部署您正在編寫的軟體,那麼您可能也是如此根本不打算寫它。
透過推廣“DevOps”和更好的工具,大多數團隊都會聲稱他們手頭有這樣的問題:版本控制,構建,測試和部署。但你真的能夠連續構建嗎?看看這些相關實踐的評估部分:


細節很重要,這就是我們開始嘗試為這些基本活動提出具體評估的原因。您可能認為您的團隊已準備好進行持續開發,但也許您正在做的一些實踐阻礙了您。例如,如果你有長期執行的功能分支,必須在將來某個時候重新整合到Master,那麼恭喜你!您剛剛重新發明了“瀑布”。您可能希望在生產中使用功能開關。

有效,低摩擦的協作
在這種情況下,“我們”是參與專案的每個人:團隊,高管,使用者。我們都必須找到一種合作的方式,這可能很難,因為我們所有人都有不同的議程,不同的要求,不同的技能組合,不同的價值觀和不同的觀點。
無論在技術,進度,人員配置等方面存在任何分歧的細節,首先要問的問題是“有什麼意義?”。
換句話說,我們努力服務的最終企業願景是什麼?我們甚至知道嗎?如果沒有,我們如何在面對低水平,每天的問題時做出正確的決定?“有效協作”的一個方面是每個人 - 從高管到開發人員 - 需要知道什麼是重點?。你不可能希望讓組織指向同一個方向,直到每個人都知道這個方向是什麼,以及為什麼我們這樣做。
合作的另一個重要方面是一個通常被稱為“心理安全”的想法。這意味著你有一個人們可以安全地承擔個人風險的環境:安全地表達想法和意見; 可以安全地嘗試替代設計,不同的方法。如果團隊成員害怕被嘲笑,或者失去地位甚至失去職位,那麼您的環境就不安全,您將無法達到任何有意義的協作水平。
您的組織中是否有足夠的心理安全水平?檢視這些相關實踐中的評估,並檢視:


不斷學習和技能提升
對不斷變化的唯一防禦是不斷學習。
不斷學習是任何技術領域生活的基本要求。但是,除了將API填入最新的JavaScript框架之外,還有更多的“學習”。
你必須“學會”幾乎和你學到的一樣。
這是讓人們嘗試學習新的開發方法,或學習新的程式語言範例(例如,從程式到物件導向到功能)的事情之一。你必須擺脫舊的習慣,舊的心理地圖,解決舊問題的方法,因為現在所有這些都是不同的。
是的,它是不變的。沒完沒了。它也不僅限於新興技術。改變來自各地:

  • 觀眾和市場
  • 正在建設的不斷髮展的系統
  • 使用者不斷增長的實現他們的需求和要求,他們學習他們
  • 技術細節(這個框架與那個)
  • 範例(SQL vs NoSQL,OO vs FP,MVC和變體)
  • 提高自己的技能和能力

任何現代“方法論”都應該包括團隊和個人的學習實踐。這不是你可以忽視或降低到企業一年一度的“羊圈”訓練的東西。以下是您應該做的一些學習型實踐:

設計可更換軟體
你需要能夠輕鬆地嘗試一下。軟體開發的一個謬論是,你可以提前以某種方式“解決問題”,缺乏背景,缺乏經驗。它通常不起作用; 相反,獲得答案的最有效方法是嘗試:在當前環境中嘗試實際,以獲得真實的反饋。
沒有實驗會失敗,除非它根本沒有給出任何反饋 - 在這種情況下你不知道它是否有效。許多實驗都會產生負面反饋:它沒有按預期工作。在開發環境而不是生產環境中找到它是很好的,但這意味著必須進行更改。
關於如何使軟體保持柔軟並且能夠隨著時間的推移容易地改變,已經花費了大量精力,研究和墨水。但是,正如經驗告訴我們的那樣,將軟體設計為“可維護”或“可擴充套件”的幾乎所有時間都是浪費。

不要使軟體“可維護”或“可擴充套件”; 讓它可以替換

設計軟體部件可以輕鬆更換,而不是浪費時間去預測永遠不會發生的未來。
函式程式設計(FP)語言和方法可以幫助實現這一想法。
物件導向程式設計(OOP)在當時聽起來像一個好主意,也許純粹可能已經實現過,但是通常採用我們做了一件非常糟糕的事情。可變狀態,在整個系統中暫時耦合和擴散,在一個糾結的義大利麵碗泥 - 與物件導向的肉丸。儘管我們有最好的意圖,但這些系統通常會變得脆弱。在許多物件導向的程式中,每個物件都像一個復仇的前配偶一樣坐在那裡,有著長久的記憶和對系統的隱藏怨恨,隨時準備突襲並在你最不期望的時候肆虐。
將系統視為資料的一系列變換(如管道),而不是糾結的,錯綜複雜的OO設計。每個步驟 - 每個函式 - 都是無狀態的,沒有隱藏的時間彈或驚喜。
透過一系列轉換,可以更輕鬆地測試和推斷軟體正在做什麼,更重要的是,當出現問題時會出現什麼情況。找出問題的位置並解決問題要容易得多。但它不只是關於測試,而是關於可替換性:它是關於一次性軟體。
當一個元件 - 一個管道的一個步驟,一個功能 - 突然和意外的過時,它應該很容易撕掉並替換為其他東西。管道方法可以讓您輕鬆完成。

安迪的設計定律:如果你不能輕易地撕掉每件作品,那麼設計很糟糕。

Tracer Bullet Development,我們自實用程式設計師以來就提出過這個想法。使您的初始跟蹤器成為管道:無狀態,不可變。從那裡發展到不可變的基礎設施。現在,您可以輕鬆更換任何需要更換的東西,並且可靠,透過測試進行備份,無需時間炸彈或意外。
有關Tracer Bullet開發和相關實踐的更多資訊,請參閱:




 

相關文章