主頁 > 軟體工程 > 軟體專案復雜性

軟體專案復雜性

2021-06-09 19:10:27 軟體工程

軟體專案復雜性

1.技術架構與框架

Reuse is about people and education, not just architect.  -------- 《97 Things Every Software Architect Should Know》
認為設計優良的框架,細致考慮并精巧實作的架構自然會被人們重復利用,事實上,即便是最精美,最優雅的框架,可復用性最高的系統,也必須滿足下面的條件才可能被復用,
(1)大家知道它們存在,
(2)大家知道如何使用它們,
(3)大家認識到利用已有資源好過自己動手,如果大家找不到可復用的資源,或者不知道如何使用這些資源,人的天性就會發揮作用,他們會自己動手實作,

反思我們設計框架與組件的團隊,是否滿足以上原則,不滿足實際是不成功的,

2.專案進度

更多的專案之所以沒有被宣布為失敗,很大一部分程度上是因為專案的實施者(或者用戶)接受了充滿缺陷的成品、同意追加了成本或者延長專案交付時間,軟體工程中的時間黑洞永遠讓人無法看清其本質,

前人總結:

Adding human resources to a late software project makes it later.   ---《人月神話》

Maximize the velocity and volume of information flow.   -------How google works

提高開發效率,一些非技術因素:優秀的團隊總是能額外產出大量的檔案,并經常組織內部分享,


3.Cynefin框架

是由Dave Snowden在知識管理和組織戰略中提出的一個概念框架,用于輔助領導者認知問題并進行決策,

image

簡單問題Simple:不言而喻

如果一個問題的因果關系非常明了和單一,則這個問題就是一個簡單問題,大家對于這個問題的原因有著統一的不言而喻的理解,這個問題的發生原因非常的確定,幾乎沒有什么變數,即“知道的知道”,

比如,在一個炎熱的夏天回到家里,發現房間里也被太陽曬的熱烘烘的,這種情況下,我們幾乎不假思索就會打開空調,房間立馬就涼快下來了,所以對于房間很熱這個問題而言就是一個簡單問題,可以迅速的找到解決問題的方式,

簡單問題,一般的處理方式是:了解-歸類-回應,

歸類是人類最擅長的處理問題的方式,當遇到一個問題時,首先我們會將這個問題在自己的大腦中進行快速檢索,如果這個問題被大腦判斷為是一個熟悉的問題,那就調取相應的經驗庫并在這個經驗庫中找到匹配這一類問題的答案,這個“類”就是所謂的pattern,它是人的大腦在經驗積累的程序中不斷對問題進行抽象、分解、簡化而形成的,因此,簡單領域的問題一般也都會有一些最佳實踐,

但是在這個問題域需要警惕落入思維范式的陷阱,大腦在思考問題的時候往往是很偷懶的,本著能不思考就不思考的原則,有時候會拿著pattern去套問題,不管這個問題是不是真的能夠被歸類,部分大企業管理者經常會通過做冥想來回顧一整天所做的決策,就是為了避免落入思維范式的陷阱,提醒自己不要被偷懶的大腦所蒙蔽,

繁雜問題Complicated:專家意見

和簡單問題不同,一個繁雜問題的因果關系往往不是單一和清晰明了的,也就是說,一個繁雜問題可能是由多個原因造成的,并且這些原因并不直觀,相比于簡單問題可以依賴經驗庫快速檢索、歸類找到答案,繁雜問題往往沒有經驗積累,無從歸類,所以遇到這類問題,需要進行分析,即:了解-分析-回應,

一個典型的繁雜問題的場景就是Debug,在生產環境上報出bug之后,開發需要進行問題復現、審查代碼、除錯、根因分析等等一系列動作之后才能找到原因,而且可能還不止一個,

奔馳車主發現發動機異響后送修4S店,技師進行拆解找到問題,更換零件最終修復,這個問題也是繁雜的,一開始包括技師在內誰也不知道為什么發動機會有異響,是在一層層拆解,打開發動機,找到破損零件之后才定位到問題,這個問題原因的追溯是需要分析程序的,因果關系不是顯而易見但是確實存在,即“知道的未知”,這是繁雜問題的特征,

前面說到,繁雜問題一般是新的知識領域的問題,沒有經驗積累,但是注意,經驗是依賴于人的,是相對主觀的,也就是說同樣一個客觀存在的問題對于不同人而言可能是不同域的問題,比如,車輛故障對于剛入行沒多久的技師而言是一個繁雜問題,但是對于作業了10多年有豐富經驗的技師來說這個問題可能就顯而易見,是一個簡單問題,所以在這個領域,專家意見尤為重要,

復雜問題Complex:事后方知

復雜問題的因果關系是事前不可預知的,這個因果關系是不穩定的,即“未知的未知”,這種情況下,解決問題往往沒有標準正確答案,

復雜問題跟繁雜問題的區別就像是由零件組成的汽車和由人組成的團隊,汽車構造雖然很繁雜,但是拆解之后還是能原樣組裝回去,任何一個零件的破損可以預測會導致什么樣的問題產生,它雖然繁雜但卻是一個穩定的靜態結構,而團隊則不同,人的行為難以預測,更別說團隊的組織行為了,團隊是一個動態的整體,其中某個隊員的一個行為,我們難以預測會對整個團隊造成什么影響,

典型的場景,比如在進行團隊retro的時候發現這次生產環境無法登陸的問題,可能追根溯源是某個開發在部署的時候組態檔有誤造成的,但是為什么這個開發會把組態檔搞錯,是因為粗心?還是流程不到位?甚至有沒有可能就是這個開發被個人家里的事情所擾,作業狀態不好才導致這個問題的呢?即使采取改進措施解決了這次的問題,能否在以后杜絕該類問題的發生?我們發現這里有太多的不確定性,

于是解決復雜領域的問題,就不能單純靠還原論的解題思路,一個復雜的動態系統整體遠大與構成該系統的各個部分之和,同理一個動態系統的問題也不能單純通過分而析之的方式來解決,

解決這類問題的思路是:試探-了解-回應,

如果可以進行“輸得起”的試驗,指導性規律就會浮出水面,正是出于這個原因,不必冒進試圖采取一系列行動,而是要耐心等待前進的道路自行顯露,首先須探尋,然后了解情況,并做出回應,也就是說,這時候的解決方案是經過不斷試探之后“涌現”出來的,而非精心設計出來的,


混亂問題Chaotic:莫名其妙

如果一個問題的因果關系不可知,完全無法了解問題發生的原因,或者問題的原因太過多變,那么就屬于混亂,這個時候,尋找問題答案已經變得沒有意義,首要任務是及時止損,迅速采取行動,嘗試將所處領域轉變為其他領域,

這些問題常見于一些突發性的社會問題,比如汶川地震,在混亂的局面下,及時果斷的采取行動,嘗試建立秩序變得尤為重要,嘗試從混亂轉變為復雜問題,

歸納總結一下各個領域之間的區別,

image

希望對大家專案管理有幫助,



今天先到這兒,希望對云原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 專案管理, 產品管管,團隊建設 有參考作用 , 您可能感興趣的文章:
領匯入怎樣帶領好團隊
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
視頻直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下訊息佇列架構
互聯網高效研發團隊管理演進之一
訊息系統架構設計演進
互聯網電商搜索架構演化之一
企業資訊化與軟體工程的迷思
企業專案化管理介紹
軟體專案成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
專案管理溝通計劃
構建高效的研發與自動化運維
某大型電商云平臺實踐
互聯網資料庫架構設計思路
IT基礎架構規劃方案一(網路系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之采購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變

如有想了解更多軟體設計與架構, 系統IT,企業資訊化, 團隊管理 資訊,請關注我的微信訂閱號:

MegadotnetMicroMsg_thumb1_thumb1_thu[2]

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利, 該文章也同時發布在我的獨立博客中-Petter Liu Blog,

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/285976.html

標籤:其他

上一篇:如何對待工程師團隊犯錯誤

下一篇:我,管理100多人技術團隊的二三事

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more