停止過度設計,開發客戶需要的軟件

在與許多不同的團隊合作過之后,Greg Young發現大家做項目時經常會大幅度的過度設計。比如一個預計要開發9個月的項目,換個角度思考一下,卻可能只需要幾個星期就可以提交95%的功能。Young在最近倫敦舉行的DDD eXchange大會上著重闡述了這一點。

\\

過度設計的原因就是我們在開發錯誤的東西。在Young看來,我們并沒有對客戶到底需要什么給以予足夠的關注,我們關注的是我們認為客戶需要什么,而實際上這是兩件非常不同的事。大多數情況下,項目功能的使用情況會遵從帕雷托分布(80/20法則),即只要實現一小部分功能,就可以滿足絕大部分場景下的實際使用需要。如果繼續開發剩余的使用率極低的功能的話,會需要投入非常多的精力,而只能獲得非常少的收益。

\\

Young強調軟件只是一個大系統的一小部分。除了軟件我們還有一整套的業務流程,而某些細節問題是完全可以用業務流程去解決的,不一定全要通過軟件解決。平時我們過多的討論了最極端的情況下如何用軟件解決問題。其實我們完全可以把工作內容的99.9%用軟件自動化處理掉,然后把剩余的一小部分留給熟悉業務的人去手工解決。

\\
\

人工介入是有必要的,人類來了!

\
\\

“棕地項目”是有可能被過度設計的一類。對于Young來說,這些項目也是最容易避免過度設計的,因為人們對這樣的系統已經有了使用經驗和數據。根據熟悉業務的人的描述找到系統的基本用例,再對照實際的使用情況,就基本可以確認絕大部分的系統功能了。不幸的是,我們和熟悉業務的人討論得最多的卻常常是系統的邊緣功能,就是那些在編碼時需要大量復雜處理可實際上卻很少在生產環境中能用到的功能。Young也指出,考慮這些復雜處理事實上會誤導我們的項目模型設計。

\\

“綠地項目”則是經常被過度設計的一類,因為我們沒法接觸到實際的使用情況。為了避免過度設計,Young建議與需求方達成協議可以在項目首次提交的兩個月后再次部署和發布。期間,需求方要使用這個系統并盡早的提供反饋,這樣來避免實現那些幾乎用不上的功能。他也建議在第一次發布之后只解決故障而不開發新功能,這樣所有缺失的功能就都會被當成故障報告上來。根據他的經驗這樣工作非常有成效,因為大家只需要分析故障的嚴重程度來決定處理的優先級就可以了。但他也提到,這種工作方式只適用于給內部用戶使用的內部項目,對固定價格的合同或者公用的網站不適合。

\\
\

我們就是在夢想國里開發綠地項目的。

\
\\

項目經理或項目協調者是非常容易做過度設計的人。Young幾乎沒見過什么項目是可以兼顧多種用途而獲得成功的,最大的原因是要滿足各方面的細節需求就會導致最終做成一個龐大的項目。更過份的是有的項目甚至會迷失,想不明白自己最主要是想實現什么功能了,結果大家就只好把各種可能情況都列舉出來,事情就完全不可控了。

\\

Young總結到:我們應該記住現在軟件系統已經在取代人工工作了。大多數的情況下能讓軟件系統完成99%的人工工作就已經非常好了,想再把剩下的1%也搞定,這事算起賬來并不劃算。

\\

明年的DDD Exchange大會計劃在2017年四月下旬如開,現在正在開放注冊。

\\

查看英文原文:Stop Over-Engineering, Build What the Customer Really Needs

\\

感謝夏雪對本文的審校。

\\

給InfoQ中文站投稿或者參與內容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家通過新浪微博(@InfoQ,@丁曉昀),微信(微信號:InfoQChina)關注我們。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458307.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Halcon—Tuple中符號的含義

2014年08月08日 21:20:30閱讀數:5429實例一(3d_coordinates.hdev):for I : 1 to NumImages by 1read_image (Image, calib/calib-3d-coord-I$02d)——C:\Program Files\MVTec\HALCON-10.0\images\的calib文件夾中開頭是calib-3d-c…

如果我是博客園的產品經理【上】

題記 這是一個系列文章的第一篇 我打算寫一個《如果我是XXX的產品經理》系列, 因為我是博客園的老用戶了,這個系列又是寫在博客園上的 所以先拿博客園開刀, 后面估計還會寫QQ音樂,有道云筆記,github,foxmai…

Halcon學習筆記(三)---數據類型

Halcon學習筆記(三)---數據類型halcon只能在單獨行進行注釋,不能在語句后面進行注釋。1、tuple(元組,重數)賦值符號“:”tuple算子:(1)變量定義與加減乘除運算代碼如下:*…

論文筆記之:RATM: RECURRENT ATTENTIVE TRACKING MODEL

RATM: RECURRENT ATTENTIVE TRACKING MODEL ICLR 2016 本文主要內容是 結合 RNN 和 attention model 用來做目標跟蹤。 其中模型的組成主要是: 1. an attention model 主要用來從輸入圖像中提取 patch; 2. RNN 用來預測 attention 參數,即&am…

【分享】WeX5的正確打開方式(5)——綁定機制

今天繼續WeX5的綁定機制。 需求分析 記賬本要實現的效果就是可以展示所有賬單,還能實時動態編輯每一筆賬單,官方案例的效果圖如下: 展示頁: 編輯頁 個人覺得官方案例加入了許多元素,不熟悉的同學每一個點都很難理解&am…

HALCON常用算子(HALCON13.0)

HALCON常用算子(HALCON13.0)Chapter 9--Developdev_clear_window ( : : : )功能:清除活動圖形窗口的內容dev_close_window ( : : : )功能:關閉活動圖形窗口。dev_display ( Object : : : )功能:在現有圖形窗口中顯示圖…

關于未捕獲異常的處理(WPF)

轉載自:http://www.cnblogs.com/chenxizhang/p/3280947.html 這一篇文章來談談對于WPF應用程序開發中的未捕獲異常的處理。 首先,我們當然是要求應用程序開發人員,盡可能地在程序可能出現異常的地方都去捕捉異常,使用try…catch的…

設計模式--23、訪問者模式

訪問者模式是一種較為復雜的行為型設計模式,它包含訪問者和被訪問元素兩個主要組成部分,這些被訪問的元素通常具有不同的類型,且不同的訪問者可以對它們進行不同的訪問操作。例如處方單中的各種藥品信息就是被訪問的元素,而劃價人…

C#串口SerialPort常用屬性方法

SerialPort(): //屬性 .BaudRate;獲取或設置波特率 .BytesToRead;得到 接收到數據的字節數 .BytesToWrites;得到送往串口的字節數 .DataBits;獲取或設置數據位 .IsOpen;獲取一個值,判斷串口是否打開 .Pariy;獲取或設置校驗位 .PortName;串口名稱 .ReadBufferSize;獲…

NTFS文件系統的簡述

NTFS文件系統的設計思想基于穩定性、和安全性并支持大容量存儲設備的文件系統:1.它提供日志可以增加文件系統的容錯率,可以有效的保護系統的安全。NTFS是一個可恢復的文件系統。在NTFS分區上即使強制關機后,一般也不需要運行CHKDSK命令修復磁…

Rxjava基礎

現在很多Android App的開發開始使用Rxjava,但是Rxjava以學習曲線陡峭著稱,入門有些困難。經過一段時間的學習和使用,這里來介紹一下我對Rxjava的理解。 說到Rxjava首先需要了解的兩個東西,一個是Observable(被觀察者&a…

『協議』XML-RPC 協議規格說明

為什么80%的碼農都做不了架構師?>>> 這篇文章提供所有實現XML-RPC協議所需要的內容。 一覽 XML-RPC是一個工作在因特網上的遠端程序調用(Remote Procedure Calling)協議。 XML-RPC消息是一個HTTP-POST請求(Request&…

Qt之QLineEdit詳解(附源碼)

原博客地址:http://blog.csdn.net/liang19890820/article/details/52044639,感謝原作者總結和分享。 簡述 QLineEdit是一個單行文本輸入框。 QLineEdit允許用戶輸入和編輯單行純文本,提供了很多有用的編輯功能,包括:撤…

POJ 1323 Game Prediction#貪心

(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e;* //既然是求最少能勝幾次 //說明對方是要盡可能讓我輸 //但為了避免浪費&#xff0c;對方會用比我的牌大的牌中的最小pip的牌來擊敗我 #include<iostream> #include<cstdio> #include<cstring> #inclu…

qt學習之鍵盤事件( keyPressEvent)

//最近一直忙于做驅動&#xff0c;對底層東西很是好奇&#xff0c;好奇鍵盤是 怎么區分每個鍵值的&#xff0c;又是怎么響應的&#xff01;因此&#xff0c;就有了下面這些代碼//環境windows 工具qt 語言c//在主窗體類中聲明鍵盤響應函數 void keyPressEvent(QKeyEvent * event…

C#json數據的序列化和反序列化(將數據轉換為對象或對象集合)

引用 System.Runtime.Serialization.Json 轉載于:https://www.cnblogs.com/a849788087/p/5645828.html

位圖(bmp)文件格式分析

from&#xff1a;https://blog.csdn.net/qingchuwudi/article/details/25785307 位圖(bmp)文件格式分析 作者&#xff1a;深藍&#xff08;由博主分享&#xff09; 一、什么是位圖 計算機能以位圖和矢量圖格式顯示圖像。 1、位圖(Bitmap)&#xff1a; 圖像又稱點陣圖或光…

匯付 支付,痛苦的接入過程

有文檔&#xff0c;但是&#xff0c;寫文檔的人明白&#xff0c;看文檔的人很有難度。 沒有SDK&#xff0c;要自已寫。 然后&#xff0c;錢的流入流出都必須經過虛擬錢包&#xff0c;提現還要綁取現卡&#xff0c;這個我也能理解&#xff0c;不能理解的是&#xff0c;訂單退款&…

隨筆分類 - HALCON學習例程中文詳解

from: https://www.cnblogs.com/chita/category/563492.html隨筆分類 - HALCON學習例程中文詳解HALCON學習例程中文詳解跟我學機器視覺-HALCON學習例程中文詳解-測量圓環腳寬間距摘要: 跟我學機器視覺-HALCON學習例程中文詳解-測量圓環腳寬間距* This example program demonstr…

WinCE6 如何去掉控制面板中的應用?

在WINCE600/PUBLIC/WCESHELLFE/OAK/FILES/wceshellfe.bib把對應的cpl 干掉例如區域設置 好像是2個 ; CESYSGEN IF WCESHELLFE_MODULES_INTLPintlp.cpl $(_FLATRELEASEDIR)/intlp.cpl NK SH ; CESYSGEN ENDIF ; CESYSGEN IF WCESHELLFE_MODULES_INTLLintll.cpl $(_FLATRELEASEDI…