怎樣做出好的軟件產品?

      僅僅就編程來說,實在是一件很簡單的事,就是“程序 = 算法 + 結構”,但要想做出一個軟件產品來就不是這麼簡單的事了。
 
      雖然“程序 = 算法 + 結構”沒錯,但隨着市場的變化,需求的變更,這些算法和結構也是在時刻變動,有可能我們分析出這些算法和結構後,投入到市場中卻發現產品已經過時。所以我們有必要建立一個平臺,用來管理和分析這些影響算法和結構,並導致其發生變化的需求,以至我們能夠實時的把算法和結構對應的程序發佈到市場中給客戶使用。
  
      顯然這時候算法和結構已經越來越多,所以更加有必要建立一個開發平臺來整理這些算法和結構,方便我們更好的開發改進程序。
  
      但一個好的軟件產品除了程序本身,還有產品理念、操作說明、培訓教材、實施步驟、問題反饋等一系列爲客戶服務的事物,所以有必要建立一個實施平臺來存放這些事物,共享這些事物。
  
      因此一個存在於市場的優秀產品,必然擁有這三個平臺:需求平臺、開發平臺和實施平臺。
 
      建立平臺就要知道這個平臺包含哪些東西,有什麼方法可以管理這些東西,這是個複雜而長久的過程。我們只能夠先從簡單的做起,從實踐中慢慢的整理出來這些內容和方法。自己馬上實踐,總比別人成功後走別人的老路好!
 
      首先要設立三個崗位,需求平臺組長、開發平臺組長和實施平臺組長。
 
      需求平臺組長就把現在所有的需求全部收集整理,並實時的更新這些需求,可能開始都是些文檔,手動處理,形成規模就可以考慮做一個管理工具,在線需求提交、審查等系統。
 
      開發平臺組長就整理所有程序功能模塊,重新整合設計,提出公共的算法結構等。
      程序 = 算法 + 結構 + 方法  
      因爲程序的複雜,所以我們在分析算法和結構的時候就有了不同的方法,以前是面向過程,現在又面向對象,接着比較熱門的面向服務。這都是我們實踐中產生的一些方法,但他們也不是相互獨立的。面向對象裏面可能包括了面向過程,面向服務裏面也包括了面向對象。所以在構建不同的算法和結構是就需要用到不同的方法,我們現在用得最多的算是面向對象方法,所以面向對象也就成了開發組長整理的一個重要東西。
     “懶人精神”並不是要我們做事懶,而是重於發現,遇到問題可以停下來多思考討論,可能就找到了更好的方法。
 
      實施平臺組長負責整理實施需要的文檔,包括操作手冊,培訓教材等。
 
      等到這些平臺都有所規模走上正道後,有必要還要成立一個質量監省平臺,以第三方的眼光指導三個平臺的進步。 
 
      現在阻礙這種開發模式最大的障礙就是項目,爲什麼這麼說,因爲一個項目就是一個陷阱,整個開發部門就十幾個人,如果有幾個項目在同時進行,那麼這十幾個人就這樣分別掉進了各自的項目,以致整個開發部出現沒人沒時間的情況,變成一個空部門。
 
      爲什麼每一個項目對於開發部來說都會變成了一個個陷阱了?
 
      首先,產品的不成熟,就由三個人幾個月搞出來的東西,沒有明確的需求,參考別的系統做,沒有正規的設計,畫幾個流程圖,就設計表結構開始編碼,沒有專業的測試,互相之間點點界面看有沒有錯誤報出。就這樣搞出來的東西,上場就幾百萬的項目,開發人員哪跑得掉。現場調試程序,修改需求,到處救火。
      其次,實施力量薄搦,隨便抓來的幾個人,沒有經過系統的培訓,連個sql語句都寫不出來,更別說跟客戶討論需求、擋需求,他們做的就是培訓客戶,教他們操作,有問題丟給開發人員解決。
      再次,客戶的素質低下,使用系統的客戶大部分都沒摸過電腦,需要從打字培訓起,提出的需求很隨意也很隨時,大半年下來沒斷過需求。
      最後,公司領導層的制度方向,以打單搶佔市場爲重,對技術的漠視,人夠用就行。沒有想過搞一批人認認真真的專門研究這個產品。
      這些技術人員,在這個項目從頭到尾累死累活,轉到另一個項目又是從頭開始。所以說這些項目就把所有的技術人員全部都陷了進去,以致於公司技術部門空無一人,也就是一本書上所說的“軟件作坊”。
 
      怎麼跳出陷阱,走出軟件作坊?
 
      下面是呂建偉先生說的兩道防火牆教我們從哪裏開始走出軟件作坊。
      大家想想美國金融危機吧。美國經濟發生問題,奧巴馬首先做的是什麼?是設立防火牆,不要讓危機擴展到更多的行業更深層次的方面。

      我們想扭轉公司現狀,也是如此。先設立防火牆。

      走出軟件作坊,我是以研發部門爲中心的。當然,和我交流的大部分人都是研發部的。大家都是共同的視角,共同的權限,想解決需要變革整個公司模式的問題。

      我們不可能變革其他部門,只能從自己先下手。要走出的第一步,就是給自己設立防火牆,不要讓自己的問題擴散到別的部門,也不要讓別的部門的問題擴散到自己部門。

      這個防火牆怎麼設立呢?首先得有人。沒有人,說句髒話,就叫幹個屁啊。

      但是,這立刻會面臨到一個很現實的問題,沒有人。確實沒有人。老闆也不給人,每個人都忙的很厲害。沒有人啊。

      向老闆申請人。這幾乎是不可能的事。一般在現狀,沒有作出成績還要人,這是不可能成立的事。雞生蛋,蛋生雞。有人是捨不得孩子套不住狼,有人是不見兔子不撒鷹。我們一般遇到的都是不撒鷹的主兒。所以大家不要抱怨,有啥人就用啥人,能改善多少就改善多少,盡力了。

     就現在這三五個人,大家看着辦。爲了拯救自己,不做也得做。抱怨起不了任何作用。

     OK,我們說有人。要有什麼人?

     我說的是是開發項目經理。這個人得單提出來,不能開發編碼,專門做需求管理、BUG管理、團隊中每個人的工作計劃、工作推動、團隊內部資源調配、團隊內矛盾解決、執行過程中異常問題處理、每天向各個協調方報告工作進展和工作困難。我說的各個協調方包括客戶、客戶老闆、自己的上司、自己的老闆、銷售部門、實施部門、支持部門。

      我們整天在忙,其實在窮忙。很多穿插進來的事情和異常讓我們常常不得不停下手中的工作,接電話、查找客戶的BUG、臨時修改BUG、給客戶更新、跟蹤客戶更新後使用情況。我們本想完成的計劃,都成了空話。當月底檢驗計劃的時候,總會有一大堆的理由說是因爲什麼什麼異常,所以無法按照計劃執行。

      對,這就是沒有防火牆,每個人都直接受到各種來源的直接干擾。而開發項目經理,就是防火牆。

      售前方面的方案製作、需求討論、打單演示,銷售部門反饋回來的客戶現場提出的需求和問題,老闆在客戶現場發現的問題和需求,實施部門在實施過程中發現的需求和問題,客服支持部門在日常支持中轉過來的需求和問題,在項目開發過程中客戶的各個業務部門包括客戶IT部門提出的需求和問題,這麼多的衝擊,需要有一個專門的人來統一歸口,屏蔽。任憑外部這麼多異常的穿插,有項目經理一人擋關,開發人員在研發內部安安心心的按照項目經理的工作計劃紮實的開發着。

      不管收到多少需求和問題,每個人都覺得自己的問題是最簡單的,是最需要立即解決的。每個人都會這麼想。但現實就這麼擺着,有100件事,就三五個人,看着辦。累死也不可能把這100件事1天內幹完。

      項目經理把來自各方的需求和BUG,統一彙總到一個EXCEL中。和各方討論明白到底想要的是一個什麼功能,細節是什麼,會引發的問題是什麼,都要項目經理來做好功課。確實要開發的,就根據現在的開發進展和開發計劃、開發負荷,排好後續的開發計劃。

      其他人着急啊,着急也沒有用,你看,所有的需求和BUG都在這裏,其他人也在提,不光是你銷售部門一個部門在提。你看,我們的工作內容,已經排出來老長了。都很明確,大家沒有偷懶,大家確實很忙,丁是丁,卯是卯,就是到了老闆那裏,拿出來這些EXCEL,老闆也沒有辦法。就這點人啊。

      這就是第一道防火牆。

      第二道防火牆就是增加測試人員。軟件不穩定,實施有問題會直接找開發人員,客服支持有問題會找開發人員。因爲這些是軟件BUG,就得開發人員跟蹤和修改。怎麼讓軟件穩定呢?我和很多人都聊過,在長久的不間斷的修改代碼接客戶電話做跟蹤支持的,程序員們普遍很累,對這種狀態很膩,有厭煩心理,甚至有了蝨子多了不嫌咬的無賴狀態。

      這是人的正常生理和心理。程序是程序員用手一個個敲字母敲出來的,這是個手工作業活。人是肯定要受各種生活和工作的影響。人不是冷血動物,人也不是機器。人是感性的,人是需要生活的。

      這種狀態存在,我們就要去解決問題,而不是一味強壓。有時候,強壓也失去了作用。想解決,臭罵一頓也沒有辦法。說吧,想不想解決?想,那我們就擺好心態,繼續往下看。

      測試人員一方面會使軟件質量提高,這樣BUG少了,未來的程序員的支持就少多了,實施部門和客服部門的工作就輕鬆了,當然部門衝突也就會少了,合作也就比較改良了。

      另外,測試人員需要兼任技術支持人員。因爲測試人員爲了能測試出更多的BUG,把軟件問題消滅在開發內部,所以他對軟件的細節瞭解的僅次於項目經理和開發人員。測試人員比實施人員、客服支持人員、銷售人員要了解軟件深的多。他來做技術支持,他解決問題查找問題比實施人員、客服人員要快的多、準的多。這樣就不需要干擾程序員了。程序員就可以正常的按照開發計劃一步步繼續了。

      而且,在實施過程或客戶應用過程才發現的BUG,那就是測試人員當初沒有測試到的地方。爲什麼沒有測試到,爲什麼忽略了,以後要加強注意。這也是對測試人員工作質量的一個反饋。

      所以說,測試人員兼任開發部門技術支持人員,對測試本崗位工作非常有好處,是對測試工作的促進和提高,也給研發部門設立了第二道防火牆,防止實施部門、客服部門對程序員的干擾。

      只要程序員能安心工作。他寫的代碼質量就會提高,BUG減少,功能細節完善,思考周密。如果整天讓他救火,程序員只能以救火的心態來工作。人不可能長期處於高度緊張救火的狀態。

      有了這兩道防火牆,負向轉到的企業文化、部門衝突、工作質量、工作效率才能慢慢再回到正向轉動上來。這就是開始的切入點。

      上面所說的兩道防火牆都是在有人的情況下的一些措施,但現在就是整個部門空無一人,連普通的技術人員都沒有,更別說那些技術骨幹,都被陷入項目中,就是拉不出來,現在就是先用什麼辦法拉出這些人來? 

      沒有人不要緊,要緊的是,研發團隊需要承擔更多的工作。但這是理順前,走向正軌的必然付出。在老闆沒有看到效果不投入人力之前,研發團隊要想變好,是必然要付出更多的。大家不要想着和過去一樣付出就能達到更好的效果。我們在現有人手下,有些人需要承擔更多的開發工作,這樣才能擠出一個人來做項目經理,專心管好需求、BUG、工作計劃、協調、推進、彙報。這樣才能擠出第二個人來做測試與技術支持。這必然會有人職業轉型,會有人承擔更多的代碼開發工作。但其實,專心開發代碼,一切雜事都屏蔽了,開發質量和開發效率都會提高,反而比過去工作更順溜了。程序員,最擅長的還是自己本職的開發工作。

      但冰凍三尺非一日之寒。所以不要一有救火,整個改良就都放下了,重新回到過去的狀態了。這是不對的。從負向到正向,必然有很大的逆摩擦。堅持,咬牙,挺過,負向的車輪纔會靜止,然後正向轉動。想實施改良的人,必須要深刻認識到這個衝擊,要承受得住,要有勇氣來面對挑戰,要有勇氣來面對失敗。

      你是否有這種犧牲付出和堅持推進的勇氣?

原文:http://www.cnblogs.com/kakake/archive/2010/01/09/1643156.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章