Archive for the ‘管理學’ Category

為什麼軟體工程無法估算時間?

Monday, April 11th, 2011

我們都有這樣的經驗:要開發一個東西,請工程師估算時間,大概要五天。結果過了一個禮拜,東西還沒出來。一問之下,碰到了原先完全沒有預期的情況,否則就是某個套件原來不能這樣用,必須要換一個,否則就是一個莫明的錯誤,找了一個下午還是不知道為什麼。久而久之,工程師開始習慣在回報的時間裡面灌水,預留空間給這些「未知數」,而我們也常常把他們給的時間乘以二,來得到最壞情況的數字。問題是這樣的方法之下,最後整個組織開始習慣用最龜的速度前進,因為估算精準、動作快,在這中間一點好處也沒有。更壞的情況,是叫九個女人去生一個小孩,那才是災難的開始。

為什麼軟體工程無法估算時間?

要了解這件事情發生的原因,你必須要先知道為什麼軟體工程是無法估算時間的。我以前常常喜歡用「常態分布」來解釋軟體工程時間的花費 — 上述的情況,讓大家慢慢從 Average 變成 (Average + 3 STD) 估算,最後平均浪費了 3 STD 的時間 — 不過這只是統計學上的解釋,並不是真正的「原因」。直到我前幾天看到這篇文章:「Why Can’t Developers Estimate Time?」,才給了我超大的一個領悟。(文章有點難,不過英文不錯的人,我鼓勵你們去讀讀。)

作者 Ashley Moran (愛許麗‧莫倫) 說:

我們無法預測軟體開發中每一個項目的時間,是因為這些工作的本質就是「創造新知識」。開發軟體的目的是創造「自動化的流程」,一但目標達到,自動化後的流程就可以重複的被執行,在可預測的時間裡面。所以一個軟體就像是「食譜」一樣,而電腦就是「廚師」,輸入的資料是「食材」,而輸出的資料是「晚餐」。

因此,我們在做的事情是讓未來從不可預測,變得可預測,讓大哥小弟、老爸老媽、只要想煮飯的,人人都可以當食神,給他三十分鐘,都可以弄出一鍋超級無敵海景佛跳牆。所以,「開發食譜」這件事情的本身,是一個創造新知識的過程,時間上當然很難預測。

如何管理

因此,軟體工程用硬體工程的模型去管理,從出發點就是錯誤。一個建築案是先有了「藍圖」,才去估算每個細項需要的時間。當我們在做的是藍圖本身,怎麼能夠沿用他們的模型?如果是這樣,一個創業團隊該如何「管理」開發的時間?

我的答案是你沒辦法 — 你怎麼能夠控制臭蟲什麼時候要出現?但是你可以管理「生產力」,也就是確認團隊總是在高效率的情況下工作,那最後你會得到的是 Average 的工作時間,比起前述 Average + 3STD 快上了 3 STD,這前後有可能就快了 2-3 倍。

而要管理「生產力」,一個現代化的軟體開發團隊,我認為有以下的幾個好工具可以用:

  • Pair Programming (兩人小組) — 一個人寫程式常常會有盲點,兩個人一起則可以看到對方遺漏的地方。更重要的是兩個人都會從對方身上學到很多知識和技巧,彼此都會成長。而當兩個人都了解一組程式碼,日後的維護也有了兩個選擇,不會因為一個人請假、離職,這些 code 就變成孤兒。記得給他們兩個鍵盤,實務上這會比鍵盤移來移去有效率。
  • Daily Stand-Up Meeting (每日早會) — 每天早上固定開一個快速早會,全部人都站著,每個人依序報告昨天的進度,碰到的問題,和溝通彼此程式間該如何傳遞資料。這讓團隊明確的知道彼此的進度,也省去很多溝通不良的麻煩。
  • 高效率的工作環境 — 開放、明亮、舒適的工作環境,或許讓大家換上拖鞋,確認團隊成員們可以取得他們需要的飲料、食物,但是不會吃得過飽、或是喝下過多的咖啡因。當其中一個成員困惑時,確認有人可以幫助他。
  • 隨時找得到使用者 — 代表「使用者」的那個人 (通常是 PM),最好是使用者本身,必須要隨時在現場,幫團隊解釋開發上細節不明確的地方。
  • 設定上線時間 — 雖然你沒辦法知道每一個子項目會花的時間,但是你可以設定一個上線的時間,然後所有的人通力合作在那個時間之前,盡可能做出一個可以推出的版本。當然,如果第一個版本推出時你不會覺得丟臉,那就是花了太多的時間

以上,希望可以幫助你們重新思考軟體開發該如何做,也希望對你們正在做的網站、行動應用有幫助。(當然這不是完整的列表,歡迎大家提出你們喜歡用的工具。)

___

除了網誌,我每天都會在 Facebook 分享許多創業者應該關注的資訊,歡迎追蹤

(Image via purecaffeine@flickr under CC license)

你應該這樣徵才

Monday, March 28th, 2011

如果你現在到矽谷,有名的 101 號高速公路上往北開,Palo Alto 附近,你可以看到這個巨型的戶外看板。當紅炸子雞 Groupon 砸大錢買廣告,賣的居然不是網站,而是要招兵買馬 — 他們的矽谷辦公室剛剛開張,一出手就要請 100 個技術人員。那天 EZTABLE 的創辦人 Alex 看到這則新聞,馬上轉寄給我,然後跟我說:「Groupon 超屌,有一天,我們也要這樣搞。」

當然,講這句話不代表 Alex 真的想要在一號國道旁邊依樣畫葫蘆,買兩個看板來漱漱口。而是一家像 EZTABLE 這樣的新創公司,當它走出創業初期的摸索,找到一些成功之後,你就會發現你不斷的欠缺同一樣東西 — 那就是人才、人才、更多人才。尤其是網路業,因為好的人才是我們唯一的 raw material (原始素材),有了他們,你想要開發什麼了不起的應用,通通做得出來。相反的,當大家都下班回家,你的辦公室就變得一文不值。

所以,appWorks 前陣子幫我們育成的團隊們辦了一次聯合大徵才,有興趣加入新創公司的朋友,這些都是當今台灣網路界的一時之選。除此之外,今天要分享一篇上輩子是我雙胞胎哥哥的 Mark Suster (馬克‧薩斯特) 寫的好文:「Whom Should You Hire at a Startup?」按照慣例,英文程度不錯的,請連過去讀讀原文,以下,是我加入了自己的經驗,幫大家做的整理:

只請 A 咖

為什麼?因為 A 咖只想跟 A 咖一起工作,如果你先請了一個 B 咖,那千萬別想再請到 A 咖。當然,所謂的 A 咖並不一定就是大神級的人物。我第一次創業的時候跟好幾位 ACM 金牌得主一起,結果問題是他們只想要搞最新、最屌的技術,對於修理 bug 一點興趣也沒有,這對彼此都不是好事。更重要得是請得了 A 咖,你還必須管得動他們。自己沒有三兩三是不行的,就算沒辦法寫 code,你也必須要能掌握程式裡面所有重要的邏輯,這對於團隊內溝通的效率,有著致命的影響力。

找到那些跨級挑戰者

很多人會去找現任重量級拳王,但問題是你很有可能完全抓不住他們,尤其是創業初期時。你還是去找有二、三年經驗,正在一步步往重量級邁進的中生代新星,Mark 和我都覺得比較實際。更重要的是他們還很飢渴,還需要嚐嚐成功的滋味。讓這些人跟著你一起變成重量級拳王,那個過程更是有意義。

永遠都在徵才

既然人才是你最重要的資源,那你必須要永遠處於尋找模式。當然不代表你馬上就邀請他們加入 — 這裡還有時機和資金等問題,但你至少要透過各種方法來和他們接觸、認識、保持關係。人家在辦 OSDCStartup Mixer?還不趕快移動你的屁股去參加?再不然你至少也要在 Twitter 上面追蹤他們,沒事一起聊聊天。你必須要能夠回答這個問題:如果我現在拿到 1,000 萬,我要拿去顧哪些人。如果答案是 104,那就代表你花太少心思在徵才上了。

不要擔心「空缺」

常常聽到創業人說:「這個人很棒,但是我們沒有空缺,怎麼辦?」怎麼辦?如果小飛俠布萊恩 (Kobe Bryant) 要加入你的球隊,你死也要把先發得分後衛挪出來給他,是吧?所以重點是一個人的能力、進化的速度和他與團隊合作的態度,如果這些都合乎的話,那角色是可以生出來的,況且比起一個籃球隊,我們是可以有兩個得分後衛的。

態度比高度重要

如果你跟我一樣是籃球迷,對於這點就會有很多領悟。每年都有好幾個球員,天賦異稟,被認定是下一個 Michael Jordan,可惜不然就是不練球、不然就是獨、不然就是品性不良,到最後什麼成就也沒有。這些不是你要的球員,你要的是肯學習、想進步、重視團隊合作的人。所以,態度比高度重要。

文化、文化、文化

這一點講了好幾次了,前面幾個員工,決定了你公司的文化。而你公司的文化,對整體生產力的影響高達 3-5 倍。所以,你必須要慎選,寧缺勿濫,如果發現壞蘋果,當機立斷。市場雖然動得很快,但是屈就於不好的人才,對你的勝率只有負面的幫助。

別賣狗肉

當你確定時機對了,資金到位,人也對了,很好,接下來就是吸引對方加入了。這時你要注意千萬不要過份誇大,在你願景的範圍內,用力的賣你公司的好,但是別讓他有過度的期望。因為期望越高,失望越大。最好是賣到足夠讓他加入,然後自己去體會公司還有什麼的好,這樣是最高明的。沒錯,有點像在追女朋友,很難,但是你必須要學會這門藝術。

以上,就是關於徵才,你應該要記住的六個重點,希望對你們有些幫助。

網路創業是一門很深的學問,絕對不只是做出一個受歡迎的產品而已,從人脈、夥伴、市場、策略、行銷、通路,你都需要一個專業的組織在你背後支持你。歡迎加入已經有 24 個創業團隊的 appWorks 家族,第三屆 appWorks 育成計畫,今天 (3/28) 最後一天,詳情請見 appWorks 網站,或是線上申請書。期待看到你們的加入!

(Image via crunchgear.com)

如何當一個好的領導人,Google 用演算法幫我們導出

Monday, March 14th, 2011

啊,Google 就是 Google,無論什麼事情,他們就是要用科學的精神去探討,就算是像管理這樣難以量化、難以衡量的題目,他們也不會因此善罷甘休。昨天《紐約時報》大篇幅報導,Google 花了一年多時間,用演算法分析了公司內部所有的經理人的評量、考績、團隊表現、員工訪談、意見調查等種種資料,整理出一個「如何做一個好領導人」的列表,我認為相當值得參考。

這個名為 Project Oxygen (氧氣計畫) 的研究計畫,產生出來的成果其實並沒有太令人意外 — 大多都是管理學上早已被認為有效的領導模式。怎麼回事?Google 又失去魔力了嗎?不!其實這個研究是很有意義的,因為它是第一次,有人這麼大規模的用真實公司的真實數據,去證明這些工具是有效的。另外,以往我們不知道這些管理規則彼此間的重要順序,但根據 Google 的研究,它們的確是有輕重緩急的。所以,以下就是 Google 研究出來的結果:

一個好領導人的 8 個最重要工作

1. 當一個好教練

  • 給予成員們非常明確且有建設性的回饋,並且平衡正面和負面評價
  • 經常性的一對一對談,根據每個人的專長建議問題的解決方式

2. 把權力下放給團隊,千萬別事必躬親

  • 給成員們自由揮灑的空間,但是有需要時要讓他們隨時找得到你
  • 給他們一些長期的專案,來幫助團隊解決大的問題

3. 對團隊成員的成就和心情保持高度的興趣

  • 去了解團隊每個「人」,知道他們除了工作外也是有生活的
  • 讓每個新成員覺得他是受歡迎的,來降低過渡期的焦慮

4. 不要優柔寡斷;注重生產力和用結果來證明一切

  • 把注意力集中在成員們想要團隊有什麼成就
  • 將團隊工作按重要性排序,並且利用你的職位幫團隊移除障礙

5. 用心在溝通上面,並且聆聽團隊的聲音

  • 溝通是雙方的,你要分享資訊,但也要聆聽
  • 定期召開 all-hands (全成員) 會議,直接了當的說明團隊的目標和你需要溝通的訊息,千萬不要拐彎抹角
  • 獎勵開誠布公的發言,用心聆聽團隊成員們的問題和憂慮

6. 幫助你的團隊成員計畫他們的生涯

7. 團隊必須知道你有一個非常清楚的願景和策略

  • 即使是在最糟的谷底,也要確認團隊上下有一致的目標和策略
  • 讓成員們參與願景的設立,並且隨著時間提升目標,不斷的朝著它前進

8. 擁有關鍵的技術能力來幫助他們解決問題

  • 有必要的話,把袖子捲起來,跟成員們一起工作吧
  • 了解該項任務最確切的挑戰

一個領導人的 3 個最糟糕行為

1. 無法了解和領導團隊

  • 有時候好的成員被提拔成為經理人,但卻沒有領導的能力
  • 從外面來的經理人,常常無法了解 Google 的文化

2. 前後不一的工作表現衡量和生涯規劃

  • 沒有幫助成員們了解 Google 的文化和規矩,也沒有輔助他們成長和學習重要技能
  • 不積極,只等員工來找他

3. 花非常少的時間在管理和溝通上面

以上,就是 Google 用演算法推出的「氧氣管理學」。請記住,順序非常的重要,如果你沒辦法全部做到,請先從前面的項目開始。另外,在套用之前,你必須要知道並不是每個組織都應要像 Google 一樣來管理,所以請你也針對自己團隊的特性稍做調整。

創業,不只是做出一個受人們歡迎的產品而已,更重要的是建造一個擁有超強執行力的團隊。在 appWorks,我們周周研究 Startup Case Study,帶你深入創業 MBA 的世界,成為一個真正的「創業家」。第三屆 appWorks 育成計畫,已經開放申請,詳情請見 appWorks 網站,或是線上申請書。期待看到你們的加入!

(Image via omnidirectional@flickr under CC license)