NASA 的 Agile 經驗
很多人說NASA裡有用Agile,沒人相信,我找到這篇證明,大家可以看一看,像是論文一樣,不是很好讀,不過我在此總結一下希望有所幫助(我把論文旁邊小字的結論意譯再加一點自己的心得)。
忽快忽慢比不上笨鳥慢飛
Sustainable Pace
產能跟工作小時不會成正比,整天過度勞累的工程師比不上早睡早起的。我想這個大家都有經驗,有時程式硬逼出來的結果改bug的時間比重寫還久,為什麼不一次把事做好?如果上級要求,每個程式都要做到最好,然後還要加班工作,你直接說"不可能,要不然你做給我看看",我們是"人"需要休息。
兩個諸葛亮
Pair Programming
三個臭皮匠勝過一個諸葛亮,那兩個諸葛亮呢?Pair Programming很多人誤以為是兩個人"分工"寫一支程式,其實是兩個人"同"寫,那怎麼一起完成呢?一個攻一個守,去想怎麼設計好一段模組,然後換成一個守一個攻,這樣兩個人的意見可以混在一起,做出來的東西犯錯的機會比較小。如果你有經過損失第一把交椅程式設計師的慘痛經驗,用這個方法可以有50%的機會保你,不過一般經過PP以後兩個人會變死黨,一起走的話那就沒救了。
沒有自動測試休想簽入
Test-Driven Development
很明白了吧!依照規定來,先寫測試再寫程式。沒有測試的功能不存在。
簡單是王道
Simple Design
任何時間只要發現設計太複雜就要想辦法簡化。因為複雜的設計不好維護,然後你花越多時間維護,東西會變得更複雜,斧底抽薪的辦法是一發現就先簡化。
不要等,不要猜
On-Site Customer
如果你對客戶的需求有什麼疑問,有駐點專家的話,你可以馬上問,最麻煩的事就是你問半天沒人知道,然後等在那裡,或用假想的,這樣就不敏捷啦。不過你也不可以讓駐點專家浪費時間在Standby等你的問題,是吧?如果一個星期可以有一天,那你把這一星期需要的部分搞清楚,剩下的用打電話問就好了,Agile就是要想辦法變通。
還有一些沒提到的重點,歡迎大家提出來分享。
2009年3月21日 星期六
NASA 的 Agile 經驗
2009年3月20日 星期五
微軟內部Agile成功個案 -- CodePlex
Sara Ford's Blog - How I Learned to Program Manager an Agile Team after 6 years of Waterfall
背景介紹
Sara Ford 從學校畢業以後就馬上加入Microsoft,在Visual Studio團隊工作了六年,目前在CodePlex團隊擔任Program Manager(程式經理)的工作,她在這篇部落格文章裡描述了怎麼從每三年一個循環到三個星期一個循環的適應過程,對想開始從傳統瀑布(Waterfall)開發模式轉到敏捷(Agile)開發的團隊而言,這份經驗很值得大家借鏡,我想當個中間人引導大家來讀這篇文章。
三加一個教訓
Sara用時光如果可以倒流的方式來點出三個Agile的重點
1.Design and plan for the very next step, instead of designing and planning for the very next feature.
我想把它譯成:"要就馬上做,不要想著下次再改"
有很多時候花很長時間想設計,寫了長達60頁的規格書,結果到後來寫出來的程式不見得跟規格書一樣,倒不如不想太多以後,只想接下來三個星期可以完成的工作,專心的把事情做好,這樣就比較不會落入"等太久"或"想太多"的麻煩,每次專案都是到後來才趕工累得要死,而且很多時候都是程式開始寫的時候問題才會出來。
2.Break down work into smallest possible sets. Adding work is fun and rewarding; removing works is panful and risky
不以善小而不為;把小磚塊建好了才有辦法蓋高樓。
把工作細分,不要覺得事情小就不以為然,這是Agile的重點之一,Sara本來覺得只把三個星期完成的事情送出去外面給使用者會被嘲笑,殊不知把一項完成的工作堆出去,要比三項半成品推出bug一堆好得多,所以Agile是著重在可以合理掌控的工作量。
3.Design and plan 80% of the way as the very next step. Use feedback to solve the remaining 20% in the very next step after that.
每次解決80%的問題,剩下20%接著解決,所以不想完美主義,事情才可以一步步完成。
很多問題是沒辦法一次解決的,在解題的過程中你會得到一些重要的資訊,接著要解決就比較容易,有些問題甚至會自行消失,變成不是問題。
4. Forget everything you’ve been told about what makes a Program Manager successful at Microsoft. Thinking about this will only drive you insane and make you completely miserable on a real agile team.
第四點是她在Microsoft的心得,原本在大案子裡做的經驗要全部忘掉,這樣才能完全融入Agile的開發環境中。
隱藏的資訊
我覺得Sara的成功經驗有幾個重點,大家不注意可能看不見:
1.專案特性
由於CodePlex是一個推動OpenSource的網站,所以五星期一次的更新週期沒有問題,如果像一般軟體需要測試安裝或切光碟的話就不太容易。
2.老闆支持
Sara的老闆 Jim Newkirk 出過一本 Test-Driven Development in Microsoft.NET 的書,所以老闆本身是相信Agile的。Sara剛到組裡的時候問"密碼最長幾個字元?"結果每個人都告訴她"去看測試程式是怎麼寫的就知道了!"實際的建置取代了文件,這是Agile的重點。
3.Developer主導的Agile
Sara說,有人問她是怎麼說服這個團隊用Agile的?她回答是"剛好相反,是她被說服的,本來這個小組的Developer就是Agile了",讓寫程式的人主導要怎麼做,讓可以直接影響軟體品質的人主動要求,這樣做出來的東西要不好也難。
4.你願意放棄你所熟知的方式嗎?
我想這是執行Agile的最大阻礙,管理程式設計師的專案經理一但失去所謂的"控制",要讓大家去"亂搞",那就沒有章法了。Sara用了很多心思去放棄原先的思維方式,最後發現Agile的開發方式對這個團隊而言是比較合理的。
後記
各位可以注意一下5星期為一周期的規劃圖,兩週寫程式,一週穩固,再來讓測試小組接手做一週的完整測試,然後第五週放上機房。
另外他們的辦公室配置也值得一提,所有的人全部在開放空間裡(來上班的時間就工作,工作完早點回家,不要在公司做家裡的事,在家裡想公司的事,Very Agile!),寫程式的人兩個人一組坐在Y型的桌子(Pair programming),測試小組在左方一排,Developer可以直接跟Tester討論測試結果,PM去面壁別吵到大家(No Manager is Good Management)。 :)
白板上用來控制專案進度的貼紙,很有效,誰什麼時候做什麼事情一清二楚!
在Microsoft總部這裡Agile己經引發一股熱潮,有越來越多的成功案例,不過都是局限在小一點的專案,目前聽說最大的團隊是Office裡的OneNote,而且不只Microsoft,NASA也有成功案例,以台灣大多數是小規模軟體公司來看,這確實是值得注意的發展趨勢。
標籤: 技術分享, MIC Taiwan
2008年12月29日 星期一
我家的主機-資料保存與備份的經驗分享
一個困擾我多年的問題,利用最近休假的時間終於把它解決了,或許這是一般小型NPO也會遇到的問題,所以在此分享我的經驗。
問題
1) 太太嫌她的電腦越來越慢,掃毒軟體找不出問題,只好重灌系統,加上資料轉移的時間,每次要花上一整個週末。
2) 小朋友不曉得怎麼玩的,弄到電腦沒辦法開機,修一下要花個老半天的。
3) 太太有一群媽媽朋友們,三不五時會出些疑難雜症,比如說中病毒,或筆電上的硬碟空間不夠用,到我手上大概都已經過了好幾手已經不行了,可是我還要花時間救她們寶貴的資料才能進行重灌。
4) 共用的印表機接上我書房的電腦,如果沒開大家印不出來都很氣我,尤其小朋友要趕作業,而我又在加班的時候。
5) 家裡的相片、音樂真的不知道放在那一台電腦上,要用的時候都找不到。
環境
先介紹我們家的資訊平台,我們家有七部電腦:四部桌上型、三部筆記型,其中兩台電腦是主機(其實就是淘汰下來比較慢墊腳用的電腦),我有一部四核心的桌上型跟一部筆記型電腦,其他媽媽跟兩個小朋友一人一台。
先前的解決辦法
之前我是用Norton Ghost做全硬碟備份,可是因為我買了一份版權只能在一台電腦上進行備份,所以要把筆記型電腦的硬碟拆下來裝在外接USB硬碟盒子裡,再做備份的動作,每次都要拆裝電腦很麻煩,而且每次當機以後,只能回存原先備份時的資料,中間增加的資料都會遺失了,後來我買了一個外接式500G的硬碟加上3份Norton Ghost的授權做自動每週備份,可是沒多久就用盡了硬碟空間,因為麻煩所以就沒繼續下去。
Windows Home Server 方案
會知道 Home Server 是有一天在走廊上遇到多年沒見的老同事,聊起來近況,他提到他做的一個磁碟連結技術,可以把好幾個容量不同的硬碟加起來變成一個大硬碟,同時還可以支援容錯(就是當某一個硬碟死掉的時候你的資料不會遺失),當時我已經錯過了公司提供的員工特惠價,所以幾個星期前趁去Company Store(讓微軟員工可以用員工價買軟硬體的商店)時買了一套花了US$35,公司很鼓勵員工們在Company Store買軟體去捐給NPO組織,所以如果我買了以後捐給NPO,憑收據公司會再寄給NPO一張等值的支票,這叫Match Program,簡單的說我捐一百塊的軟體給NPO,微軟會捐一百塊的現金給同一家NPO。我之所以提到這點是因為,我願意以個人名義捐贈五套,如果有那一家NPO在看了這篇文章以後想安裝Home Server我可以提供軟體,至於現金嗎?要在美國有合法登記的才收得到。癈話少說,讓我們繼續下去。
我把一台三年前自己組裝的電腦拿來當主機(Server),湊了三台SATA的硬碟,加起來大約1TB,安裝的過程與一般的XP沒什麼兩樣,手冊裡重要的事項大約只有一兩頁,所以應該難不倒一般的玩家,由於是特別的主機板所以花了一點時間到華碩找了驅動程式,由於Home Server的基礎是Windows Server 2003,所以下載時要注意選對版本。
主機安裝的最後一個步驟是經過一個精靈來完成各項的設定,例如主機的名稱、密碼還有建立使用者的帳號等等,不會很複雜,弄好了以後,接下來要到每部機器裝Home Server Connector Software(從附帶的CD),這時主機的螢幕跟鍵盤都可以拔掉了,因為你可以從任何一部機器用Connector連到主機去控制它,下圖顯示我家所有的電腦,在這個畫面裡可以直接控制備份的進行:
增加一個硬碟很容易,先關機以後,裝上再重新開機,然後用Connector連上以後,選Server Storage就可以看見新增的硬碟,你可以選新加的硬碟是要做容量擴充用的,還是做保全備份用的,一樣是有個精靈,下圖是我家主機裡4顆碟的狀況:
當電腦無法開機,根據手冊只要用救援光碟開機,很方便就可以選擇備份點回復電腦到之前的狀態,不過我還沒試過,等下次試過了再跟大家分享。
網路上的伺服器
我發現這項功能可能對一般的NPO很有用,Home Server可以把主機上分享的檔案,設定成一個Internet上的伺服器,我本來以為很麻煩,結果沒兩分鐘我就建立了bentham.homeserver.com,如果你的路由器支援UPnP的功能,HomeServer會自動設定,如下圖我可以從任何地方上載下載我家主機的資料,而且是用保全的HTTPS加密傳輸,比起一般的FTP要安全多了。
另外從網路上任何地方,你還可以直接登入你辦公室裡的電腦,這也是透過安全的HTTPS,下圖是我家XP電腦有打開遠端連線功能,可以直接登入:
有很多細節的部份沒有列出來,如果大家有任何的疑問歡迎加入討論。