軟體開發中業務知識的啟用 - Feathers

banq發表於2022-11-30

使用系統不僅僅是編寫程式碼,它是主動知識的生成。 在這篇文章中,Michael Feathers描述了這個概念,以及如何使用它來影響組織決策:

就其核心而言,軟體開發是一個知識生成過程。當我們思考這到底意味著什麼時會發生什麼?

關於軟體開發,有許多不同的觀點。我們的觀點往往取決於我們的角色和有利位置。通常情況下,開發人員專注於程式碼和架構。經理和團隊領導關注的是專案和人員。對於其他角色來說,過程和產品的觀點是主要的。

這種觀點的多樣性似乎沒有什麼問題。我們完成了我們的工作,透過軟體傳遞價值。
然而,由於我們沒有一個統一的視角,管理大型複雜系統的許多方面都被忽視了
我想提供一個我把它稱為知識啟用的觀點。

我將透過一個例子輕鬆地進行解釋:

想象一下,你是一個有五個人的開發團隊。你的一個團隊成員去度假了幾個星期。這個假期的影響取決於團隊如何組織其工作。如果團隊中的人實行結對或聚眾程式設計,可能不會有太大的影響。現有系統的知識和即將到來的工作是在整個團隊中共享的。

敏捷軟體開發中最重要的舉措之一是找到處理經典上被稱為匯流排因素的做法。它解決的問題是:一個團隊可以失去多少人而不使工作陷入停頓?結對程式設計和暴徒程式設計是處理這個問題的兩種方法,但還有許多其他的方法:回顧、文件、共享工作空間,等等。所有這些做法都是有效的,但值得考慮的是,我們是否已經足夠仔細地研究了問題背後的現象。我們是否對軟體開發中的知識進行了研究,並對它是什麼以及它的品質建立了一個模型?

知識是一種東西
非常寬泛地說,我們可以把知識想象成一個數量。我們可能無法測量它,但我們知道一些關於它的事情。其一是,除非我們採取行動,否則它將隨著時間的推移而惡化。

在團隊編寫程式碼時,業務知識掌握有一個快速的上升過程,而之後的下降過程要長得多。坡度下降只是由於記憶的原因。隨著時間的推移,我們會忘記這些工作的細節。我們繼續做其他事情;也許一個團隊成員離開了。

當團隊不得不透過重構或額外的功能工作觸及舊程式碼時時,我們對該領域的知識量就會增加。圍繞該類的知識被啟用。

關於這個過程,有幾種思考方式。一種是,團隊正在重新發現關於該類的知識。另一種是再生知識;我更喜歡這種說法。我們從程式碼和其他系統工件以及彼此之間的對話和調查中再生出知識。

同樣,我們不能精確地確定在這個過程中啟用的知識量,但它比我們開始在那個階段工作之前的知識量要多。密切的工作在社會技術系統中啟用併產生了知識。

主動知識的特質
當我們認真對待主動知識的概念時,我們可以看到它有一些影響我們如何管理它和圍繞它發展實踐的特質。

主動知識是在與一個系統的互動中產生的。我們透過閱讀或討論獲得知識,但與之合作是理解某種事物的最佳方式。工作能調動閱讀和討論所不能觸及的思維部分。它能增強記憶和注意力。

知識會隨著時間的推移而消逝。
當我們轉向其他工作時,我們對舊工作的知識就會逐漸消失。有時我們有清晰的記憶,但當我們在工作環境中沒有被提醒時,重要的細節就會從我們的記憶中消失。這種消退不僅發生在個人層面,也發生在團隊和組織層面。如果一個人離開了一個團隊,那麼這個人所擁有的那部分積極的知識,如果不是透過分享工作產生的,那麼實際上已經消失了。

知識會變質。
主動知識是準確的知識。如果你一週前在系統的一部分工作過,後來人們在你不知道的情況下對其進行了修改,那麼團隊中的活躍知識就會減少。你所擁有的知識已經變質了。是的,你團隊中的一些人有了當前的理解,但這種理解並沒有完全分佈在團隊中。陳舊的知識在一個組織中是有問題的--使用不準確的資訊工作的人往往會重複工作或以適得其反的方式改變系統。

如果工件是清晰易懂的,那麼知識就更容易再生了。
程式碼、構建指令碼和文件是外部化的知識。它們是不存在於我們頭腦中的部分。我們很容易高估這些人工製品的價值。它們很少是完整的,而且可能變得陳舊,但它們常常構成知識再生的基礎。當我們想學習更多的東西時,我們就會回到這些東西上。

被發現的知識可以提高決策水平。
只要我們在一個系統中工作,知識就會被啟用。當我們意識到這一點時,我們可以選擇在一個系統的不同領域工作,以獲得背景並更全面地瞭解它。通常情況下,我們學到的東西會讓我們意識到新功能的潛力,或者讓我們意識到增加我們計劃中的功能的更簡單方法。

當我們把所有這些品質放在一起看時,最重要的是要意識到,知識管理不應該集中在儲存和儲存上。相反,它應該專注於生成和流動。隨著時間的推移,知識會消散,人們也會從一個地方轉移到另一個地方。我們需要專注於發展幫助我們快速獲取和按需生成知識的實踐,以支援我們在系統中所做的寶貴工作。

 

相關文章