你有刪除功能的勇氣嗎? 別人程式有所以我們也要有?(Task)
攤開再釐清,從任務(Task)抓出功能的脈絡,避免不必要的資源浪費!
上一篇我們主要是介紹每一個使用者故事 User story 的寫法,透過具體地描繪出使用者的初步輪廓,把模糊的需求轉換成規格。
傳送門 : 在寫程式之前,請先搞清楚這程式到底是要解決什麼問題
然而,User story 所切分出來的僅僅只是針對未來開發的【產品 output】去作描繪,若是從開發者的角度來闡述,這些故事的顆粒度還過於粗略,無法有效把功能轉換成 "任務Task"的角度來做轉換,例如消費者需要購物的功能。
但購物並非只是可以把商品加入購物車後,就可以完成消費的行為,這背後更需要許多如金物流的串接、地址的填寫,甚至連商品的搜索上,排序、關鍵字搜索、價格篩選等,都是在故事後面的細節,也就是所謂的功能與 Task。
延伸閱讀:使用者體驗與外觀(UI UX)是產品成功的關鍵?核心價值可能才是你該先思考的地方!
「光會說故事還不夠,要把故事的內容細節化、具體化,才是開發的重點」
而任務是什麼呢?我們又應該怎麼從 User story 來做切分、排序,而同一產品裡,更因為使用者的角色不同,而在功能上會有不同的劃分,小明是想要買網路美食的人、小美是要買日常用品的人,儘管同樣是消費者,但因為需求的不一樣。
所實際需要結合在開發上的功能和任務當然也不盡相同,也許美食要考慮到常溫、冷藏等方式配送,也會有保存期限的問題,而日常用品的部分,可能會有部分像是衛生紙、大型家電等配送上尺寸的限制。
如何把這些所有的故事攤平,結合,進而進行對照,把開發的風險與重複浪費的資源降到最低呢?
在主流的專案開發管理上,大多數開發者會使用【使用者故事地圖 User story map】的方式,把故事用時間軸攤開,進行撰寫和對照,但是這樣講似乎還是太模糊了一些,不如就舉一個生活上的實例來讓大家了解怎麼把故事地圖化吧!
「把故事透過時間軸,展開成地圖的方式,進行對照」
相信每天早上起床上班,都是上班族每天必經的難題之一,而今天筆者就透過一個早晨地圖【Morning map】來進行討論,試想一下今天早上起床直到進了辦公室前,你做共做了多少事情吧!越細越好唷,並且依據時間把她列出。
筆者的地圖如下:
睜開眼睛 --> 起床 --> 刷牙 --> 洗臉 --> 刮鬍子 --> 換衣服 --> 拿錢包鑰匙 --> 整理包包 --> 出門 --> 走路去捷運站 --> 刷卡進站 --> 上車 --> 划手機 --> 下車 --> 出捷運站 --> 走到附近的早餐店 --> 買好早餐 --> 進公司
試著用你的地圖來做其他的發想吧!筆者的地圖聽起來感覺就像是一個平常的上班族會做的事情對吧!但假如我今天多加入了幾個角色進去呢?例如副業是擔任網紅的小美,以及老煙槍小華呢?再試著攤開一次吧!
小美:我是網美我驕傲,直播不離手
睜開眼睛 --> 起床 --> 刷牙 --> 洗臉 --> 帶隱眼 --> 化妝 --> 換衣服 --> 整理頭髮 --> 拿錢包鑰匙 --> 整理包包 --> 開直播 --> 出門 --> 走到附近的早餐店 --> 買好早餐 --> 開直播 --> 叫Uber --> 上車 --> 划手機 --> 開直播 --> 下車 --> 進公司
小華:抽菸是生活的必需品
睜開眼睛 --> 起床 --> 刷牙 --> 洗臉 --> 抽菸 --> 換衣服 --> 拿錢包鑰匙 --> 整理包包 --> 出門 --> 抽菸 --> 走到機車旁邊 --> 上車 --> 抽菸--> 騎車 --> 下車 --> 抽菸 --> 走到超商 --> 買菸 --> 抽菸--> 進公司
「化簡為繁的目的:攤開再釐清,才有辦法從【任務 Task】抓出【功能】的脈絡。」
在目前蒐集的三個故事裡,其實所有細微的項目,我們都可以把它定義為【任務 Task】,代表你在睡醒到上班前的這個時間軸裡,一定要完成的事情,這時候再把任務分門別類,就可以知道在完成每一個任務裡,我們需要的功能,以及他的主從順序:
1.睜開眼睛~換衣服:起床
2.換衣服~出門:出門準備
3.出門~到公司:通勤
「如果Task順序可有可無,可前可後,就代表他其實沒有你想的這麼重要」
把故事攤開之後就會一目了然 ,在三種故事線裡,最重要的第一件事情是順序,每一個順序的前後都隱藏著是否必要的必然性。
例如你一定是會先換衣服才會出門吧,一定是先出門才會走到捷運站吧,把順序擬定,才可以了解我們執行每一個任務的必需性。另外像是買早餐這樣的任務,可以先買在出門,或是進公司前在買,"可前可後"的同時,就代表著他"可有可無"。
使用者故事地圖對照的好處,就是為了把任務攤開,才會避免把刀口上的資源,浪費在不必要的項目上,而像是開直播、抽菸等等,對於功能來說,其實都是非必要的任務,那這些任務自然而然的,就不該是開發的主要重點。
開再多的直播,都不能讓你從家裡飛到公司吧!抽再多的煙,起床總還是要把眼睛睜開吧不是嗎?
「安插一個特例,來思考每一個任務與功能的必要性」
在產品有限的交付期程中,每一個開發任務的重要性應該要怎麼取捨呢?其實是可以透過假設來驗證的。
舉一個早上常見的例子當假設,如果有天當你醒來時發現睡過頭,但今天又有一個重要的會議不能請假的時候,你的故事會怎麼走呢?
睜開眼睛 --> 起床 --> 刷牙 --> 洗臉 --> 換衣服 --> 出門 --> 叫Uber--> 上車 --> 下車 --> 進公司
我相信這一定是多數人的最快唯一解法,而在我們做刪去法去討論的同時,那些不是很重要的不如就大力刪掉吧,只有把這些非必要性的任務及功能去做釐清,我們才可以去了解,究竟哪些東西,在開發上對我們的產品才是必要的,而那些刪去的,自然就可以安插到以後再做,這樣不僅可以把所有期程內需要開發的功能去做一個排序和劃分之外,更可以把故事變的具體,進而成為未來驗收的條件之一。
「記得,層層攤開與堆積的目的,都是為了收斂產品的規模,把餅畫小」
透過這樣的生活實例,我們了解到化繁為簡,需要的不只是功力,更需要集聚團隊的邏輯,以及把它刪去的勇氣。
【早晨故事地圖 Morning map】,就是使用者故事對照的方式之一, 透過使用者故事對照的方式,把一堆我們描繪出來的使用者故事,用階層結合時間軸的方式,加以攤開後,不僅可以把任務與功能的的主從關係變得更為明確,還可以透過這樣的訓練把功能的定位清晰化。進而去比對客戶需求的整體,讓產品在開發與討論的過程中,不至於被模糊了焦點。
透過這樣的思維來做全盤性的評估,並且把主要的任務與功能挑出、 排序,更可以清楚了解整個開發的 roadmap ,這樣的對照方式不僅是一種加速釐清開發權重的方法,更可以透過日常的例行訓練,讓團隊思維,越來越接近敏捷式開發(Agile)的思考核心,而團隊也會有更多的空間和彈性,來應付其他開發上的種種風險與挑戰。
下一篇:[Agile and scrum] 如何準確拿捏開發 Scope (範圍)?你做好 Refinement Meeting (精煉會議)了嗎?
最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!