??目錄
1 這些話你熟悉嗎
2 找準(zhǔn)戰(zhàn)場(chǎng)——業(yè)務(wù)建模
3 制定方略——需求
4 小結(jié)
5 尾巴
去年寫(xiě)的《業(yè)務(wù)系統(tǒng)是怎么逐步變成“萬(wàn)人嫌”的》只是回顧了系統(tǒng)是怎么一步步變壞,然而最難的部分怎么防止變壞卻沒(méi)有寫(xiě)出來(lái),因?yàn)檫@涉及到流程規(guī)范、團(tuán)隊(duì)文化、組織管理等方方面面,我的認(rèn)識(shí)有限確實(shí)無(wú)法全面總結(jié),不過(guò)我可以站在一名普通研發(fā)的角度,選取“做有價(jià)值的需求”這一個(gè)點(diǎn)來(lái)繼續(xù)聊聊。
《Google 軟件工程》中有一句話:“代碼是負(fù)債,而不是資產(chǎn)”。這里實(shí)際上有一個(gè)限定,在軟件工程領(lǐng)域,代碼的構(gòu)建是要花費(fèi)時(shí)間和人力成本的,代碼本身沒(méi)有價(jià)值,真正有價(jià)值的是代碼所要解決的產(chǎn)品問(wèn)題,這才是給用戶和公司帶來(lái)價(jià)值的東西。同樣,讀過(guò) UMLChina《軟件方法》的同學(xué)應(yīng)該還記得里面有一個(gè)公式:利潤(rùn)=需求-設(shè)計(jì),需求致力于解決提升銷(xiāo)售的問(wèn)題,設(shè)計(jì)致力于解決降低成本的問(wèn)題,而我們的目標(biāo)就是用更少的代碼(成本)完成更多的需求(價(jià)值),提高組織的收益。
減少負(fù)債的手段很多,今天我們也并不是來(lái)討論編碼的藝術(shù),我們的時(shí)間、精力有限,每天產(chǎn)出代碼也是有限的,那如何讓我們的代碼所解決的產(chǎn)品問(wèn)題最大化就顯得至關(guān)重要,用我們的武功去最大化獲得戰(zhàn)功。假如需求是錯(cuò)的,那么哪怕為這個(gè)需求寫(xiě)一行代碼都是浪費(fèi)!
讀到這里相信你也明白了,其實(shí)講“做有價(jià)值的需求”就是講如何做好四大工作流中業(yè)務(wù)建模和需求。以下內(nèi)容是 UMLChina 相關(guān)課程結(jié)合刷臉就餐案例撰寫(xiě),如有錯(cuò)誤歡迎指正。
這些口頭禪我們經(jīng)常聽(tīng)到并習(xí)以為常,可是仔細(xì)想想是這樣嗎?
“你這需求怎么又變了”:需求是解決實(shí)際問(wèn)題的,但是仔細(xì)一想發(fā)現(xiàn)解決的問(wèn)題還在那里從未變過(guò),需求是藥,要解決的實(shí)際問(wèn)題是病,病情沒(méi)有變化卻要換藥,只能說(shuō)之前的藥開(kāi)錯(cuò)了。
“我們?nèi)肆τ邢蓿蛔鲎罡邇?yōu)先級(jí)的需求”:哪些需求優(yōu)先級(jí)最高呢,依據(jù)是什么?聽(tīng)用戶的、產(chǎn)品的、還是領(lǐng)導(dǎo)的,如果他們意見(jiàn)相左聽(tīng)誰(shuí)的?
“你這需求不合理”:為什么不合理,因?yàn)槲摇案杏X(jué)”這樣不合理嗎?開(kāi)的藥合不合理是有醫(yī)理可依的,肯定不是靠我覺(jué)得不行或者看藥的顏色好不好看來(lái)決定。
“你這過(guò)度設(shè)計(jì)了”:首先說(shuō)明過(guò)度設(shè)計(jì)是指需求是正確的,但是系統(tǒng)內(nèi)部實(shí)現(xiàn)得過(guò)于精妙了,大多數(shù)時(shí)候我們所說(shuō)的過(guò)度設(shè)計(jì)指的是需求蔓延,即花了很多精力去做了很多用不上的功能。你說(shuō)過(guò)度設(shè)計(jì)了,那憑什么說(shuō)這些功能用不上呢?
這樣的話我們平時(shí)可以聽(tīng)到很多,乍一聽(tīng)覺(jué)得非常有道理,可以仔細(xì)一琢磨發(fā)現(xiàn)根本經(jīng)不起推敲,都是靠假設(shè)、靠感覺(jué)。接下來(lái)我們一起來(lái)看病開(kāi)藥,用一個(gè)實(shí)際案例來(lái)看下治病的藥方到底是怎么根據(jù)醫(yī)理一步步推導(dǎo)出來(lái)的。
找準(zhǔn)戰(zhàn)場(chǎng)——業(yè)務(wù)建模
某一天你參加完孩子的家長(zhǎng)會(huì),結(jié)束后到學(xué)校餐廳親身感受下孩子在學(xué)校吃得怎么樣,由于是就餐高峰期,餐廳窗口排了長(zhǎng)長(zhǎng)的隊(duì)伍,隊(duì)伍緩慢移動(dòng),你無(wú)聊地盯著窗口處阿姨打菜、輸入菜品、學(xué)生刷卡,發(fā)現(xiàn)這個(gè)過(guò)程大多數(shù)學(xué)生并不會(huì)提前準(zhǔn)備好卡,而是刷卡時(shí)才會(huì)現(xiàn)場(chǎng)從口袋、書(shū)包找卡,甚至?xí)驗(yàn)橥泿Эɑ蛘咚⒖〞r(shí)發(fā)現(xiàn)余額不足又到處找同學(xué)借,讓隊(duì)伍前進(jìn)更加緩慢。
忽然你靈機(jī)一動(dòng):現(xiàn)在新興的刷臉支付又快又安全,自己何不將刷臉技術(shù)引入校園,提升就餐效率,天賜商機(jī),說(shuō)干就干。
凜冬創(chuàng)業(yè),再也不是“站在風(fēng)口上豬都會(huì)飛”,花的都是自己實(shí)打?qū)嵉腻X(qián),那就一定要先想清楚愿景:目標(biāo)組織代表(老大)在引進(jìn)系統(tǒng)之后最希望帶來(lái)的改進(jìn)是什么。這是開(kāi)發(fā)系統(tǒng)的出發(fā)點(diǎn),下面對(duì)愿景的每個(gè)詞進(jìn)行解釋:
2.1.1 誰(shuí)來(lái)買(mǎi)——目標(biāo)組織和老大
目標(biāo)組織:系統(tǒng)擅長(zhǎng)改進(jìn)指標(biāo)和組織當(dāng)前最需要改進(jìn)指標(biāo)匹配程度最高的組織。這里的組織它可以是一個(gè)具體的機(jī)構(gòu)、也可以一類人群,特別需要注意這個(gè)“最”字,系統(tǒng)可以改進(jìn)的指標(biāo)很多,不同組織需要改進(jìn)的指標(biāo)也各不相同,匹配程度最高的才是目標(biāo)組織。舉個(gè)常見(jiàn)的例子:微信文件助手(假設(shè)是一個(gè)系統(tǒng))可以提升不同終端之間的文件傳輸效率,但是有的人用來(lái)傳輸文件、有的人用來(lái)發(fā)消息當(dāng)備忘錄,按照上面的原則,微信文件助手的目標(biāo)組織是有頻繁在不同終端之間傳輸文件的這類人,而不是用來(lái)當(dāng)備忘錄的這類人。
老大:系統(tǒng)的目標(biāo)組織中擔(dān)任負(fù)責(zé)人的人腦系統(tǒng)實(shí)例,是一個(gè)具體的個(gè)人,系統(tǒng)最優(yōu)先照顧其利益的那個(gè)人,如果做的系統(tǒng)他不滿意那其它人滿意也沒(méi)用。
|
|
|
|
|
|
|
|
|
針對(duì)中產(chǎn)單身青年的XXX交友系統(tǒng),老大為想脫單的某29歲的上市公司員工張三
|
|
針對(duì)某特定機(jī)構(gòu)的定制系統(tǒng)
|
|
|
XXX學(xué)校教務(wù)系統(tǒng),老大為XXX學(xué)校教務(wù)處處長(zhǎng)李處長(zhǎng)
|
|
針對(duì)某類機(jī)構(gòu)的非定制系統(tǒng)
|
|
定位機(jī)構(gòu)范圍->定位目標(biāo)機(jī)構(gòu)->定位老大
|
針對(duì)實(shí)行學(xué)分制大學(xué)的教務(wù)系統(tǒng),老大為已經(jīng)實(shí)行學(xué)分制多年的XXX大學(xué)教務(wù)處處長(zhǎng)李處長(zhǎng)
|
-
針對(duì)特定人群的非定制系統(tǒng):改進(jìn)的是“某個(gè)人群”,例如微信、企業(yè)微信、QQ 雖然都是聊天軟件,但是針對(duì)的人群并不相同,因?yàn)椴煌说南埠酶鳟悾豢?APP 不可能全部滿足。即使國(guó)家反詐 APP 全民推薦,但是我相信在開(kāi)發(fā)這款軟件前,也是調(diào)研分析全國(guó)詐騙案例,得到被詐騙最多的群體,例如子女不在身邊的老人群體作為目標(biāo)組織。
-
針對(duì)某特定機(jī)構(gòu)的定制系統(tǒng):這個(gè)就不多做解釋了,例如一般大公司都會(huì)結(jié)合公司特點(diǎn)定制自己的 OA 系統(tǒng)。
-
針對(duì)某類機(jī)構(gòu)的非定制系統(tǒng):如果你仔細(xì)觀察的話,可以發(fā)現(xiàn)很多餐廳掃碼點(diǎn)餐用的都是同一個(gè)系統(tǒng)。
定位目標(biāo)組織并不是一步到位,相反還很艱難,需要多次調(diào)整、逐步逼近,需要先定一個(gè)范圍再來(lái)定位到具體組織。上文已經(jīng)提到?jīng)]有一個(gè)系統(tǒng)可以滿足所有用戶的需求,同樣刷臉就餐系統(tǒng)不可能滿足所有的餐廳,例如某幼兒園餐廳是包月制,就餐時(shí)直接配送到固定餐位,那就根本用不到收銀系統(tǒng);例如某公司餐廳提前小程序付款預(yù)約,那就沒(méi)有用餐高峰期排隊(duì)付款問(wèn)題。
經(jīng)過(guò)初步的思考,刷臉就餐系統(tǒng)是針對(duì)某類機(jī)構(gòu)的非定制系統(tǒng),確定自己創(chuàng)業(yè)項(xiàng)目當(dāng)下是服務(wù)于校園餐廳,但是校園餐廳也有很多種分類,具體服務(wù)于哪類校園餐廳(定位機(jī)構(gòu)范圍)、選擇研究的目標(biāo)機(jī)構(gòu)是哪所學(xué)校、老大是誰(shuí)?
我們可以結(jié)合類圖通過(guò)不斷的追問(wèn)“誰(shuí)比誰(shuí)更像,為什么”得到,我們畫(huà)出學(xué)校餐廳的類圖如下,然后針對(duì)每個(gè)屬性以及所關(guān)聯(lián)類的屬性值展開(kāi)比較,找出最像的屬性值集合。
現(xiàn)在開(kāi)始不斷針對(duì)類圖上的屬性開(kāi)始追問(wèn),例如:
問(wèn)“學(xué)校等級(jí)是什么“,答”初等/中等教育”,問(wèn)“為什么”,答“學(xué)前教育大多數(shù)學(xué)校飯菜配送到座位,那根本就不用收銀系統(tǒng),而高等教育的學(xué)生都有手機(jī),基本都可以方便的使用手機(jī)掃碼支付,效率比使用飯卡也快很多,而初等、中等學(xué)校學(xué)生沒(méi)有手機(jī),基本上都是用飯卡支付";
問(wèn)“學(xué)校所在城市是什么類別”,答“中等城市”,問(wèn)“為什么”,答“一線城市學(xué)校大多數(shù)已經(jīng)引進(jìn)了已經(jīng)較為先進(jìn)就餐系統(tǒng),建制鎮(zhèn)學(xué)校目前一般規(guī)模不大,就餐隊(duì)伍擁堵不嚴(yán)重,通過(guò)調(diào)研發(fā)現(xiàn)中小城市的學(xué)校改進(jìn)意愿最高。”
通過(guò)不斷追問(wèn),我們得到刷臉就餐系統(tǒng)改善是“位于中小等城市的、初等/中等教育的、寄宿學(xué)校的刷卡支付餐廳”這類機(jī)構(gòu),然后繼續(xù)追問(wèn),慢慢縮小范圍,最終定位到一個(gè)具體的餐廳,例如“A 市第一小學(xué)餐廳”。
定位到的目標(biāo)組織一定是具體的、(能力所及)最像的,絕不是“需要引入刷臉就餐系統(tǒng)的餐廳”這樣正確而無(wú)用的廢話,也絕不能偷懶隨便找身邊的一個(gè)組織去研究。你也許會(huì)問(wèn),戰(zhàn)場(chǎng)搞那么清楚干啥,我全都要不行嗎,答案是不行。因?yàn)槟悴豢赡苜Y源充足到可以隨便揮霍,即使李云龍喊“沒(méi)有助攻,全他娘的主攻,現(xiàn)在我們的兵力是八比一,這種富裕仗我八輩子也沒(méi)打過(guò),這會(huì)咱們敞開(kāi)了當(dāng)回地主“,也是把戰(zhàn)場(chǎng)聚焦到了平安縣城,而且八輩子才遇到這么一次。
這時(shí)候一定要專注于目標(biāo)組織,不要有“只關(guān)注目標(biāo)組織 A 市第一小學(xué)餐廳的需求,那其他學(xué)校餐廳的需求是不是就漏掉了“這種擔(dān)心,目標(biāo)組織都沒(méi)服務(wù)好去想其它組織干什么,需求是做不完的,只要愿意可以找到無(wú)窮無(wú)盡的需求。
老大滿足如下三個(gè)條件:1)是一個(gè)具體的人;2)目標(biāo)組織的實(shí)際負(fù)責(zé)人;3)有責(zé)任和權(quán)利決定目標(biāo)組織的改進(jìn)方向。這里非常容易犯錯(cuò),比如很可能定位出“A 市第一小學(xué)王校長(zhǎng)”、“餐飲系統(tǒng)開(kāi)發(fā)團(tuán)隊(duì)的張總”、“A 市第一小學(xué)餐廳管理人員”,我們來(lái)分析下為什么不對(duì)。
說(shuō)“A 市第一小學(xué)王校長(zhǎng)”理由是校長(zhǎng)權(quán)力最大:一旦這樣的話那我們就不用思考了,切記“不要把遙遠(yuǎn)的大領(lǐng)導(dǎo)當(dāng)做老大”,校長(zhǎng)確實(shí)是學(xué)校最高負(fù)責(zé)人,但是他更可能是提綱挈領(lǐng)地提要求,并不關(guān)心具體某一項(xiàng)該如何落實(shí)。
說(shuō)“餐飲系統(tǒng)開(kāi)發(fā)團(tuán)隊(duì)的張總”理由是他是我的老大:對(duì),他是你的老大,不是系統(tǒng)的老大,我們可以使用“爆炸法”驗(yàn)證,假如你身上綁了炸彈命令你在幾分鐘內(nèi)把刷臉就餐系統(tǒng)賣(mài)出去,而且只能找一個(gè)人來(lái)推銷(xiāo),而他購(gòu)買(mǎi)的原因必須是你的系統(tǒng)打動(dòng)了他,而不是因?yàn)橛H情友情等原因買(mǎi)你的系統(tǒng),你應(yīng)該找誰(shuí)(即老大),說(shuō)什么話(即愿景)。這么思考一下子就明朗了,你肯定不會(huì)找自己的領(lǐng)導(dǎo)張總推銷(xiāo)系統(tǒng),那張總是誰(shuí),很可能是給你綁炸彈的人。
說(shuō)“A 市第一小學(xué)餐廳管理人員”的理由是他是餐廳管理人員,就是管理餐廳的:這里犯了兩個(gè)錯(cuò),一是管理人員不是一個(gè)具體的人,二是學(xué)校餐廳可能壓根就沒(méi)有管理人員,“切不可臆想出來(lái)一個(gè)負(fù)責(zé)人來(lái)當(dāng)老大”,因?yàn)楹芸赡茉搶W(xué)校的餐廳歸后勤管理處管理,那老大就是是“A 市第一小學(xué)餐廳后勤管理處李處長(zhǎng)”。
2.1.2 憑啥買(mǎi)——提煉改進(jìn)目標(biāo)
改進(jìn)的認(rèn)知來(lái)自于比較(競(jìng)爭(zhēng)),老大覺(jué)得這個(gè)系統(tǒng)好、那個(gè)系統(tǒng)不好是通過(guò)對(duì)比得到,因此我們一定要有競(jìng)爭(zhēng)的意識(shí)。例如不用刷臉就餐系統(tǒng)會(huì)怎么樣:學(xué)生吃飯需要花費(fèi)更多的時(shí)間,影響學(xué)生午休;學(xué)生容易丟飯卡、忘記充值導(dǎo)致吃不了飯影響學(xué)生健康等等。
改進(jìn)目標(biāo)是“系統(tǒng)改善組織行為的指標(biāo)(例如提升就餐效率)”,不是“系統(tǒng)能做某事(例如某人喜歡看刷臉支付成功的動(dòng)畫(huà),就專門(mén)買(mǎi)一個(gè)刷臉設(shè)備來(lái)刷臉看動(dòng)畫(huà)解壓)”,也不是“系統(tǒng)行為的指標(biāo)(XXX接口耗時(shí)2秒內(nèi))”,要得到這個(gè)指標(biāo)并不容易,因?yàn)槿诵膹?fù)雜。舉個(gè)例子:最近《慶余年》第二季很火,里面考生發(fā)現(xiàn)郭尚書(shū)主導(dǎo)的考場(chǎng)翻新的工程是有問(wèn)題的,拆下來(lái)的舊石板和木材,竟然比新?lián)Q上去的更好,這里有改進(jìn)嗎?
有!系統(tǒng)的改進(jìn)是是無(wú)關(guān)法律、道德的,而是純粹的從老大的角度來(lái)看,老大覺(jué)得改進(jìn)才是改進(jìn)。從考生角度來(lái)看沒(méi)有改進(jìn),還變差了,從郭尚書(shū)角度來(lái)看就是天大的改進(jìn),改進(jìn)指標(biāo)為:禮部庫(kù)房新增資產(chǎn)30%。但是這個(gè)改進(jìn)指標(biāo)郭尚書(shū)肯定不會(huì)自己說(shuō),需要做事的人仔細(xì)揣摩,從那些“假、大、空”的話中揣摩出老大真正想要的。
這里如果問(wèn)“A 市第一小學(xué)餐廳后勤管理處李處長(zhǎng)”的目標(biāo)是什么,那他很可能說(shuō)“解決就餐效率低”這樣正確而無(wú)用的話,那我們?cè)趺吹玫较胍哪兀梢酝ㄟ^(guò)魚(yú)骨圖(因?yàn)闆](méi)有支持魚(yú)骨圖的軟件,下圖畫(huà)的不嚴(yán)謹(jǐn))來(lái)分析,不斷的問(wèn)為什么,得到答案后來(lái)判斷這個(gè)問(wèn)題是我們系統(tǒng)能解決的,不能解決就繼續(xù)問(wèn)為什么。
改進(jìn)的目標(biāo)一定是系統(tǒng)帶來(lái)的,提升就餐效率這個(gè)目標(biāo)太大了,實(shí)際上刷臉就餐帶來(lái)的改進(jìn)更準(zhǔn)確的說(shuō)是“提升就餐支付效率”。當(dāng)然這還不夠,上面已經(jīng)提到改進(jìn)的的認(rèn)知來(lái)自于比較,既然有比較就要有度量指標(biāo),不能是我感覺(jué)、我覺(jué)得。比如“提升就餐支付效率”,那么提升了多少,怎么度量?這些老大不會(huì)告訴我們,我們也要警惕快、好等模糊的形容詞,而是給出實(shí)實(shí)在在的指標(biāo),這個(gè)指標(biāo)可以通過(guò)幾種常見(jiàn)的方法揣摩,比如:
-
比較法:更快,為什么更快,因?yàn)樵瓉?lái)需要5分鐘,現(xiàn)在3分鐘了(指標(biāo));
-
具體化:排隊(duì)時(shí)間長(zhǎng),具體多長(zhǎng),居然等了1個(gè)小時(shí)(指標(biāo));
-
倒推法:如果沒(méi)有這個(gè)系統(tǒng),達(dá)到相同的效果老大要付出什么代價(jià),比如要花費(fèi)100萬(wàn)元(指標(biāo))建設(shè)一個(gè)新的食堂增加窗口。
所以我們需要將“提升就餐支付效率”度量出來(lái),得到改進(jìn)指標(biāo)為“平均每人就餐支付時(shí)間從5分鐘縮短至3分鐘”。
提煉改進(jìn)目標(biāo)結(jié)束了嗎?沒(méi)有,大多數(shù)項(xiàng)目的愿景并不是一個(gè)改進(jìn)指標(biāo),還可能有多個(gè)。“我們的領(lǐng)導(dǎo)要求我們又快又好的完成開(kāi)發(fā)任務(wù)”可是“快”了很可能就影響“好”,怎么辦呢?要對(duì)目標(biāo)排序,找出老大最關(guān)心的目標(biāo)。如果所做的系統(tǒng)是國(guó)民應(yīng)用,出一點(diǎn)問(wèn)題都會(huì)給人民帶來(lái)極大的不便,那很明顯“好”排在“快”前面。
至此我們可以得到刷臉就餐系統(tǒng)的愿景如下:
目標(biāo)組織:A市第一小學(xué)餐廳
老大:A市第一小學(xué)餐廳后勤管理處李處長(zhǎng)
目標(biāo)(度量指標(biāo)):平均每人就餐支付時(shí)間從5分鐘縮短至3分鐘
當(dāng)然會(huì),否則企業(yè)豈不是止步不前,當(dāng)攻克可一個(gè)戰(zhàn)場(chǎng)就會(huì)選擇下一個(gè)戰(zhàn)場(chǎng),比如經(jīng)過(guò)幾年努力,幾乎所有的學(xué)校都用了你的刷臉就餐系統(tǒng),那下一步很可能進(jìn)軍企業(yè)餐廳戰(zhàn)場(chǎng),這時(shí)候老大、目標(biāo)組織、愿景全都變了。上面所有的結(jié)論都是在某一個(gè)時(shí)間點(diǎn)找到的最值得的改進(jìn)。即使還在原來(lái)的戰(zhàn)場(chǎng),改進(jìn)后現(xiàn)狀就變了,下一步自然也是基于新的現(xiàn)狀尋找最值得的改進(jìn)點(diǎn),最起碼改進(jìn)指標(biāo)會(huì)發(fā)生變化。
2.2 戰(zhàn)場(chǎng)分析——業(yè)務(wù)用例
有了愿景也就知道老大對(duì)他所在組織現(xiàn)狀的某些指標(biāo)不滿,接下來(lái)我們就要研究目標(biāo)組織,搞清楚到底是組織的哪些環(huán)節(jié)造成了這些指標(biāo)較差。業(yè)務(wù)建模的目的就是為了得到待引進(jìn)軟件系統(tǒng)的需求。
系統(tǒng)是組織的一個(gè)個(gè)零件,為了讓組織更好的對(duì)外提供價(jià)值,需要對(duì)里面的系統(tǒng)不斷升級(jí),然而怎么升級(jí)?升級(jí)什么?一步到位還是逐步升級(jí)?這要一步步推導(dǎo)。開(kāi)發(fā)團(tuán)隊(duì)經(jīng)常發(fā)現(xiàn)需求容易變化,根源之一就是需求的來(lái)路不正,沒(méi)有把系統(tǒng)當(dāng)成零件放在組織中看,導(dǎo)致系統(tǒng)需求是錯(cuò)的。需求上線后發(fā)現(xiàn)和組織的其他零件格格不入,真正的需求從來(lái)沒(méi)變,只不過(guò)一開(kāi)始需求就是假的,那么實(shí)現(xiàn)該需求的代碼也就全部都是“垃圾”了。
研究目標(biāo)組織可以從內(nèi)外兩個(gè)視角來(lái)研究組織,首先從外部看,組織是價(jià)值的集合。即一個(gè)組織為另一個(gè)組織提供一些價(jià)值。
業(yè)務(wù)執(zhí)行者:為誰(shuí)提供價(jià)值。雖然這個(gè)名字看起來(lái)是一個(gè)人,但實(shí)際上業(yè)務(wù)執(zhí)行者是一個(gè)組織(一群人或者一個(gè)機(jī)構(gòu))。當(dāng)我們以一個(gè)觀察者的身份去分析組織時(shí)很容易看不到全貌,我們觀察到的是:小明去學(xué)校餐廳找食堂阿姨買(mǎi)飯,阿姨給小明提供服務(wù)(價(jià)值),但無(wú)論是小明還是食堂阿姨都是(人腦)系統(tǒng),并不是業(yè)務(wù)執(zhí)行者和目標(biāo)組織,我們需要站在廬山之外看廬山。小明的背后是該學(xué)校的學(xué)生群體,而阿姨背后是學(xué)校食堂。
用例是期望和承諾的平衡點(diǎn)。比如你觀察學(xué)生除了吃飯還會(huì)在非營(yíng)業(yè)時(shí)間去食堂學(xué)習(xí),然而“提供學(xué)習(xí)場(chǎng)所”并不是一個(gè)用例,因?yàn)檫@不是餐廳所承諾的,而只是學(xué)生單方便的一廂情愿。所以一定要注意權(quán)衡目標(biāo)組織的承諾和學(xué)生的期望。下面是就餐的業(yè)務(wù)用例:
如何確定就餐這個(gè)用例找的是對(duì)的呢,除了檢查上面提到的這些點(diǎn),還有就是思考業(yè)務(wù)用例是否代表組織的本質(zhì)價(jià)值。這個(gè)價(jià)值很難變化,并且和你是否做這個(gè)系統(tǒng)沒(méi)有什么關(guān)系,從古至今餐廳(餐館)就是吃飯的地方,銀行(錢(qián)莊)是存取錢(qián)的地方,他們的本質(zhì)價(jià)值沒(méi)有變化,變得是業(yè)務(wù)流程,也就是通過(guò)不斷替換組織內(nèi)部的零件(人腦系統(tǒng)和信息系統(tǒng))持續(xù)改進(jìn),讓業(yè)務(wù)流程更高效。
特別注意,我經(jīng)常見(jiàn)到“害怕忘記、自找麻煩”的案例,比如:觀察A市第一小學(xué)餐廳后勤管理處李處長(zhǎng)定時(shí)查看收銀系統(tǒng)賬單,就覺(jué)得有這么一個(gè)業(yè)務(wù)用例,但是發(fā)現(xiàn)找不到業(yè)務(wù)執(zhí)行者,因?yàn)檫@里犯了一個(gè)錯(cuò)誤,找用例一定是站在組織的角度觀察,李處長(zhǎng)(業(yè)務(wù)工人)和收銀系統(tǒng)都是組織的零件,是組織內(nèi)部自己的交互,怎么能說(shuō)是系統(tǒng)用例呢?也可能會(huì)反駁到,現(xiàn)在不寫(xiě)出來(lái)后面忘記了怎么辦,難道收銀系統(tǒng)不用做賬單功能嗎?不要害怕,因?yàn)橹灰凑占榷鞒淌强梢酝茖?dǎo)出來(lái)的,例如我們觀察到財(cái)務(wù)處要求定時(shí)審核餐廳的收支,這是因?yàn)閮蓚€(gè)組織目前無(wú)法通過(guò)智能系統(tǒng)直接交互才需要人來(lái)查看抄錄,你直接從一個(gè)壞的現(xiàn)狀映射出一個(gè)業(yè)務(wù)用例那肯定是不對(duì)的,一定要分清楚問(wèn)題和問(wèn)題的解決方案。
作為一個(gè)程序員,我們接觸最多的就是系統(tǒng),什么目標(biāo)組織、老大、業(yè)務(wù)執(zhí)行者我們大多數(shù)情況接觸不到,談上面的內(nèi)容似乎很“虛”,迫不及待的想研究系統(tǒng),很遺憾這里的從內(nèi)向外看還是研究組織,只是終于出現(xiàn)即將要開(kāi)發(fā)的系統(tǒng)了。
系統(tǒng)就是組織的一個(gè)零件,組織通過(guò)更換或者添加零件(我們的系統(tǒng))優(yōu)化業(yè)務(wù)流程,那必然要先描述出真實(shí)的現(xiàn)狀,接下來(lái)在此基礎(chǔ)上改進(jìn)才能得到最符合現(xiàn)狀的改進(jìn)方案,在憑空想象的現(xiàn)狀上改進(jìn)那必然是假需求,因此這里最重要的就是“如實(shí)、如實(shí)、還是如實(shí)”,現(xiàn)實(shí)的各種客觀或主觀原因都在給我們“如實(shí)”描述制造阻礙:
最常見(jiàn)到的就是太自負(fù),覺(jué)的自己系統(tǒng)是前所未有的創(chuàng)新,就拿刷臉就餐來(lái)說(shuō)吧,是新東西嗎,不是的,而且古代的刷臉就餐比現(xiàn)在體驗(yàn)還好,想一下這個(gè)場(chǎng)景“小二記賬”,“好嘞,西門(mén)大官人您慢走”,這可不就是刷臉就餐嗎?
還容易犯的錯(cuò)誤是太主觀,以為有規(guī)范了大家都會(huì)按照規(guī)范來(lái)實(shí)踐,比如學(xué)校餐廳是按照固定價(jià)格套餐售賣(mài),可是有的學(xué)生想多加一個(gè)雞蛋、有的學(xué)生不吃雞腿要求去掉,這都會(huì)導(dǎo)致價(jià)格不再固定;再比如覺(jué)得現(xiàn)狀是純手工,以為計(jì)算總價(jià)是阿姨在系統(tǒng)點(diǎn)選菜品后然后計(jì)算,實(shí)際上每個(gè)菜盤(pán)都有NFC標(biāo)簽,放在收銀臺(tái)已經(jīng)自己識(shí)別計(jì)算價(jià)格了。
當(dāng)然更多的情況是不經(jīng)意間的騙自己,或因?yàn)閰R報(bào)、或因?yàn)樾麄饕蠼?jīng)常整理材料,對(duì)比自己公司參與前后提效多少,但是注意現(xiàn)狀是當(dāng)前這個(gè)時(shí)間點(diǎn)的現(xiàn)狀,不是自己公司參與之前的現(xiàn)狀。
我們就把自己當(dāng)做一個(gè)錄像機(jī),錄下整個(gè)業(yè)務(wù)流程,一般我們選擇序列圖來(lái)描述組織內(nèi)系統(tǒng)之間的協(xié)同:
有了現(xiàn)狀就有了問(wèn)題,有了問(wèn)題那如何改進(jìn)呢。從上面圖我們可以看到付款慢的主要原因就是學(xué)生準(zhǔn)備好一張余額充足的飯卡的過(guò)程慢,我們可以從如下三種改進(jìn)模式入手思考:
-
物流變成信息流:這里就不多解釋,系統(tǒng)之間運(yùn)輸物品大概率不如傳遞信息成本低,比如短信替代信件;
-
改善信息流轉(zhuǎn):軟件系統(tǒng)越來(lái)越多,各個(gè)系統(tǒng)之間溝通不暢,我舉一個(gè)生活中的例子:每年老家親戚都會(huì)給我寄一箱櫻桃,在果農(nóng)處購(gòu)買(mǎi)櫻桃,然后去快遞點(diǎn)填單寄送,今年親戚告訴我現(xiàn)在方便多了,只需要在果農(nóng)處填一下手機(jī)號(hào)地址,剩下的果農(nóng)全部給處理好,這就是典型的改善信息流轉(zhuǎn)。
-
封裝領(lǐng)域邏輯:將人腦中的領(lǐng)域邏輯封裝到軟件系統(tǒng)中,很多安卓手機(jī)當(dāng)收到短信驗(yàn)證碼時(shí)會(huì)自動(dòng)提取并填寫(xiě)到當(dāng)前頁(yè)面。
這里我們思考下,學(xué)生付款慢根本原因就是準(zhǔn)備卡的這個(gè)過(guò)程,為什么要準(zhǔn)備卡?因?yàn)橐褂每ㄟ\(yùn)輸學(xué)生卡號(hào),這個(gè)賬號(hào)信息能否不用卡而使用聲光電運(yùn)輸,于是我們想到刷臉就是使用光傳遞學(xué)生身份信息(卡號(hào)),于是就得到下面這張圖。
如果改進(jìn)都這么簡(jiǎn)單就可以得到,那錢(qián)也太好賺了,學(xué)生余額不足要去借卡浪費(fèi)時(shí)間,即使換了刷臉就餐系統(tǒng)還不是喊一個(gè)人來(lái)幫刷臉,能否更好的改進(jìn)?這里介紹一下阿布思考法:首先假設(shè)有充足的資源去解決問(wèn)題,然后用手上現(xiàn)有的資源去山寨這個(gè)完美的方案。
第一步,假設(shè)世界首富就餐時(shí)支付時(shí)會(huì)遇到余額不足嗎,幾乎不可能,因?yàn)榧词箖?chǔ)蓄卡里沒(méi)有錢(qián)也可以從他那張高額度的黑金信用卡扣;第二步,我們能否為每個(gè)賬號(hào)山寨這樣一張信用卡,評(píng)估處每個(gè)學(xué)生每天吃飯最多花多少錢(qián),然后當(dāng) XX 支付賬戶余額不足時(shí)就可以從這張信用卡扣款。
當(dāng)然改進(jìn)序列圖不僅就這一個(gè),刷臉能夠識(shí)別到用戶的前提是提前錄入人臉并簽約綁定一個(gè)微信賬號(hào),余額不足時(shí)墊資了自然而然就有追繳,這里就不一一畫(huà)出了。需要注意的是改進(jìn)方案是經(jīng)過(guò)權(quán)衡的,一定是和愿景一致的。
現(xiàn)在將研究粒度進(jìn)一步縮小至系統(tǒng)。系統(tǒng)是封裝了自身數(shù)據(jù)和行為,能夠獨(dú)立對(duì)外提供服務(wù)的東西,其邊界是責(zé)任的邊界,如果搞不清楚系統(tǒng)的邊界,很容易得到很多數(shù)據(jù)幾乎相同的“假系統(tǒng)”,這會(huì)讓我們的分析、思考變得更麻煩,因此明確系統(tǒng)邊界至關(guān)重要。其實(shí)從老大角度看,你到底是零件升級(jí)還是新增零件并不關(guān)心,他要的是改進(jìn),真的沒(méi)必要強(qiáng)行拆那么多系統(tǒng)。
系統(tǒng)用例是系統(tǒng)能夠?yàn)閳?zhí)行者提供的、涉眾可以接受的價(jià)值,思考方式和上文中的業(yè)務(wù)用例一樣,只是研究對(duì)象從組織換成了系統(tǒng)。如果做了業(yè)務(wù)建模,事實(shí)上系統(tǒng)用例也就有了,直接從業(yè)務(wù)序列圖映射即可,所有指向研究系統(tǒng)的消息就是系統(tǒng)用例,消息的發(fā)送方就是執(zhí)行者,而所研究系統(tǒng)發(fā)消息指向的就是輔助執(zhí)行者。
如果從業(yè)務(wù)序列圖映射得到系統(tǒng)用例大多數(shù)情況下沒(méi)有啥疑問(wèn),但是有時(shí)候并沒(méi)有做業(yè)務(wù)建模,系統(tǒng)用例是靠頭腦風(fēng)暴整理出來(lái)的,那很有可能會(huì)出現(xiàn)一些有疑惑的點(diǎn),比如測(cè)試人員可以直接點(diǎn)擊某個(gè)按鈕扣款,而不是服務(wù)商收銀系統(tǒng)觸發(fā),那扣款的用例執(zhí)行者是不是還有測(cè)試人員?需要注意的是“價(jià)值不等于可以這樣做,用例執(zhí)行者只是表明這個(gè)用例是為誰(shuí)而做”,可口可樂(lè)是為青少年而做,但并不影響老年人也喝。
無(wú)論是業(yè)務(wù)用例還是系統(tǒng)用例,始終要把握一點(diǎn):用例是買(mǎi)賣(mài)平衡點(diǎn),是執(zhí)行者期望和組織/系統(tǒng)承諾的平衡點(diǎn)。同樣是查詢訂單,很可能財(cái)務(wù)是查詢來(lái)對(duì)賬、家長(zhǎng)是來(lái)看學(xué)生有沒(méi)有亂花錢(qián),他們的目的根本不同。很多人會(huì)不自覺(jué)的合并用例為查詢訂單,這就是思維沒(méi)有轉(zhuǎn)換:需求不考慮復(fù)用,你能用一個(gè)界面、一個(gè)接口實(shí)現(xiàn)更多可以賣(mài)的價(jià)值說(shuō)明你厲害,為啥非要補(bǔ)上一句“這其實(shí)就一個(gè)東西,你不用付兩份錢(qián)”。
目標(biāo)有了,下一步就是將這些需求表達(dá)出來(lái),作為一名研發(fā)經(jīng)常吐槽說(shuō)“需求不夠詳細(xì)”,可是詳細(xì)的需求是什么樣子?
描述系統(tǒng)的方式有很多,用例規(guī)約就是以用例為核心來(lái)組織需求內(nèi)容和需求規(guī)約,這樣的好處就是更容易讓我們知道為什么要做這個(gè)需求,讓質(zhì)量需求和設(shè)計(jì)約束指向更精確,接下里我們以扣款為例來(lái)看下用例規(guī)約怎么寫(xiě)。
前置條件是狀態(tài)不是動(dòng)作,而且是系統(tǒng)可以檢測(cè)到的。比如“商戶收銀系統(tǒng)發(fā)起扣款”(是動(dòng)作)、“學(xué)生已經(jīng)拿走菜品”(系統(tǒng)無(wú)法檢測(cè))這些都不是前置條件,寫(xiě)出的前置、后置條件要有增值作用,比如“系統(tǒng)正常運(yùn)行”等等這種適用于任何系統(tǒng)的約束也是沒(méi)有任何意義的。
在早期我學(xué)習(xí)軟件方法認(rèn)為是系統(tǒng)執(zhí)行用例前要做的校驗(yàn)的規(guī)則,后來(lái)意識(shí)到這個(gè)是錯(cuò)誤的,其實(shí)前置條件是背景條件,系統(tǒng)在什么條件下可以被外部使用,和用不用沒(méi)關(guān)系,而是系統(tǒng)能不能用的問(wèn)題,用例就是:在滿足前置條件時(shí)開(kāi)始,按照里面的用例步驟走,系統(tǒng)就能達(dá)到后置條件。
扣款的前置條件為:存在已經(jīng)簽約的學(xué)生賬戶。不滿足這個(gè)條件,扣款就一定不會(huì)成功,扣款用例根本無(wú)法執(zhí)行;后置條件可以寫(xiě)為:扣款憑證已經(jīng)關(guān)聯(lián)一筆支付訂單。
涉眾至關(guān)重要,前置條件是起點(diǎn),后置條件是終點(diǎn),這個(gè)是確定的,但是從起點(diǎn)到終點(diǎn)的路徑有千萬(wàn)條,哪一條才是最正確的呢,這就需要考慮涉眾利益,不斷權(quán)衡各方利益才能得出正確的需求。
涉眾利益就是針對(duì)某件事情,某類人擔(dān)心和希望什么。人心是復(fù)雜,他們的擔(dān)心和期望大多數(shù)是沖突的,而我們就是要把這些沖突找出來(lái),不斷權(quán)衡、取舍,找出都能接受的路徑。以扣款中的墊資這件事為例,我們來(lái)分析下不同人的心理:
學(xué)校餐廳老板心想:我可不關(guān)心你排隊(duì)長(zhǎng)不長(zhǎng),我只關(guān)心你換了刷臉系統(tǒng)后別影響我生意,我原來(lái)賣(mài)1000份飯,收1000份錢(qián),現(xiàn)在不能賣(mài)1000份飯,收900份錢(qián),我不管錢(qián)是誰(shuí)付,但是我1000份飯就要收1000份錢(qián)。
刷臉系統(tǒng)提供商老板心想:我給你墊資是為了賣(mài)我的系統(tǒng)賺錢(qián),但是可不是無(wú)限墊付,萬(wàn)一用戶不還怎么辦,我還賺什么錢(qián)。
學(xué)生家長(zhǎng):不就是忘記充值了嗎,但孩子是祖國(guó)的花朵,怎么能因?yàn)闆](méi)錢(qián)就不給吃飯呢,就不能欠著嗎,我還差你錢(qián)不成。
你看,每個(gè)人都有不同的小九九,需求中的兩難都是因?yàn)樾畔⒉蛔悖覀冎懒瞬煌姹姷南敕ㄒ簿秃米鰶Q定了,家長(zhǎng)心疼孩子,沒(méi)錢(qián)時(shí)候希望不耽誤孩子吃飯,家長(zhǎng)也不會(huì)故意欠錢(qián);餐廳想賣(mài)多少飯收多少錢(qián),他最希望實(shí)時(shí)收款,稍晚一下收到錢(qián)也能接受;刷臉系統(tǒng)提供商老板只能接受拿出一部分錢(qián)讓沒(méi)及時(shí)充值的學(xué)生可以吃飯以推銷(xiāo)自己的系統(tǒng)。權(quán)衡各方利益和可以做的妥協(xié),我們可以做出決策:每人每天做多墊3筆,單筆不超過(guò)30元,每個(gè)學(xué)校要有最大墊資限額。這樣既幫助余額不足的學(xué)生解決燃眉之急,墊資總額也可控,皆大歡喜。
每個(gè)用例有多個(gè)回合,回合的步驟分為四類:請(qǐng)求、驗(yàn)證、改變、回應(yīng),每個(gè)回合必須包含請(qǐng)求和其余三類中的一類。寫(xiě)用例步驟注意一些點(diǎn)這里就不做詳細(xì)的介紹了,可以去《軟件方法》相關(guān)章節(jié)查看,只說(shuō)一下拓展路徑。
所有的步驟都可能要發(fā)生意外,其中某些意外是系統(tǒng)要負(fù)責(zé)處理的,處理意外的路徑就是擴(kuò)展路徑,其中驗(yàn)證類步驟一定會(huì)出現(xiàn)擴(kuò)展,否則就不用驗(yàn)證,反正失敗了也處理不了,當(dāng)擴(kuò)展路徑過(guò)于復(fù)雜時(shí)候我們?yōu)榱吮阌诠芾恚梢园堰@些路徑當(dāng)成一個(gè)拓展用例,拓展用例并不是從業(yè)務(wù)序列圖推導(dǎo)而來(lái)的,它也不能獨(dú)立給執(zhí)行者提供價(jià)值,其好處是為了我們便于管理用例。
補(bǔ)充約束包含字段列表、業(yè)務(wù)規(guī)則、質(zhì)量需求、設(shè)計(jì)約束。字段列表是為了描述步驟中某個(gè)概念的細(xì)節(jié),比如返回扣款信息包含什么?這個(gè)字段列表寫(xiě)到涉眾有共識(shí)就可以了,有些信息不用進(jìn)一步說(shuō)明,比如班級(jí)信息大家都知道是幾年級(jí)幾班,就不用再去費(fèi)時(shí)間寫(xiě)了。
業(yè)務(wù)規(guī)則是需求一種,是從涉眾視角來(lái)看不這樣不行的規(guī)則。例如學(xué)生信息要使用MySQL存儲(chǔ),這不是業(yè)務(wù)規(guī)則,涉眾才不關(guān)心你用什么數(shù)據(jù)庫(kù)呢。比如“每個(gè)用戶最多墊資3筆”這個(gè)涉眾關(guān)注,可以作為業(yè)務(wù)規(guī)則。
質(zhì)量需求就是系統(tǒng)在正確做事的基礎(chǔ)上,還要滿足一些指標(biāo),這些指標(biāo)就是質(zhì)量需求,比如可用性、性能等等,不做贅述。
最后一點(diǎn)就是設(shè)計(jì)約束了,設(shè)計(jì)約束一樣要從涉眾的視角來(lái)看,比如扣款要用 XX 支付,因?yàn)閷W(xué)校可能申請(qǐng)到了 XX 支付免費(fèi)率資格。“使用C++語(yǔ)言開(kāi)發(fā)”就不是設(shè)計(jì)約束,因?yàn)樯姹姴⒉魂P(guān)心。
經(jīng)過(guò)以上分析,我們得到扣款系統(tǒng)用例規(guī)約如下:
前置條件:
存在已經(jīng)完成簽約的學(xué)生賬戶
后置條件:
扣款憑證已經(jīng)關(guān)聯(lián)一筆扣款成功的支付訂單
涉眾利益:
家長(zhǎng)--擔(dān)心由于忘記充值,賬戶內(nèi)余額不足而導(dǎo)致孩子無(wú)法吃飯
餐廳老板--擔(dān)心賣(mài)出飯但是沒(méi)有收到對(duì)應(yīng)的款項(xiàng)
系統(tǒng)提供商老板--擔(dān)心出現(xiàn)大量墊資未還的欠款,產(chǎn)生壞賬造成資金損失
基本路徑:
1. 服務(wù)商收銀系統(tǒng)提交消費(fèi)信息
2. 系統(tǒng)提示學(xué)生刷臉
3. 系統(tǒng)驗(yàn)證刷臉學(xué)生賬號(hào)簽約狀態(tài)
4. 系統(tǒng)請(qǐng)求 XX 支付扣款
5. 系統(tǒng)保存扣款結(jié)果
6. 系統(tǒng)返回扣款單信息
擴(kuò)展路徑:
3a. 學(xué)生賬號(hào)未簽約:
3a1. 系統(tǒng)通知家長(zhǎng)簽約
4a. 扣款賬戶余額不足:
4a1. 系統(tǒng)校驗(yàn)墊資條件
4a1a. 不滿足墊資條件
4a1a1. 轉(zhuǎn)到5
4a2. 系統(tǒng)請(qǐng)求 XX 支付扣款
4a3. 系統(tǒng)通知家長(zhǎng)還款
字段列表:
1. 消費(fèi)信息=消費(fèi)金額+商戶訂單號(hào)
2. 扣款單信息=扣款金額+是否墊資+支付訂單號(hào)
業(yè)務(wù)規(guī)則:
1. 單學(xué)生賬戶最多同時(shí)存在3筆欠款
2. 墊資只針對(duì)消費(fèi)金額小于30元的訂單
3. 每個(gè)學(xué)校有墊資上限,墊資上限=學(xué)生數(shù)*3*30*10%
質(zhì)量需求:
1. 扣款從收到請(qǐng)求到結(jié)束在5秒內(nèi)完成
設(shè)計(jì)約束:
1. 收款系統(tǒng)使用 XX 支付
至此,再補(bǔ)充一些設(shè)計(jì)稿等用于和研發(fā)溝通的素材,就可以將需求提給研發(fā),讓研發(fā)開(kāi)始實(shí)現(xiàn)了。
我們可以發(fā)現(xiàn)我們做的任何一個(gè)需求都是可以一步一步推導(dǎo)出來(lái)的,并不是我覺(jué)得、我認(rèn)為、拍腦袋得出來(lái)的。“任何需求都是不這樣不行,而不是這樣也行”。我們做業(yè)務(wù)建模和需求這兩個(gè)工作流一定要跳出來(lái),不要從研發(fā)角度看問(wèn)題,采用團(tuán)滅法,假設(shè)研發(fā)團(tuán)隊(duì)都被殺死了,系統(tǒng)是路上撿到的,從組織角度去看問(wèn)題,才能得到正確的需求。現(xiàn)在再來(lái)看這些話相信你就再也不迷糊了。
“你這需求怎么又變了”:1)需求沒(méi)變,只是需求人員認(rèn)識(shí)變了,之前的需求是錯(cuò)的;2)需求確實(shí)變了,因?yàn)閼?zhàn)場(chǎng)已經(jīng)攻占,愿景都變了需求自然而然也變了;
“我們?nèi)肆τ邢蓿蛔鲎罡邇?yōu)先級(jí)的需求”:按照愿景排序,排在最前面的那個(gè)需求就是優(yōu)先級(jí)最高的需求;
“你這需求不合理”:對(duì)于愿景中的改進(jìn)指標(biāo)沒(méi)有幫助或者幫助很小,或者沒(méi)有權(quán)衡涉眾利益;
“你這過(guò)度設(shè)計(jì)了”:在當(dāng)前時(shí)間點(diǎn),這些功能對(duì)愿景中的改進(jìn)指標(biāo)沒(méi)有幫助或者幫助很小。
以上是業(yè)務(wù)建模和需求相關(guān)內(nèi)容,做完這些工作可以讓我們明明白白的知道為什么要做這個(gè)需求,下次再來(lái)聊聊分析和設(shè)計(jì),繼續(xù)探索如何優(yōu)雅的實(shí)現(xiàn)這個(gè)需求。
問(wèn):“一個(gè)程序員,好好寫(xiě)代碼就好了,學(xué)軟件方法干什么。”
答:“閉上眼睛,我能清晰感受到,我寫(xiě)出的每一行代碼,是如何微妙的改變著這個(gè)世界”
你有什么值得借鑒的業(yè)務(wù)思維可以分享?歡迎評(píng)論留言。我們將選取1則評(píng)論,送出騰訊云開(kāi)發(fā)者定制眼罩1個(gè)(見(jiàn)下圖)。6月26日中午12點(diǎn)開(kāi)獎(jiǎng)。
????歡迎加入騰訊云開(kāi)發(fā)者社群,享前沿資訊、大咖干貨,找興趣搭子,交同城好友,更有鵝廠招聘機(jī)會(huì)、限量周邊好禮等你來(lái)~

(長(zhǎng)按圖片立即掃碼)