談談創業公司技術的工作模式

lanceyan發表於2013-06-27

  在創業開始時,也許有一個點子,經過研究調查有市場可行性就開始召集人員開始創業。這個時候一般都是單打獨鬥,一兩個人負責所有的事情,包括產品設計、互動原型設計、網頁美工切割、程式開發、功能測試。這個時候基本不用合作,採用獨立開發模式,自己搞定儲存就可以了。不過也有風險就是硬碟壞了怎麼辦呢,要知道硬碟是最脆弱的東西了,我一般的話會定期備份硬碟的東西。

  如果發現創業模式可行,需要趕時間搶市場,一兩個人完成不了很多工,就需要更多專業的人加入才能做出一個互動很好、頁面美觀、功能好用的產品。這個時候一般的話應該有產品經理、美工設計、程式開發、測試、運維。但是這些角色不是說一定要安排這麼多崗位的人,需要根據公司具體自身情況來設定。

  有了點市場機會,時間才是最重要的。如果按照傳統的計劃型開發模式就不太適合了,敏捷開發還算比較相像。不一定說非要採用什麼開發模式,這個也要根據自己的公司來決定。我們的模式應該是像中國的社會主義社會一樣是基於敏捷的XX公司的開發模式。

  好了,崗位都有了,我們們怎麼分工合作呢?這時,因為是根據點子來演化產品,很多東西都是不確定的,不能定一個大的一成不變的長時間計劃和需求。畢竟這個時候要求需求不變也是不可能的,我們本身自己就充當了產品經理的角色。不只要想市場和老闆的需求,還要產品本身和功能實現的需求,逐步把一個模糊的東西變成可以實際操作的產品原型,再形成最終產品。結合敏捷開發的特點,以人為本,把一個大的需求分成小需求分給適合的人來完成。上面所說的那些角色不一定每個崗位都需要一個具體的人,也可以是一個人承擔一個角色,或者多個人承擔一個角色。比如我們公司暫時就沒有產品經理、測試、運維,程式開發負責開發、測試、運維,產品設計所有人都要參與。總體產品設計由一個人來把關和跟蹤,細分到每一個產品都要對自己的產品負責分析和跟進。相當於貫徹了一句話,好像來自於阿里巴巴的一個產品寫的一本書《人人都是產品經理》。如果自己對自己的產品都不清楚、玩不轉、操作不了,談什麼讓使用者喜歡呢?不管美工、研發、測試、運維,都需要對產品有很好的理解。如果可以的話,不只是要理解自己做的一小塊需求的產品,還應該瞭解更多其他同事的產品。作為產品總體把關的人一般是技術總監需要對每一個產品都很熟悉,這樣才能跟進和設計討論。所以研發、美工、測試、運維不管做什麼工作,都需要站在一定高度思考問題,既然創業就需要以創業的角度思考,這樣對自己的職業發展有幫助,也可以做好產品。

  在根據一個大需求技術總監和大家討論,把模糊的東西逐步清晰化得到一個比較明確的做法後分到合適的人上。這樣大家各自領導自己的需求開始分析具體實現,得到一個大概的思路後再和技術總監討論確定最終具體實現。關於美工總體需求分析可以參與,這樣便於瞭解整個需求,還是那句話瞭解了才能設計出好看好用的產品介面。細節的需求和技術實現就讓研發來想和確定。在研發確定好了實現方案後,和美工進行討論介面的實現方案,這個時候美工就清楚了小需求的實現功能和介面方案。然後美工設計介面,有時間可以多弄幾個方案,開始可以在草圖用筆畫,也要溝通、討論、確定。最後選擇一個使用者介面,研發開始開發程式、美工切割頁面。如果美工的模板和規範基本都有確定了,那工作可能就不是太緊張,所以可以應對幾個開發的需求。這個根據具體的情況確定美工的人數。

  研發開始可以自己弄頁面,先把動態的標籤確定好了,後面根據美工切割的頁面套入。然後研發後臺邏輯,一般都是從前臺到後臺開發甚至db開發都需要懂點,這樣才能保證高效開發。如果橫向切分,一些人研發service、一些人研發dao,一些研發jsp會增加不必要的溝通浪費時間。如果後面專案龐大了,還是建議應該增加一個專業的前端js開發和後臺DBA。研發開發好自己的業務程式碼對功能進行測試,測試ok技術總監確認就等整合連調。這個時候的開發都是在自己的本機完成,不在測試環境測試是為了提供研發速度和效率。大家都知道如果是java開發,部署war不斷reload會影響他人的工作,如果工程比較大啟動也比較慢。如果在本機,只是修改類裡面的東西和jsp等直接就可以看到效果。修改類簽名和增加類等需要重新部署。

  大家都開發好自己的模組後,集中在測試伺服器整合測試。這裡可以由指定人來打包部署,大家一起測試找問題,修改。關於前端一般是自己改好了原型介面,後面被嵌入了動態頁面後就直接修改動態頁面了。預覽在整合伺服器,這裡可以把預覽和svn伺服器整合,前端美工提交jsp到svn後就生效,他也可以直接看到效果了。具體操作後面文章再介紹。最後測試沒有問題,老闆確認,釋出外網伺服器、部署db。這裡也容易出錯,如果釋出者不是本人很容易漏掉東西,所以最好在釋出時,如果改了除了程式以前的東西需要提供釋出列表一併修改。

  再以後隨著專案的龐大和人員的擴充就需要藉助更多的模式和輔助工具來尋找更適合自己的方式了。比如頁面釋出工具(前端可以直接釋出IDC)、持續整合(可以自動部署測試和IDC)等等。專案中最最重要的還是人,根據人來選擇不同的工作模式,就像豆瓣CEO說的,什麼語言工具技術都沒關係,最重要的是人、團隊。相信經過大家的磨合, 每一個都是超人(技能、溝通、合作)的團隊就是這麼誕生的。

  JAVA敏捷開發環境搭建

  前面介紹了創業型軟體公司的工作模式,這裡詳細介紹下如何實施,第一步是先要搭建環境,有了環境才能開展工作。

  整個軟體專案分為四個環境 開發本地環境、開發環境、測試環境、IDC環境。和傳統C++開發不一樣的模式是多了第一個開發本地環境。這是為什麼呢,因為目前大部分開發人員還是比較熟悉windows下開發。對於mac和linux下直接使用軟體並且開發的中國開發者還是少之又少,這套架構就這個現狀做出來的。如下是環境搭建架構圖:

  從環境來說:

  一、開發本地環境、開發整合伺服器搭建。 前端開發者、後臺開發者。

  前端開發用的最多的是photoshop和dreamweaver。在做psd之前大部分是不會協同開發的,只有整個檔案傳遞過來過去。html切割的時候可能就會多個人協同開發了。這個時候需要一個集中ftp伺服器、svn伺服器。svn伺服器用於儲存版本程式碼庫,用於儲存歷史修改的版本和開發人員協同。ftp伺服器適用於及時修改時儲存上傳到預覽伺服器進行預覽。看到這裡有人也許會問,我直接合並svn和ftp不行嗎?其實有這樣的問題,如果直接提交svn,後臺開發人員就會從svn看到。本來是前端的整合協同開發預覽,結果影響到後臺容易引起版本混亂。

  後臺開發怎麼搭建環境?用eclipse在本地環境搭建開發環境,通過tomcat外掛或者jetty啟動除錯class、jsp。之前看過很多公司都通過打成war包釋出到整合環境再除錯。整合環境大家都去整合容易引起版本混亂。即使不釋出到整合環境,在本地就算修改個小的class檔案也要重啟war包有點浪費時間。最好就是利用tomcat的熱部署,修改小功能直接生效。現在我們就是這樣做的,用maven管理jar包依賴,ant本地打包、拷貝包,用eclipse的tomcat外掛熱部署快速開發。等到所有功能開發好了。把分支版本釋出到開發環境進行整合測試。

  開發環境涉及的軟體有:nexus 、maven、tomcat伺服器、mysql、ftp、jenkins、svn、jira、fisheye、eclipse、dreamweaver、photoshop、nginx。

  軟體的作用:

  nexus作為集中倉庫管理,因為每個工程如果都有一堆jar包,很難管理。加上svn上傳、分支、合併耗費網路頻寬、空間。如果有個地方把這些浪費空間的jar集中管理起來,所有工程合用豈不是很好。

  maven是軟體生命週期、依賴管理,有了集中管理jar包,就需要有個東西把jar包倉庫和工程連線起來。

  tomcat伺服器是本地開發使用和集中測試伺服器。

  mysql就沒必要每個開發機器都裝一個了,放在一個開發環境就可以。

  ftp作為前端開發上傳檔案使用。

  jenkins是持續整合,開發和前端都把程式碼弄好,怎麼融合整合在一起測試呢,總需要有個人來把所有的檔案合併在一起吧?這個軟體就起到這個角色,把所有檔案整合、編譯、打包、釋出到tomcat伺服器。如下圖:

test

  svn程式碼版本管理,大家都知道協同作用。

  jira用於需求、bug等管理。

  fisheye用於程式碼統計、稽核等。

  eclipse、dreamweaver、photoshop不用說啦。

  nginx主要用於做虛擬主機和靜態資源管理。因為我們可能同時開發多個網站,nginx可以根據不同的域名轉發到不同的web伺服器。

  二、測試伺服器。開發、測試。

  開發整合測試環境通過後,這個就可以轉測試了。通過持續整合,測試部署好環境就開始測試。測試環境同樣依賴於集中倉庫、maven、持續整合等軟體。也就是整合測試環境、開發整合環境、開發本地環境都是用的一套jar包,是不是很cool。如果測試不通過,就要轉回開發,開發好再轉測試。怎麼保證開發的質量和測試的質量,還有大家的協作性,這個過程涉及到軟體工程和績效考核,後面再說。測試通過一些測試,測試通過後就可以釋出到外網了。這個時候需要提供釋出列表、操作步驟、資料庫操作指令碼給到運維稽核,稽核通過後才能釋出。

  怎麼釋出到外網IDC呢?運維可以根據釋出列表去操作,開發和前端一起等著熬夜啊熬夜。沒有效率!這裡提出了一個增量釋出版本的方式,通過釋出列表,我們的釋出程式會自動檢測到釋出的檔案和釋出的機器,釋出到對應的伺服器。如果釋出失敗了還可以回滾檔案,基本上是一鍵操作。未來還會把伺服器重啟、日誌輸出等整合起來。

  三、IDC伺服器。

  外網的真實伺服器,後臺和前臺。大家能夠訪問到的網站伺服器。業務人員在版本釋出後檢視。整個流程就做好了。大家在每一次版本開發完了,可以很好的協同、開發、測試、釋出。

  擴充套件話題:

  1、photoshop能否和html互轉並且有版本管理功能,這個做好是個革命性的標誌。

  2、css、js等靜態檔案是否也能夠納入自動依賴管理裡。這樣不用我們釋出一個頁面檔案時發現還有些依賴的js沒有釋出。

  相關文件:創業公司如何實施敏捷開發

相關文章