顯示具有 專案 標籤的文章。 顯示所有文章
顯示具有 專案 標籤的文章。 顯示所有文章

[讀書心得] 告別瀑布擁抱 Scrum



原本想自己畫一張圖來說明,不過網路上已經看到很棒又很宅的說明圖,就直接引用了。

先說明一下角色:

  • Product Owner:就是 PM,客戶需求與開發團隊的橋樑,確認做出來的東西是不是客戶想要的。
  • Scrum Master:熟悉 scrum 的人,了解 scrume 流程要做些什麼,有哪些 scrume 工具(ex:看板,燃盡圖...etc)可以用。
  • Team:就是實際在開發的開發成員啦。
接下來就直接看圖說故事了。


圖片來源:http://www.scrumprimer.org/en/anime

整個流程可以分成三大塊:
  • Sprint 計畫會議(上圖左)
    • 類似 kick-off 會議,Product Owner 將客戶需求說明給大家聽,由開發成員把需求轉化成工作清單。
    • 決定第一個 Spirit 的工作清單。
    • 會議時間不超過一天。
  • 每個 Sprint(上圖中)
    • 一個 Sprint 為一週 ~ 一個月。
    • 每個 Sprint 的目標就是完成該 Sprint 的工作清單。
    • 每日立會
      • 昨日完成哪些工作。
      • 今日預計要完成哪些工作。
      • 讓別人知道遇到那些困難,會後就可以討論。
      • 每日立會時間不超過15分鐘。
    • Product Owner 要保證不變動目前在開發的需求,所有變動都等到這個 Sprint 完再說。
  • 每個 Sprint 結束後(上圖右)
    • 檢視會議
      • 檢視目前的專案狀況。
        • 完成的工作。
        • 沒完成的工作。
        • 新增加的需求。
      • 決定下個 Sprint 的工作清單。
      • 決定是否要繼續執行專案。
    • 回顧會議
      • 針對開發流程做討論。
      • 預估 SKD 是否準確,為什麼?
      • 哪些流程工具需要改進。
    • 兩個會議時間加起來不超過一天。
最直白來說,不斷執行 Sprint,執行完一個 Sprint 就做調整。

個人感覺最大優點有幾個:
  • 理論上每個 Sprint 完,都應該有個可以動的東西(雖然功能可能不足)讓客戶看到並反饋,再根據客戶反饋來修正或修改需求,而不用等到第一次正式交付才發現我做的不是你要的。
  • 開發成員眼前的目標就是這個 Sprint 的工作,而 PM 要保證這個 Sprint 內都不會有變動也沒人會去打擾開發成員。有變動沒關係,下個 Sprint 再說,如此開發人員有個節奏,而不是永遠做不完的死亡行軍。

專案管理工具 - Teambox


昨天看了這篇 womany 營運秘技公開:必備輔助系統應用與專案管理工具,裡面提到 womany 做專案用到的工具,有些工具拿來當自己紀錄、規劃也都很好用。內文有提到一個 Teambox 的專案管理軟體:

> Teambox(好個團隊盒子)
我們曾經嘗試使用很多專案管理系統。從自己拉excel 表格,使用 Trello、Redmine,到目前的我們用的是 Teambox 。
尋尋覓覓,我們找到 Teambox ,基本上是結合 Trello 、 Redmine 、evernote 的各項優點。不僅可以整合 github、dropbox、google document 等雲端服務,也可以自動匯入甘特圖,也有筆記本(Note) 功能,我們現在都把會議記錄放在 teambox 裡(因為共享的 evernote 不具有修改功能)。我也特別喜歡它的手機版本,清晰易用,其 task list 還能匯出成 excel 或 word 檔,貼在牆壁上,也很有一番提醒作用。
既然 womany 從 Redmine (目前公司以及自己私底下都有在使用)轉移到 Teambox,必然有其強大之處,而且 Teambox 是一套雲端服務(就像 Dropbox 一樣),不用自己抓原始碼回來架站,就去申請了帳號來玩,順便把自己一些項目轉移到 Teambox 來使用。

Teambox 的使用者介面很簡單,專案控管的概念也很容易上手,不會像一般專業的專案控管軟體,有一堆很嚇人的欄位,免費版本也很夠用,就寫了一份簡單的投影片介紹(含標題沒超過 15頁,超沒營養,點點點三十秒就介紹完。)。

程式碼釋出授權條款

剛好查到,紀錄一下做為麵包屑.

BSD

  • 衍生的程式碼無任何限制.
  • Apache License 2.0

MPL

  • 衍生的程式碼使用原條款授權.
  • 自己寫的程式碼可以自己任意授權.
  • Mozilla Public License 1.0
  • Sun Public License 1.0

GPL

  • GNU Library / Lesser Public License 2.1
    • 單純利用 LGPL2 函式庫,自己寫的程式碼不受感染.
    • 修改 LGPL2 函式庫並納入自己的程式碼中,自己寫的程式碼會受到感染.

程式碼釋出授權條款心智圖

參考網址:

用客戶的角度來看待設計決策

閱讀 How To Communicate Design Decisions To Clients? 的簡單翻譯兼筆記.

漂亮並不代表有效率

  • 漂亮的介面同時也代表會花費較多的時間及心力.
  • 漂亮的介面 與 特效 並不一定會帶來相對數量的生意.
  • 何時需要使用漂亮的介面/特效,還是得根據想達到的目標來決定! (殺雞是否要用牛刀)

每一個設計都應該有能量化的目標

  • 如果目標不能量化的話,那目標就只能是目標! like 建立一個[小黑宅]的品牌!
  • 訪客數量,在線人數…,這些就是很好的例子.

你的網站應該要有一條明顯的資訊路線

  • 訪客是用像瀑布的方式來瀏覽你的網站.
  • 一張網頁有大量的選擇,很容易讓訪客迷失其中.
  • 訪客不會認真思考去找出正確的路徑.
  • 試著離螢幕遠一點,再來瀏覽你的網站,是否能一眼看出你想傳達的訊息/功能.
  • 請讀一些 eye reacking 的研究,不要再要林北用大紅大藍當做字的顏色了!

切記瑞士小刀的例子

  • Google 有很多功能(並且可能互相關聯),但它不會在同一個地方同一個時間全部亮出來給你看!
  • 有一個最主要的功能,讓初來的訪客使用並留下印象. Google –> Search
  • 其他不是主打的功能,讓進階的使用者在有需要的時候再來使用. Google –> Search –> Blogger,Picasa,…
  • 首頁就把所有刀子都亮出來的網站,很容易把初到此處的訪客給嚇跑!
  • 讓網站有明確的路線及目的,同一頁面上的多餘功能只會讓訪客混亂分心!
  • 堅定此原則: 排除任何不需要的設計.

提供一些效率圖表

  • 展示客戶最愛看的圖表.
  • 讓客戶知道”你不只是設計程式/介面,你還懂得客戶到底想要得到什麼”.

不論身處什麼行業,請用客戶的語言(思考/概念)與客戶溝通.

十個軟體設計師應該有的觀念

閱讀 Top 10 Concepts That Every Software Engineer Should Know 的簡單翻譯兼筆記.

好的 RD 了解並使用 Design Pattern,積極去 Refactor 程式碼和編寫測試程式,並讓一切事物保持簡單! 除此之外還有10個概念是我們必須要熟悉的.

Interfaces

  • 現實生活中的問題 –> 系統內的模組
  • 不要加進一個你覺得未來會很有用的方法.
  • 不要害怕承認過去自己做的蠢事.
  • 享受設計的過程.

Conventions and Templates

  • 命名規則 和 程式樣版 是最簡單最有用也是”最被人忽視”的有用觀念.

Layering

  • 相同概念的元件組成一個子系統.
  • 整個系統就像是一座金字塔,由底層子系統慢慢建構上來.
  • 系統內不會有互相依賴(迴圈)的情況發生(好萊塢 Pattern).

Algorithmic Complexity

  • big O notation. Orz 我全部還給老師了!
  • 以下為翻譯兼復習 囧rz
    • 在串列中,用一個一個比對的方式會是 O(n).
    • 在串列中,用 Binary Search 會是 log(n).
    • 而將 n 的項目排列則是 n*log(n).
  • 少用多層次的巢狀迴圈,而改用 Hashtable , list 或 單層巢狀迴圈.

Hashing

  • 我們有很多的現成實作函式庫,讓我們可以把精力花在”判斷何時要使用 Hash” 以及 “微調參數提升 Hash 效率”這兩件事情上.

Caching

  • 每一次打資料庫都是一件耗時的工作.
  • 快取”時常需要產生並不太需要即時反應的結果”.

Concurrency

Package java.util.concurrent

Cloud Computing

Security

Relational Databases

自己的心得:

寫程式的面向真的很多,要全部都會我看我自己這輩子是不可能了! 但如同原作者最後所述:

But a good craftsman still needs to know what tools to use, when and why.

做不成大師也要成為一個不錯的工匠! 就這樣!

使用者介面導向的開發方式

原文為 UI-First Software Development ,無心得只是留個紀錄方便我未來找工具要用.

使用工具:

大公司的軟體開發有啥問題

諾曼地登陸
(圖片轉自: http://space.uwants.com/html/78/46178_itemid_4745.html )

以下為閱讀 What's wrong with software development in large corporations 的筆記:

  • 大公司採用軍事化的方式來管理員工. 董事長像是將軍, PM 就像是士官長,死了只剩下狗牌的就是工程師.
  • 軍事化管理是將士兵教育(洗腦)成不質疑命令.
  • 士兵承受後果的是死, RD 承受的後果是爆肝.
  • 軟體開發其實是一種探險,而不只是讓程式跑起來而已!
  • 充份了解問題後才解決問題!
  • 軟體開發是種學習>反應>實驗 更接近於科學家或藝術家的創造行為.
  • 練習根據 End-User 說的故事來解決問題.
  • RD 是否理解專案的本質 或 僅僅只是處理上面交待下來的 To-Do List .
  • 按規格編程 = 打仗(只知攻下某個地方就有機會回家抱老婆了).
  • 師徒制度有利於公司內培養更多的戰力,也有教學相長的功用.

結語: 我沒待過大公司,所以以上筆記請看看就好!

版本控制系統

本文無內容,只是方便我以後需要時重新閱讀一次! Orz

淺談版本控制系統
SVN 基本指令教學 (Tsung 寫的, Tsung 也有逛到我 Blog 的樣子. Orz)

四十個讓專案慘死的理由

剛發現這篇被貼上去了! 先聲明! 這篇只是學習筆記! 大家請看原文不要被我爛英文誤導! 原文寫的不賴,會接觸到 "專案" 人看到,應該會點頭如搗蒜! 此篇為方便本人有需要看的導讀文! 非翻譯文!

基本上,我是因為看到 一網打盡軟體開發的設計模式、錯誤模式、重構 這篇推推王的介紹才知道這個網頁,我只能說這是我最愛的菜啊!

資訊很多的壞處就是:

  • 很難一次吸收!
  • 要用時找不到!
  • 吸收完又還給它!

所以為幫助自己學習,就只好邊看邊寫,寫些無聊的話語加強記憶了! 原則上有看就寫,先看個大概(快速掃描),日後碰到可先看此篇找到繼續看下去的入口(資訊太多的下場 Orz). 今天先看 Antipatterns 這部份:

整篇看完,發現大部份的議題著重在政治面上,再來是設計,幾乎沒有編碼技巧的部份.

Reinvent the Wheel

不要重新造輪子!

Death by Planning

不要過度設計!

Intellectual Violence

因為專業知識造成的誤解. 可靠團體內知識分享的會議來解除.

Design by Committee

什麼都要靠開會決定!

The Feud

人際關係! 解法: Pizza Party Orz

Throw It over the Wall

知識傳達的正確性.

Irrational Management

不當的管理(這應該是很多人的痛)!

Spaghetti Code

一堆爛到不行的程式碼,連寫的人都看不懂. 解法: 重構,寫之前先動腦...

Cover Your Assets

一堆沒有做出決定的文件.

Fear of Success

專案快結束了卻開始害怕東害怕西!

Viewgraph Engineering

做不完的圖表報告!

Project Mismanagement

直接翻譯: 專案的不當管理. Orz

The Blob

一個 Class 負擔了太多的責任,裡頭包含了大量的程序,看起來像是 procedural-style .

這讓我想起最近改寫的惡夢 - 一個 OK 按鈕下去就是 500 行以上的爛扣!

解法: 把責任分散出去.

  1. 根據設計合約來檢查屬性和方法,將其移至合適的地方.
  2. 生命會自己找到出口(原文也很玄,原諒我用這種不負責任的翻譯方法!). 將它放到它該住的地方. 狗身上不會有狗的鼻子,看不出來,你就不是個夠格的 RD!
  3. 移除關聯性太弱的連結.
  4. 移除弱連結,加上合理的新連結. 有點像公司的組織,董事長不會跟每個人都有聯結,一定是他管理你的老闆,你的老闆再管理你. 此例中,就是移除董事長身上跟所有基層員工的連結(因為這不合理),然後每個中頭目跟小頭目上加入他所管理的成員.
  5. 將可抽取的行為搬出來(Strategy Pattern).

Continuous Obsolescence

使用的語言,函式庫...不斷地改版.

Lava Flow

時間一拉長造成的問題:

  • 程式碼越來越龐大.
  • 逐漸失去正確性的註解.
  • 專案成員的替舊換新.

總歸一句, "專案依舊,人事全非".

Ambiguous Viewpoint

恕小弟無知,我看不懂!

Functional Decomposition

自以為用 Java 就是在寫物件導向的程式.

Poltergeists

"我不知道這個 Class 做啥的,但我知道不能刪掉它!" - 工程師 菜先生(28)

Boat Anchor

做一個沒有市場(或自以為有市場)的產品!

Golden Hammer

黃金鎚! Orz

Dead End

修改了一個原本廠商已經沒有在維護的可重用元件,之後維護的工作就落在自己身上.

Input Kludge

沒有針對使用者的輸入做合理的處理.

Walking through a Minefield

Bug 無所不在!

Cut-and-Paste Programming

CP 大法!

Mushroom Management

管理方式導致 程式設計師 跟 使用者 想法上的差距.

Autogenerated Stovepipe

軟體改版成分散式架構所遭遇到的問題.

Stovepipe Enterprise

一個企業應用程式下,分成各自獨立的多個系統,造成後續開發或維護需要付出更多的成本.

Stovepipe System

一整個就是廢的系統!

Jumble

垂直式的設計方式和水平(層級)式的設計方式不適當的混用,造成架構上的混亂及很難重新使用寫好的程式碼.

Vendor Lock-In

專案依賴第三廠商開發的軟體,該軟體的改變有造成整個專案實作需要修改.

解法: 在程式架構中加入一個新的中間層次,將抽象概念和實作概念切割開來.

Wolf Ticket

產品宣稱符合了新的標準. 但實際上,與其說符合新標準替使用者帶來好處,不如說是廠商為了增加品牌可見度而開發了該產品.

Architecture by Implication

做過類似的專案,而輕乎了現在手頭上類似的案子.

Warm Bodies

20個 RD 開發一個專案的效率 != 20 * (1個 RD 開發一個專案的效率)

Swiss Army Knife

一支包山包海能上天能遁地的 Class.

The Grand Old Duke of York

編碼員 vs 系統架構師

Blowhard Jamboree

太多自以為內行的專家,討論或散佈不一定正確的資訊.

Analysis Paralysis

過多為了追求完美的設計或行為.

Corncob

組織內的麻煩人物.

Smoke and Mirrors

一開始行銷或承諾畫了一塊大餅,在不可能達成的時限內,使用者往往只是拿到一個殘缺不全的四不像.

E-mail Is Dangerous

E-Mail 在某些狀況下不是個好的工具.

Fire Drill

管理階層花了大半的時間在規劃,壓縮到編碼及測試的時間.