敏捷開發如今已經不是新鮮事物了,咱們都從各類渠道聽到過不一樣的團隊實施敏捷的勝果,聽的時候以爲很美,回到家就發現那都是別人家的團隊,結合本身的狀況一看就發現問題一大堆。就算是最終打算一試,也常常會不知如何開始。這就是我但願編寫這份文檔的緣由,可以找到一個遵循的敏捷項目管理模型,雖然咱們都知道沒有一個放之四海而皆準的方法,但在更高的層面上我以爲這仍然是可行的。也就是說,管理模型是一致的,可是其中採用的方法可能各有不一樣,最終目標是惟一的:打造一支能夠快速適應變化的高質量團隊,並輸出高質量的產品!微信
今天想跟你們分享的是用戶故事的規劃過程,對於如何使用用戶故事驅動團隊的開發過程,後續會有更新。架構
用戶故事能夠幫助開發團隊從用戶的角度來理解需求,同時在交付的過程當中按照用戶可用的場景進行交付,確保了開發團隊能夠持續的交付用戶關心的功能。可是在實際開發中,團隊每每不知道如何入手。app
如何用好用戶故事須要解決幾個關鍵問題:運維
用戶故事的需求整理方式與傳統需求的整理方式有很大的不一樣,傳統軟件開發中咱們依賴用戶需求,技術需求,規格說明書等工具試圖使用規範的文檔來解決需求收集和傳遞的問題。在這個過程當中,咱們將用戶的需求轉換成技術能夠理解並可實施的規格。對於已經習慣了這種方式的人來講,要轉換成使用用戶故事的方式須要比較大的思惟方式轉變,你們每每遇到的疑問也是,難道使用用戶故事就不須要規格了嗎?其實否則,首先咱們要了解用戶故事究竟是什麼。工具
你們可能以爲既然咱們使用用戶故事來替代傳統需求,那麼用戶故事就是記錄需求的方式了。其實,用戶故事不是用來編寫的,而是用來討論和跟蹤的。性能
經過以上分析,咱們能夠看到用戶故事如何編寫並不重要,重要的是它所驅動的過程,經過這個過程,咱們能夠把用戶和技術團隊緊密結合,並讓你們產生對交付內容的統一認識。因此,用戶故事是一種溝通工具,而不是編寫工具或者需求模板!開發工具
在真正開始將故事以前,咱們首先要確保正確人都參與進來。對於規劃一款產品來講,你至少須要:最終用戶表明,產品經理(或相似Scrum中的PO),項目經理(或相似Scrum中的ScrumMaster),團隊中的技術骨幹(那些對實現的業務很熟悉,對所要使用的技術或者系統很熟悉的技術人員),技術骨幹又能夠分紅架構,開發和測試三個不一樣技能的人。這樣看來,你至少須要6我的參與這個講故事的過程(除非有些人能夠互相替代)。測試
你的故事是講給這裏面每一個人聽的,同時也但願每一個人都可以在講故事的時候有所輸入,不只僅是在聽。優化
講故事的過程咱們經過3個步驟進行:找線索 -> 畫主線 -> 規格化設計
用戶不知道從哪裏開始講故事,這是咱們會遇到的第一個問題。其實這時候用戶的心裏感受就如同看完一部電影之後走出電影院,試圖給沒有看過這個電影的朋友講述。想想在這個場景下你會如何開始?好比,大話西遊你們都看過吧;那麼講故事的方式是,孫悟空在500年前如何如何….,而後紫霞仙子如何如何… 你會發現,你永遠都會從某個角色開始講述。其實讓用戶講故事的方式也同樣,咱們首先要引導用戶說出這個故事裏都有誰。一部電影是多個角色的故事線交織的結果,一個產品也是同樣。有了這些角色,咱們就有了能夠抽取故事的線索。
這裏咱們能夠藉助2個工具來協助找線索:影響地圖和用戶畫像
關於影響地圖:【Impact Mapping 影響地圖 讀書與演練心得】
TODO: 完善使用影響地圖找出故事主角的過程
關於用戶畫像
http://www.zhihu.com/topic/19647591
http://cdc.tencent.com/?p=4898
你會發現,當團隊開始整理不一樣的類型的用戶的時候,他們已經開始天然的講述故事,由於要把一個角色說清楚,你就必須考慮他要作的事情,故事天然就出來了。可是在這個階段,咱們切記不要過於發散,明確咱們的目的是整理用戶畫像,只要不一樣用戶類型間的邊界清晰了,就能夠結束,不要爲細節糾纏。另外,在後續的過程當中咱們也會發現可能有些角色還須要添加進去,那麼就到時候說。
最終將咱們整理出的每一個用戶類型用一張即時貼粘在白板的最左側,以下圖:
通常我會按照距離最終用戶的遠近來擺放這些即時貼,同時對每一個角色進行編號,以便後續能夠很容易的進行引用。
有了故事的主角,講故事就相對容易了。在這個階段,咱們但願可以幫助團隊儘可能將故事的每個步驟的都想清楚,經過在看板上進行可視化,咱們就能夠達到這個目的。這裏, 咱們可使用簡化版的影響地圖,以下圖:
標準的影響地圖上有4個列,分別是WHY WHO HOW和WHAT,這種結構在進行比較大和模糊的目標討論的時候,如:戰略規劃,會很好用,由於HOW和WHAT比較容易區分;可是用在討論用戶故事的步驟時候,其實HOW和WHAT區別不大,若是堅持使用規範的影響地圖會讓團隊感到迷惑。因此,我建議將HOW/WHAT合併。具體來講:
請參考:【影響地圖中HOW的理解與對比】
如上圖:是一個標準的「新用戶註冊」的用戶故事,你們必定都很是熟悉。基本上這個故事就是瀏覽者經過 登陸->註冊->填寫信息->驗證郵件提交註冊,管理員審覈,成爲已註冊用戶後首次登陸->完善資料。但經過卡片的方式將每一個步驟放入白板後你會發現,整個團隊能夠很好的聚焦到很細節的問題上,同時又對整個故事具有全局觀。若是不借助這種可視化方式,那麼團隊可能很容易丟失當前討論的主線,從一個細節延展開到其餘的部分去了。
注意這裏對每一個用戶故事進行了ID標註,一樣也是爲了後續能夠容易進行引用。
你可能會問,那我用個思惟導圖一類的工具不是更好麼?電子化工具的好處是對信息的保存和分享方便,可是在團隊討論中,咱們更加劇視團隊討論的氛圍,聚焦和總體效率,若是使用電子化工具,就沒法讓每一個人均可以同時對這張圖進行操做,而必須由一我的操做,其餘人很容易走神,若是工具不熟練還會耽誤時間。因此看上白板是個很Low的工具,其實對於團隊討論來講,它的效率高於任何的電子化工具。
如上圖:這是我做爲敏捷教練參與的一次用戶故事討論,你能夠看到你們都彙集在白板周圍,整個討論都是站立進行,任何人均可以隨時發表意見,用手指着某個即時貼就能夠開始說:「這個」步驟怎樣怎樣。若是沒有可視化工具,或者使用電子化工具,但願每一個人均可以用「這個」來聚焦全部人的注意力是很困難的,你可能須要解釋「這個」究竟是什麼,又或者須要在電子工具中鼠標來點,若是操做者不是講解者,那會更加麻煩。細節決定效率!
有了故事主線,咱們就能夠進行下一步的功能細化。這一步所產出的其實就是傳統軟件開發過程當中的軟件規格說明書。軟件規格說明書對於開發人員實現產品功能很是重要,是軟件開發中不可缺乏的部分。不少人認爲敏捷開發不須要文檔,其實這是個巨大的誤解。可是敏捷開發中的文檔確實和傳統的需求文檔有不少區別:
規格化的過程當中咱們可使用用戶故事地圖的方式來進行,團隊一塊兒根據故事主線中的每一個步驟進行討論,分析出在產品的特定區域(模塊)中的功能點,並使用技術人員容易理解的方式來描述這部分的功能。這整個過程就是從將需求從用戶角度的描述轉換到技術實現角度描述的過程。在這個過程當中你會發現一些在故事主線中看不到的技術細節。
這個過程當中,咱們但願綜合考慮架構和測試的輸入,這兩個角色須要從本身的角度確保每一個故事的分解都知足架構的要求,而且是能夠進行測試的。因爲每一個用戶故事都會穿越多個功能區域,架構師必須協助團隊確保架構的擴展性,複用性以及性能等要求。對於測試來講,要確保每一個用戶故事都是可測試的才能確保後續的測試計劃和用例能夠配合團隊的開發過程,並按照故事逐個交付給用戶。
如上圖,將以上用戶登陸這個故事分解爲功能點,展現在用戶故事地圖上,這是標準的用戶故事地圖格式:
關於用戶故事地圖:【用戶故事地圖(User Story Mapping)之初體驗】
注:這篇文章對於地圖頂層的解釋稍有不一樣,這是我當時對用戶故事地圖的理解還不深刻形成的。
講故事的過程咱們通常經過需求討論會的形式來進行,確保以上應該參與的人員都到場。既然是個會議,咱們就必須確保會議的高效,這裏能夠參考三星高效會議的8點原則:
(1)凡是會議,必有主題;
(2)凡是主題,必有議程;
(3)凡是議程,必有決議;
(4)凡是決議,必有跟蹤;
(5)凡是追蹤,必有結果;
(6)凡是結果,必有責任;
(7)凡是責任,必有獎罰;
(8)凡是獎罰,必須透明。
針對需求討論會,咱們至少須要有如下安排
需求討論會的過程就是按照以上3個步驟討論故事和分析故事的過程,咱們能夠按照如下流程進行
以上是如何使用用戶故事來驅動產品規劃和設計的過程,後續我會對如何再借助kanban和Scrum來驅動開發和交付過程。
請關注微信公衆號 【devopshub】,獲取更多關於DevOps研發運維一體化的信息