問題
今天這個時代迭代開發(fā)已經(jīng)成為常識,甚至政治正確,隨便誰就能給你扯兩句mvp。敏捷也從一個開發(fā)的名詞變成了管理名詞,迭代、測試、反饋這類名詞滿天飛。
人人都在說這些術(shù)語,仿佛他們真的就懂怎么做軟件了。起碼,覺得自己真的懂怎么創(chuàng)新了。然而經(jīng)不起細(xì)聊,一旦深入下去聊一個mvp,聊聊他的迭代計(jì)劃。就會發(fā)現(xiàn)露餡了,張嘴閉嘴談的都是功能。這個迭代要交付幾個功能,這個mvp多了什么功能?他的競爭對手都有哪些功能?卻很少聽到用戶。人人都在喊,以用戶為中心。口號喊得震天響,但你看他們的行為模式,他們的語言中,并沒有用戶的身影,更像只是在否定別人、固執(zhí)己見的時候拿這個來當(dāng)借口。
我時常覺得這個事情不太對勁。但是也沒有想到更好的方法。敏捷中使用的故事卡比功能的視角要好一點(diǎn)。因?yàn)樵诠适驴ɡ?,你要寫下用戶的價值。但是,我一直也不知道這個價值是從哪兒來的。是先開槍后畫靶子我們想做某個功能了,所以硬安的一些價值,還是真的存在的?價值的單位應(yīng)該是什么呢?沒有單位的東西就無法管理。無法管理,也就無法優(yōu)化。我們交付的價值是越來越多嗎?還是交付的不如以前了?用什么來判斷?
回答不了這些問題,不管輸贏都是有點(diǎn)不明不白的。這些問題的核心問題就是價值的單位應(yīng)該是什么?怎么算一個價值?一直沒想清楚這些問題,直到我看了我們公司設(shè)計(jì)團(tuán)隊(duì)的一個框架MERLIN,又在《創(chuàng)新的窘境》作者的新書《與運(yùn)氣競爭》里看到了理論依據(jù),這個問題在我這里才算是告一段落。我明白了,以用戶為中心的軟件開發(fā)大概應(yīng)該怎么做。
方法核心
如果我們想以用戶為中心進(jìn)行軟件開發(fā)。那么我們的分析方法應(yīng)該是圍繞著用戶展開的。
這個方向倒是不新鮮,一直以來我們在inception的時候做用需求分析時我們的方法就是圍繞著用戶展開的,一個典型的分析過程,如下圖所示。

我們會在上面畫一條軸,標(biāo)示出用戶旅途。這是用戶在使用軟件的時候的,他的一個全過程。然后在對應(yīng)的時間點(diǎn)上,標(biāo)記出我們的功能。這樣我們的功能就不是平白出來的。每一個都聯(lián)系了用戶價值。相對于一般人會更容易理解功能,在ThoughtWorks,我們更多標(biāo)記的是用戶故事。比起功能,用戶故事增加了有關(guān)價值的線索,因?yàn)橛脩艄适率紫染褪且獙懗鰞r值。
一直以來我覺得這個圖還是不夠給力。首先,從用戶旅途上的點(diǎn),到功能的映射這一步,簡直是個magic move。對未來的讀者來說,并不能很好的傳遞為什么是這樣的一個功能,而不是別的功能?畢竟實(shí)現(xiàn)一個用戶的價值方法有很多。于是后續(xù)在執(zhí)行的過程當(dāng)中,難免會僵化行事。
其次,上面的旅途,還可以再抽象和封裝。簡言之,旅途本身也應(yīng)該是有抽象層次的。一個旅途上的一個點(diǎn),可能也是一段新的旅途。
所以現(xiàn)在我覺得,一個更系統(tǒng)的做法應(yīng)該是這樣的,首先做服務(wù)設(shè)計(jì):

系統(tǒng)化的分析用戶的行為,過程中與企業(yè)有哪些觸點(diǎn),在這些觸點(diǎn)上,借用《與運(yùn)氣競爭》里的思維框架來講,用戶“雇傭”企業(yè)的產(chǎn)品到底是來做什么的,也就是動機(jī)有哪些。
然后將這些點(diǎn)再進(jìn)一步細(xì)化,采用故事的模式:

圖上的一行會講一個故事,就像電影分鏡或者漫畫一樣,來表達(dá)用戶使用的故事,真正的故事,而不是用戶故事那種東西,我們叫這個東西故事板。
在故事板上,我們描繪了一個故事,這個故事里,用戶獲得了一種體驗(yàn)。一個故事對應(yīng)一個體驗(yàn)。在基本需求都已經(jīng)得到滿足的今天,體驗(yàn)是新的最有價值的事情,以體驗(yàn)為中心才是以用戶為中心。故事板恰好給了我們一個非常符合人類認(rèn)知習(xí)慣的方式來描述什么是一個體驗(yàn)。也就回答了開頭的問題,什么是價值的單位。

當(dāng)我們定義出了價值的單位,就可以從這一單位的價值里面映射出故事卡,來進(jìn)行開發(fā)過程的管理:

這里就是我們的重點(diǎn),我們將來交付的軟件、交付的服務(wù)、我們交付的一個MVP本質(zhì)上是交付給了用戶一組體驗(yàn)。MVP的迭代則應(yīng)該是更多的體驗(yàn)或某些舊體驗(yàn)的升級(也就是同一個動機(jī),換了一個不同的故事來滿足)。
最終我們把用戶的價值很好的表達(dá)了出來,并且找到了用戶體驗(yàn)的基本單位——故事板,由于故事板也可以轉(zhuǎn)化為用戶故事,結(jié)合早已經(jīng)存在的各種敏捷開發(fā)方法,也就可以對體驗(yàn)的交付進(jìn)行度量和管理,達(dá)到以用戶為中心進(jìn)行軟件開發(fā)。
尾聲
很早之前我就覺得MVP是TDD思想在產(chǎn)品策略上的延伸,TDD一個很重要的價值就是避免自嗨從而消除浪費(fèi)。程序員有時候會因?yàn)樽脏藢懗鰜砗枚嘤貌坏降墓δ芎驮O(shè)計(jì),這些都是浪費(fèi)。但是程序員能減少的浪費(fèi)很有限,最終的最終還是要從需求的源頭——用戶層面來減少浪費(fèi)才能真的做好。所謂顧客就是上帝,軟件開發(fā)中用戶就是上帝,這句話的意思不是說用戶說什么你就做什么,而是說你只有貼近用戶,才能得到上帝的啟示,現(xiàn)場有神明,就是這么個道理。
有了MVP之后,就像開發(fā)有了測試驅(qū)動。我們就可以避免很多過度設(shè)計(jì)。但是MVP作為測試,粒度太大了,不好分析,不好寫斷言,不能得到精細(xì)的反饋。這里我們把它分解到故事板層面,就可以得到精確的測試目標(biāo),也就可以做真正精細(xì)的測試,真正做到以用戶為中心。