程序員一個月做出來的東西和三個月做出來的東西有什么區別?
一個程序員,同樣的東西,一個月做出來和三個月做出來到底有什么不同呢?底層架構不同、可預見未來支持的擴展不同、優化不同,可以這么說,從某個角度上說,是完全兩種東西。
開發時間的常用評估方式
首先,評估開發時間的問題,兩個常見的方式,***種,會從底層程序員往上報自己需要的時間,經過主管、經理再到總監每一層都會多報出一個百分比的時間,以備用來解決不可預知的問題或bug,其實不預估時間的項目往往是最快的,程序員盡力去完成,但在有一定規模的項目組中卻不可取,沒有哪個老板或投資人會對沒有時間規劃的項目開發組充滿信心。企業也不會任由程序員來規定時間。而報到老板那的時間也會直接被砍一刀,三分之一的時間被砍掉都算是少的。
第二種方式,如果是合同定制的,開發需求非常明確的,一般都會有一個明確的開發周期和時間節點,開發任務會“以終為始”的方式來開展,舉個例子,六個月的工期,那么第六個月的時候交付產品,需求、設計、開發、測試各自匹配出相應的時間,在這個時間段內完成任務。只要對方不改需求,時間給的合理,這樣反而簡單了,一般情況下都可以保證deadline來之前上線交付。
開發時間被壓縮的要求,往往來自于不懂行或者沒有開發背景的老板,一方面是項目進度、企業進度這類客觀性的要求,另一方面是怕程序員偷懶,工作不飽和,自己白付工資這種主觀性的考慮,在他們的視角中,開發一套系統,三個月的時間成本和一個月的時間成本是一個簡單的數學關系,所謂的高層,從來不會關心你短時間內開發的系統所遺留的問題,那是程序員應該解決的事,而這些問題實際上會像滾雪球一樣一直堆積,最終在某個時間段內集中爆發出來,后果就是重寫,而我剛好就遇到這么一起事件,項目進行半年后,那邊的負責人告知我,他們的系統的架構已經無法再加任何的功能了,只能重寫。
我們假定這個程序員的水平在中等偏上,不存在技術水平以及任何情緒的問題,一切都是按照比較公平的方式去比較,現在企業要做一套系統,需求明確度60-80%,為了簡化模型復雜度,我們只要一名程序員,這名程序員負責系統的所有的任務,程序員報三個月的開發時間,如果這個時間被無端壓縮至一個月,那三個月開發出來的系統和一個月開發出來的系統到底區別在哪呢?
架構不同,決定了對未來可擴展的支持的不同
系統做的可大可小,關鍵看給的時間,時間不夠,即便有能力也會把系統做成小的、擴展性差,為什么呢?程序員都會選擇當前環境下的***解,和時間賽跑的項目***解就是,快點上線。底層架構?領導又不關心你操哪門子心。未來可擴展性?表示不關心,只知道項目完不成會更糟糕。反正先讓你看到個東西,管他底層是啥樣子呢。
舉個例子,你的系統是做一個學校的客戶關系管理CRM,實現客戶的錄入、分配、跟進、報名的功能。假如老板或甲方壓縮時間,給的時間不夠怎么辦,那只能做做表象的東西,一個客戶表,一個跟進表,兩者一對多關聯,再加一個用戶表和報名表,用戶表和客戶表一對多關聯,客戶表和報名表一對多關聯,完工。項目做完啦,其它不管了,也沒時間管,誰讓你給的時間少呢?那上面這套系統哪還有問題呢?程序員報三個月,被老板壓縮到一個月,老板是不是賺到了?
同樣的東西,壓縮時間做出來,老板真的是賺到了嗎?
上面那套系統,程序員未來可預見的業務擴展,但由于被壓縮了時間,所以底層架構是按照最快最簡單的方式來實現的,那架構在哪會出問題呢?問題可大了,比如:1、對方需求沒說支不支持多校區,整個數據庫設計被設計成了一個校區,想要多校區?不支持的,你們沒說,沒這個概念。2、班級的問題,你們沒提,我們也沒給你們加,一個學員可以進幾個班,一個班級可以安排多少課,是分開計課時?還是一起計課時,不管你上不上都會劃去一節課。3、補課?繳費?退費?補款?沒說啊,沒說可不沒有么?為什么我們不寫啊,我們只寫你們提的需求里的功能,謝謝。4、操作權限問題和數據權限問題,一個客戶的市場收集人、銷售分配的人、登記客戶的人是三個人?不支持,按需求合同來。5、你還要統計跟進次數?什么,還按部門統計,你們重新提需求文檔吧,先把***階段的給錢給結了。6、訪問速度太慢啦?把服務器的性能調一下,多加點錢就好了,服務器費用從每月3000增加到每月9000。
上面簡單列出了一些問題所在,有看得見的功能上的完善,還有看不見的架構擴展,你只要不說我們就不寫,你壓縮時間,我們就壓縮你看不見的,一切以時間為準。這樣的系統,再來幾次新需求,可能就要重翻了,重新翻系統的話,該花費多長時間不會減的。本來多給幾個月,這些東西全給做上了,這一壓縮時間,多花費出來的時間你還是要給程序員開工資的,別指望靠每天免費加班來榨取剩余價值,程序員離職對項目的損傷更大,并且,項目是公司的,公司是老板的。上有政策下有對策,所以業內有句話是這么說的,得罪誰,也別得罪程序員,否則,***你怎么死的都不知道。而這句話并不是危言聳聽,覺得程序員老實好欺負的老板的最終下場都很慘烈。
除了功能和架構以外,還有什么?
那除了功能、和架構以外,還有什么“本應該可以做”,但由于時間原因沒做的呢?性能監控和優化、緩存、日志分割和備份、數據庫備份、代碼重構等等等等,這些東西你做了,別人看不見,不做,對系統交付也不會產生問題,時間緊任務急,被時間壓急眼了,不做也罷。