這篇文章希望向你分享的是:如果你想開發(fā)一款A(yù)pp,而你請不起一個完整的開發(fā)團隊,那么你如何借助外包公司來做好這件事;你如何去攬下立項、原型、系統(tǒng)、UI、交互,這些所有的工作,幾乎沒有任何面對面的交流,一切想法都通過文檔來跟外包溝通,最終拿到一個跟你的預(yù)期絲毫不差的精品App。
全文目錄:
【上篇】
一、解決一個問題就夠了(產(chǎn)品定位/需求分析)
二、拒絕數(shù)學公式,用感性來立項(產(chǎn)品立項)
三、直接開始設(shè)計App的門面(概念圖/交互設(shè)計)
四、用避免“反人類”的方法來設(shè)計原型(原型設(shè)計/文檔撰寫)
【下篇】
五、左右腦同時開工來制作擬物UI(UI設(shè)計/切圖/適配文檔)
六、虛擬迭代(成本控制)
由于字數(shù)過多,這篇文章會分為上、下兩篇來發(fā)表。你現(xiàn)在看到的是上篇。
我耗盡心思寫這篇文章,并不是想要給我的App打廣告,而是總結(jié)我過去一年創(chuàng)業(yè)開發(fā)這個App的過程中探索到的所有關(guān)鍵性的經(jīng)驗,將它們凝聚到這27000字里,供給所有對App開發(fā)有興趣的人了解——因此,本文所有涉及到App名稱的地方,都會用「the App」來代替。
我曾是一個海淘平臺的產(chǎn)品負責人。一年前,我想給這個世界留下點自己的作品,于是辭職眾籌開始做「the App」。眾籌的錢并不夠我請一個完整的開發(fā)團隊,幫我忙的幾位朋友除了一名是專業(yè)測試之外,其他人并不是業(yè)內(nèi)人士。于是,擺在我面前的只有一條路,那就是:代碼外包,其它所有工作都由我來負責。
一年之后,「the App」上線了,它和我想象中一模一樣,沒有1px或1個邏輯的誤差。雖然它存在一兩個開發(fā)時沒想到的毛病,還需要繼續(xù)迭代,但是它入選了“最美應(yīng)用”年度Top100,也拿到了不錯的用戶量,它在理念、邏輯、顏值上,都可以算是一個精品應(yīng)用。
這篇文章希望向你分享的是,如果你想開發(fā)一款A(yù)pp,而你請不起一個完整的開發(fā)團隊,那么你如何借助外包公司來做好這件事;你如何去攬下立項、原型、系統(tǒng)、UI、交互,這些所有的工作,幾乎沒有任何面對面的交流,一切想法都通過文檔來跟外包溝通,最終拿到一個跟你的預(yù)期絲毫不差的精品App。
如果你是一名有志于開發(fā)理想中的產(chǎn)品的創(chuàng)業(yè)者,這篇文章將會告訴你很多的細節(jié);而如果你是一名產(chǎn)品經(jīng)理,這篇文章會從一名創(chuàng)業(yè)者的眼光帶你重新看待產(chǎn)品開發(fā)這件事,這里不再有PM和程序員、設(shè)計師之間的矛盾,只有純粹地追求做一個好產(chǎn)品,并為之付出自己的一切。
一個產(chǎn)品能解決好一個問題就夠了,也許你會說,成功的產(chǎn)品需要“生態(tài)”和“盈利模式”。我只能說,除非你產(chǎn)品的核心功能本來就是去實現(xiàn)某種交易(例如p2p金融),或是致力于開發(fā)某種消費的沖動(例如“免費”手游),否則,生態(tài)和盈利模式都是建立在“最重要的那個問題已解決”的基礎(chǔ)上的。
高屋建瓴一上來就要搞什么生態(tài)的App往往是認準了一個風口,恨不得把所有功能都加上去,BP上能畫100個分析圖,然而基本功能卻做不到位,于是大多都被市場淘汰了。一個App的99%的營收也許都來自于它的附加功能,然而如果我們不把99%的力氣花在那不起眼的、只占營收1%的核心功能上,這件事就會很尷尬。
微信的核心
以微信為例,不論微信迭代多少個版本,它始終是一開始那個“取代手機發(fā)短信功能”的App(也許你已經(jīng)忘了,以前人與人之間是用短信來溝通的)。第一欄和第二欄永遠是消息列表和通訊錄,就算朋友圈是中國最大的社交圈子,游戲欄目是中國最大的手游流量入口,它們都不可能突然跳出來影響你的日常使用。“人”永遠是通訊的主體,即使后來出現(xiàn)了公眾號和應(yīng)用號,它們也永遠是被收納在一個次級入口之中。
而當你打開一個具體的對話,它的核心永遠是文字之間的交流,因為這才是“取代手機短信”的體現(xiàn)。哪怕是后來推出了劃時代的“語音”,發(fā)送語音的按鈕也永遠是在發(fā)送文字的旁邊,而語音的氣泡也永遠不會出現(xiàn)很多人要求的“暫?!被颉昂笸恕?除非未來微信推出插件式功能),因為聊天氣泡的主體永遠是文字氣泡,其它所有類型的氣泡,不管是現(xiàn)在的圖片、鏈接、視頻,還是未來的VR對話甚至是腦電波交流,它們在交互上都永遠不能凌駕于“文字氣泡”之上——除非文字已經(jīng)不再是人類的第一遠程交流方式。哪天我們能像三體星人那樣用光的波長和頻率來交流了,微信的這個最核心結(jié)構(gòu)才會改變,否則它就是走向庸俗,然后走向墮落。
「the App」希望解決的唯一問題是:“這個世界上大多數(shù)人有動力去改變自己,然而他們沒有一套行之有效的方法來堅持正確的人生信念”。這個問題可以拆分成以下3種現(xiàn)象,每個現(xiàn)象都對「the App」提出了1個必須做到的要求。
1、我們一面收集人生觀,一面又在遺忘
當你看到一本好書,你會把那些醍醐灌頂?shù)木渥诱聛?,貼在書桌前,現(xiàn)在那張紙肯定早就不見了;當你在朋友圈看到一篇好文章,你會立刻收藏下來,但你從來不會回頭去看;有時你突然頓悟,覺得從今天起就能重獲新生,但你一個月之后就變回老樣子了……
——這要求「the App」必須是一個能快速記錄,又能妥善保存的筆記工具。
2、我們總在一個人生問題上重復(fù)糾結(jié),無法做到不斷升華
例如,你的缺點是習慣向別人妥協(xié),不能維持自己的底線。從小到大,你受到過很多次大的傷害,每次你都痛徹心扉,決定從明天起不再做個老好人。然而這么多年過去了,你對如何“不做老好人”并沒有什么更深入的經(jīng)驗,因為每次你的實踐周期都只有幾天,然后就把它忘得影都沒了,重新變成那個老好人,直到下一次重大挫折的到來。
——這要求「the App」必須是一個有效的知識整理軟件,能把不同時期記錄下來的,所有關(guān)于同一個人生道理的文字都匯集起來,并且給到你一種取其精華的整理方式,讓你對這個道理的認識能不斷升華。
3、由于人的劣根性,我們總在不同的人生觀之間搖擺
人的本性是趨利避害,在一個浮躁的社會染缸里,我們很難頂住誘惑,去堅持一個不變的人生哲學。
去年你拜訪了一個高僧,他告訴你要以德報怨,你激動得差點要去做居士;半年前你換了公司,你上司整天給你穿小鞋,你決定要做一個“厚黑”的人來保護自己;三個月前你看了一篇心靈雞湯,講了一個窮孩子兜揣10元錢最終成為澳門賭王的勵志故事,你決定不再計較當下困擾,無條件提升自己的實力和境界;這一周你又煲完了《紙牌屋》,于是決定要做男主角那樣能玩轉(zhuǎn)辦公室政治的人。你的人生觀一直在搖擺,然而卻鮮有成果,因為你很少在一個不動搖的人生方向上付出持續(xù)的努力。
——這要求「the App」必須擁有一套價值衡量體系,能精準地衡量不同人生觀之間的優(yōu)劣,幫用戶淘汰掉那些劣質(zhì)的心靈雞湯和錯誤價值觀,找到那個(或若干個)對自己最重要的人生方向,每天提醒自己來堅持。
我會用眾籌資金的90%來解決這個唯一的問題。思索這個問題貫穿著「the App」開發(fā)的頭和尾,也將延續(xù)到未來每個版本。每當我認為產(chǎn)品設(shè)計已經(jīng)能完美解決問題時,過不了多久,我總會發(fā)現(xiàn),我給產(chǎn)品增加了不少額外的功能,企圖用它們來滿足主要功能在智慧上的欠缺。
但最有效的問題解決方案永遠是一條單一的路徑,如果這條路上還有一些小岔路,只證明我還沒有找到最優(yōu)的辦法。就像相對論把萬有引力統(tǒng)一了進來,M理論貌似也能把幾種弦理論、相對論和量子力學統(tǒng)一進來,科學家一直在尋找用最簡單的一個理論來概括宇宙所有的原理。從上帝或文明高度發(fā)展的外星人來看,也許我們的這種追求很渺小,還有太長的路要走,但這個過程本身就是一種嘉獎。
App要解決的問題已經(jīng)擺在這里,接下來就是給產(chǎn)品設(shè)計一個大概的框架。按照套路,我應(yīng)該先把產(chǎn)品需要的功能全都列出來,然后再把它們轉(zhuǎn)化成干巴巴的、沒有任何藝術(shù)感染力的原型設(shè)計圖,這樣做的問題在于,直到產(chǎn)品的UI設(shè)計圖出爐之前,我沒法用眼睛去真實地看到產(chǎn)品是個什么樣子,我沒法對它產(chǎn)生一個主觀的感受。
人都是感覺的動物,一個人依賴一個產(chǎn)品,往往是因為他愛這個產(chǎn)品,而不是因為他需要這個產(chǎn)品(除非你做的是剛需產(chǎn)品,而且沒有競爭對手,例如12306;或者你壟斷了市場,例如淘寶),那么這些干巴巴的設(shè)計方案又怎能幫助我把握好產(chǎn)品的感覺呢?
我曾經(jīng)去某個大公司的UGC新平臺應(yīng)聘產(chǎn)品經(jīng)理,我提前去他們平臺看了看,網(wǎng)站設(shè)計得很糟糕,讓人沒有閱讀的欲望;明明是一個重度依賴用戶原創(chuàng)內(nèi)容的社區(qū),然而各種困難的交互與產(chǎn)品中滲透出的強調(diào)權(quán)威的價值觀讓人沒有創(chuàng)作的動力。于是,在重新規(guī)劃框架之余,我詳細地指出了每個頁面的問題,把理想中的頁面做成了效果圖,希望讓他們明白,我們要營造什么樣的感覺才能讓用戶愛上它。
然而,當我跟他們的產(chǎn)品總監(jiān)交談時,他對這些視覺化的方案完全沒有“感覺”,只是在一味地向我追問“用戶畫像”、“運營策略”這些比郁金香泡沫還要虛的東西,這場經(jīng)歷讓我更加確信:一個不愛用戶,不極力給產(chǎn)品營造“感覺”,試圖用數(shù)學公式來推導(dǎo)產(chǎn)品設(shè)計的PM是永遠沒法做出有魅力的產(chǎn)品的。
每個人心中都有一片“信念”的森林
上圖是我最開始設(shè)想的,也是最有魅力的場景概念。在這個概念下,產(chǎn)品設(shè)計極其簡單,每個人的內(nèi)心都是一片草原,當你進入我的App,我就給你呈現(xiàn)你內(nèi)心的草原。你在生活中收集每一段感受,都是在這個草原上種一棵小樹苗。每天你都能領(lǐng)到一些水,你用這些水去灌溉那些你認為最好的樹苗。隨著你度過的每一天,有些樹木因為長期得不到水源而枯死了(草原的降雨量通常不足以支撐樹木的成長,這是有科學依據(jù)的哼),那么這些枯樹就會被送到樹木墳場,提醒你再也不要相信這些虛偽的心靈雞湯。而在你的草原上,總會有某些樹苗長得比其它的都快,它們變成了蒼天大樹,提醒你在它的指引下面對每天的生活。
Unity市場的3D資源千差萬別
感性過后,就要回到專業(yè)的角度去衡量它的可行性。這個方案一共有兩種執(zhí)行辦法:3D和2D。經(jīng)過跟以前做游戲的同事探討,3D最可行的方式是Unity 3D,然而當我花了一兩周時間了解Unity之后,我發(fā)現(xiàn),直接在Unity市場買來的模型并不能拼湊出一個和諧的場景,因為不同模型的貼圖風格、面數(shù)、骨骼、動作都有很大的差異(如上圖),我需要一個既有很強的原畫功底以便能修改貼圖,又會改模型和調(diào)動作的資深3D設(shè)計師才能把所有買來的素材統(tǒng)一化。而在程序方面,找到一個精通Unity且熟悉手機適配的C#工程師,其耗費的錢財和難度都遠遠高于去找一個制作原生iOS App的資深工程師。所以這個方案已經(jīng)遠遠超出了預(yù)算。
用分層動畫來實現(xiàn)透視效果
而如果采用2D的方案,草原作為主場景實現(xiàn)起來并不困難,如上圖,場景從近到遠分成若干個圖層,最近的前景(小草、雜石等)尺寸最長,而最遠的天空背景尺寸最短。在iOS前端,我們只需要定義一條規(guī)則:滑到最左邊時,所有的圖層都靠在屏幕最左邊;滑到最右邊時,所有的圖層都靠在最右邊。那么自然地,當用戶滑動屏幕時,他會發(fā)現(xiàn)前景滑動得很快,而背景滑動得很慢,不同的圖層都有不同的速度,于是就形成了透視的感覺。
場景是很好解決,那么物件是不是也很簡單呢?我們的最主要物件是“樹”,也就是用戶撰寫的某個人生道理。為了確定“樹”要怎么做,首先我得確定這個“樹”包括哪些元素、操作以及它們以何種組織方式來呈現(xiàn)。
“樹”應(yīng)該是某種人生道理的集合
首先,如上圖,我的App不可能設(shè)計成用戶寫的每一篇文字都算作一棵樹。因為這個App的其中一個核心特點就是避免像日記或筆記應(yīng)用那樣:你收集了大量的文字,卻發(fā)現(xiàn)很多文字講的是同一個人生道理。我們必須把相同的人生道理歸納在一起,讓它們組成同一棵樹。例如,如果你收集了8篇文章,講的都是關(guān)于“怎樣利用好自己的內(nèi)向性格”這個話題,顯然它們應(yīng)該放進同一個樹里,而不是每次閱讀他們都要去找到8顆不同的樹。
在一顆樹上,我不可能把這8篇文章設(shè)計成8個葉子。因為葉子要放在樹枝上,8個葉子倒容易呈現(xiàn),如果別人寫100篇文章呢?我難道顯示100個葉子和相對應(yīng)的100根樹枝?就算可以這樣做,那么這100根樹枝的組合必須符合樹的生長規(guī)律,否則看起來就變成了反人類,這算法的編寫和UI的重構(gòu)又要耗費多少Manday呢?其次,樹的高度取決于你給它澆過多少次水,而不取決于它有多少個樹葉,那么顯然,一個很矮的小樹苗上長著100根樹枝的情況是無法讓我接受的。所以,我只能把具體的文章入口呈現(xiàn)為浮窗的列表里,點擊某棵樹之前,你頂多知道這棵樹包括多少篇內(nèi)容,但具體內(nèi)容列表需要你點擊之后彈出浮窗才能看到。
2D所需的美術(shù)資源是超限的
上面關(guān)于“樹葉”、“樹枝”的思考其實是不需要的,因為它們都被一票否決了,只要你看看上圖就明白了。一棵樹會隨著澆水次數(shù)的增加而不斷長大,如果是3D模型,我們可以把樹分解成幾個組成部分,然后給樹木定義成幾個階段,每個階段都設(shè)計一套隨機算法來組合成符合這個年齡段特征的樹木,在一個階段內(nèi)讓樹的零件數(shù)量與模型大小、貼圖在兩個端點之間平滑漸變就行了。然而這里是2D的樹,不論是樹干、樹枝還是樹葉,你都無法直接拉伸它們,因為這樣帶來的視覺效果會違背自然。那么我只能給樹木做大量的實體圖片,也許是10個、100個、1000個,這顯然是非常愚蠢的方案,它導(dǎo)致的木桶效應(yīng)意味著2D方案的破產(chǎn)。
那么我為什么還要提到關(guān)于“樹枝”和“樹葉”的思考呢?因為對這個細節(jié)的思考最終改變了「the App」的核心設(shè)計?!竧he App」最終版本確定下來的原型設(shè)計,是從一次又一次失敗的設(shè)計里提取出來的亮點組合而成的,而不是走流程走出來的。我想向你表達的是,如果你是一名PM,你的上司和團隊要求你先設(shè)計原型,請你明白,他們并不一定是正確的。
你應(yīng)該盡量避免那么早進入原型設(shè)計的階段,原型設(shè)計牽扯太多全局性的東西,很多時候一個漏洞就意味著整個原型設(shè)計的報廢。除非你并不在意這個App是否完美,否則,在進入正式設(shè)計前,請你多開腦洞,多去思考一些關(guān)鍵性的細節(jié),并且跟開發(fā)、設(shè)計團隊去討論它們的可行性以及實現(xiàn)的代價,這樣,你和你的團隊都可以少走很多彎路。
你更愿意下載哪個App?
上面提到的3D和2D方案,它們的出發(fā)點都相同,那就是一個具有感染力的情景是最能打動用戶的。例如左圖這款風靡Appstore很久的時間管理軟件Forest,右圖是我把它遷移到一個普通界面后的效果,左右兩個App功能完全相同,但如果它是右圖這樣的界面,你還有沖動去購買它嗎?把產(chǎn)品的主線功能巧妙地融入一個情景之中,用App來打造這個情景,用這個情景的感染力來給用戶洗腦,我至今仍然認為這將是成功速度最快的方案。
那既然沒有成本去做這件事,除了“情境化”之外,我手上的選項就只剩一個“專業(yè)化”了。我決定把「the App」打造成一個邏輯清晰、功能齊全、所有操作完美契合的專業(yè)化工具。產(chǎn)品的Point不再是“用情景給用戶洗腦”,而是用專業(yè)化的工具設(shè)計來強調(diào)自己是這個細分市場上的不二選擇,也就是強調(diào)細分的競爭力。雖然身邊的人總提到我的競爭對手是日記類App、記事類App和個人管理App,但如果我在“自我成長”這個細分領(lǐng)域做到足夠的專業(yè)性,那么我也就不存在什么競爭對手了。
專業(yè)性意味著一切,如果支付寶手機版能做好自己在“手機支付”這一塊的專業(yè)性,那么當微信去做紅包的時候,它就不會沒有主見地采取跟隨戰(zhàn)略,而是早就忙著布局移動支付了。這導(dǎo)致的結(jié)局是,我身邊便利店的手機支付大多都是微信這個支付領(lǐng)域的門外漢來普及的。
當一個產(chǎn)品永遠只關(guān)注怎樣把自己的核心訴求做得更棒的時候,它就能保持自己的競爭力;而當一個產(chǎn)品不看自己,總在看各種競爭對手和假想敵的時候,它就會心態(tài)爆炸,做事沒有主次,以至于迷失自我。
擁有酷炫交互的Paper 51
既然定好了要做專業(yè)化的工具,那么我就去找參照。從我下載的眾多App中,我發(fā)現(xiàn)了Paper 51,這是個了不起的參照樣本,因為它不光能像便簽、日記那樣快速寫東西,而且用戶寫的每條內(nèi)容都是一片紙,這些紙張能自由拖拽,堆疊在一起,形成一個個紙堆——沒有比這更直觀的文字整理方式了(很遺憾,上圖并沒有展示紙張堆疊起來的效果,因為在截圖時我發(fā)現(xiàn),新版Paper51已經(jīng)放棄了這個設(shè)計)。
而從視覺上來講,Paper 51作為一個工具化的App有著了不起的交互效果,而這些效果竟然都是簡單的2D切圖構(gòu)成的,這從成本上非常符合「the App」的開發(fā)思路——只要我能把2D切圖、適配方案和交互設(shè)計做到完美,那么只靠一名原生iOS工程師就能把「the App」做出和Paper 51一樣絢麗的視覺效果。
現(xiàn)在唯一不確定的是“紙張拖拽”的開發(fā)代價,我詢問過我的外包合作者智超,智超也不確定紙張拖拽到底好不好做、會出現(xiàn)多少Bug。對待這個問題,其實解決方案很簡單,那就是劃清界限,讓拖拽功能變成一個附加的功能,它的存在或去除并不影響這個App的其它模塊。一方面,我們先做出一個沒有拖拽功能的App,先上線再說;而另一方面,什么時候我們有閑余資金去開發(fā)拖拽功能了,它能作為一個單獨的模塊加到App里面,并不影響原有的布局。之所以這樣考慮,是因為“拖拽”本身就是一個快捷操作,快捷操作的本質(zhì)在于它是一個“捷徑”,它只是“主要路徑”的腳本化,它們都可以用“執(zhí)行已有功能1+執(zhí)行已有用能2……”這種句式來表達。
確定了「the App」的主要視覺元素是“紙”和“紙堆”之后,那么接下來就是思考怎樣用這幾個素材來解決上個章節(jié)提到的那3個要求,這樣我就能給產(chǎn)品立項,以便開始具體的工作了。
第1個要求:「the App」必須是一個能快速記錄和妥善保存的筆記工具
從目前iPhone的特性來看,在我不聯(lián)通Siri也不跟其它App互通接口的情況下,快速記錄最少的步驟包括:
但如果打開App默認就能直接輸入文字,那么就意味著App啟動的默認畫面是輸入界面,這樣當用戶不是想輸入文字,而是想查看內(nèi)容時,就要多一個退出的操作,這顯然是反人類的設(shè)計。而如果換種思路,在首頁常備一個輸入框體,那么,假設(shè)這個輸入框體在啟動時默認就處于激活狀態(tài),那么鍵盤也會默認存在,不想寫東西的用戶照樣多了一個退出的步驟;假設(shè)這個輸入框體的默認狀態(tài)是不激活,那么當用戶要寫東西時,一樣需要一次點擊操作才能激活這個輸入框,從操作上來講并沒有節(jié)省一個步驟。
快速記錄的最簡步驟
綜上所述,必須在步驟1和2之間加上一個“點擊撰寫新文字”的步驟,這樣App才能獲得最好的交互體驗。最終得到的結(jié)論是,首頁必須常駐一個空白的紙,點擊或拖拽這張紙,就能立馬寫東西,然后單擊保存就能回到主界面(如上圖步驟)。
人生道理的整理過程
第2個要求:「the App」能把關(guān)于同一個人生道理的記錄整合到一起,然后讓用戶取其精華
這就要求「the App」在用戶不那么忙的時候,能呈現(xiàn)用戶記錄的所有臨時的紙張,用戶從里面挑選那些相同的人生道理,把它們合并起來。這個過程是多次且可逆的,當用戶覺得某篇文字實際上并不屬于某個人生道理,他可以隨時把這張紙從紙堆里抽出來;當用戶某一天又收集了一篇新的人生感悟,他隨時能把這張紙加入一個已存在的紙堆里。就像上圖所示的那樣。
不斷提煉和升華自己的人生觀
當用戶形成了一個紙堆之后,他能隨時去橫向比較其中不同紙張的優(yōu)劣,把那些過時或不夠好的觀點淘汰掉,精簡這個紙堆。例如,小明最近發(fā)現(xiàn)自己最大的問題在于“擔心沒發(fā)生的事情”,他經(jīng)常寫一些關(guān)于這方面的感想,也經(jīng)常收集一些知乎、壹心理、朋友圈、書籍上的有用文章,并且把它們都整理到了同一個紙堆里。隨著他在生活中用實踐來克服這個問題,他對這個問題的理解就越來越深刻,那么他就可以定期回到這個紙堆,淘汰掉那些不夠深刻的文字,只保留對自己最有幫助的文字。同時,這個過程中也伴隨著會發(fā)現(xiàn)一些超越這個話題的存在,那么小明這時就可以去為它開辟一個新的人生道理。就像上圖所示的那樣。
形成人生觀的“排行榜”
第3個要求:「the App」必須設(shè)計一套嚴謹而方便的流程
只要每天堅持使用,那么用戶就能自然而然地完成對他記錄的每一條人生信念的“定價”。對于那些讓自己在生活中摔跟頭的劣質(zhì)心靈雞湯或是錯誤人生觀,「the App」會協(xié)助用戶給它一個越來越低的“定價”,提醒用戶把這個人生觀“拉黑”,在未來整個人生中都不要去重蹈覆轍;而對于那些不易堅持卻對人生最有長期效果的正品價值觀,「the App」會協(xié)助用戶給它越來越高的“定價”,直至形成每個人的“核心人生觀排行榜”,堅守那些少數(shù)的,實踐證明最有效的人生觀,就能保證心靈的高速成長(如上圖)。
這第3個要求是最難實現(xiàn)的,它并沒有在立項之初就找到最好的設(shè)計,在后面的“虛擬迭代”章節(jié),你將看到它詳細的誕生過程。
確定好產(chǎn)品大致框架之后,我依然沒有開始做原型,而是直接著手設(shè)計App的首頁——既然我選擇了Paper 51做視覺參照,我就必須先眼見為實,確定這樣真的能做出一個視覺效果達到并超過Paper 51的App。首頁的視覺也會反過來影響到原型的設(shè)計,在線框圖里看上去很有條理的首頁原型,做成最終的效果并不一定能達到我要求的美感,這就會導(dǎo)致我設(shè)計的某些流程將連鎖地報廢,所以最保險的方案就是先把首頁的視覺確定到9成。
首先是美術(shù)風格的確立。由于已經(jīng)放棄了3D,或是用2D分層動畫來實現(xiàn)偽3D,那我只剩3個選項:扁平、矢量風格和擬物。首先排除扁平風格,因為我們的設(shè)計元素都要圍繞著“紙”,而扁平化最不擅長表現(xiàn)的就是實體感。Paper 51用的是簡潔的矢量風格,但它有我們所不具備的拖拽交互方式,這種交互方式給人帶來很強烈的物理感,彌補了矢量風格的不足。所以,為了超越Paper 51的視覺,我唯有選擇擬物。
我第一眼就愛上的背景圖
確定了擬物風格之后,我就開始找背景圖,我花了十多個小時去圖庫里找素材,但當我看到負責測試的穎爺手上的錘子手機壁紙時(上圖左),我立馬就認為非它莫屬了。老羅是個尊重藝術(shù)家的人,錘子系統(tǒng)的每一張壁紙都標注了作者,于是我順利地在Depositphotos搜到了這張原圖(「the App」所有設(shè)計素材都是正版購買的)。原圖是大白天的光環(huán)境,而「the App」的風格應(yīng)該是安靜和隱私的,我希望給用戶營造一種無人打擾的地下車庫的感覺,在這里,他可以向這面墻壁傾訴任何內(nèi)心深處的事,所以我把這張圖處理成了黑夜的光環(huán)境(上圖右)。
首頁擺放的肯定是入口級的東西,那么顯然就要先設(shè)計“紙堆”。Paper 51的紙堆是用算法自動地把它所包含的紙張堆疊起來,比如說,如果這個紙堆含有3張紙,那么就顯示3張紙堆疊而成的樣子。但是在制作效果圖的時候我發(fā)現(xiàn),「the App」的紙張是擬物的,如果只有一個“紙”的素材,僅靠隨機角度來堆疊,就會失去真實感,必須設(shè)計幾張不同的紙來隨機顯示;另外,紙張的陰影并不能像矢量圖那樣直接運算生成,必須手繪才顯得真實,而手繪陰影帶來的問題就是,這個陰影的投射將不受控制:紙張A在紙張B的上面,它的陰影只應(yīng)該投射在紙張B上,不應(yīng)該投射在墻壁和紙張C上,這就要求紙張A在投影時必須以紙張B的輪廓作為遮罩區(qū),因此實現(xiàn)起來會耗費大量Manday。
設(shè)計“紙堆”,初步形成首頁
所以,最終我“偷懶”地給“紙堆”直接設(shè)計了一個整體的切圖(上圖左),而由于背景墻的頂部有個吊燈,所以這些紙堆只能放在屏幕中間,列表的滑動方式也只能是橫向滑動,加上肯定要放在底部才能用起來順手的“新增”按鈕,首頁的布局基本就確定下來了(上圖右)。
實現(xiàn)真實的光照效果
最讓我興奮的是我發(fā)現(xiàn)了如何讓整個首頁突破靜態(tài)PNG切圖擬物的局限,達到真實光照效果的辦法。我用通道+筆刷做了一個半透明的陰影覆蓋層(上圖中間),放在場景圖層的最頂部。這樣,滑動到屏幕兩端的紙堆就會逐漸被陰影所吞噬,而中間不受陰影層所影響的部分,在對比之下看起來就像是被吊燈照亮了(上圖右)。
用“開關(guān)燈”進一步強化光影
最后,我想著,既然強調(diào)了光影的變化,不如再做極致一些吧。于是我花了一兩天的時間,給首頁設(shè)計了開/關(guān)燈的交互效果?!竧he App」在未來很多用戶的手上是個很隱私的東西,沒人愿意在「the App」里寫上“我很懦弱,從今天開始我要采用××辦法改變這個現(xiàn)狀”然后被其他人隨意翻閱。所以,關(guān)燈的狀態(tài)剛好可以做成鎖定界面,如果用戶設(shè)置了密碼,那么這個界面就會顯示密碼盤,解鎖之后才能開燈。
開/關(guān)燈對適配來講是一個比較繁瑣的過程,我的辦法是,首先在PS設(shè)計稿里把所有圖層重新整理一遍,變成最精簡的結(jié)構(gòu)。然后從這個圖層結(jié)構(gòu)中去思考:我們在App需要把圖層分成幾個大組,才能最方便地實現(xiàn)開關(guān)燈的效果,而且能有最高的擴展性,隨時能加進去新的按鈕或內(nèi)容。
提煉出首頁的4個UI大組
于是,如上圖,我整理出了從下到上的:背景、內(nèi)容、壓蓋、懸浮,這四個大組。開關(guān)燈能通過這些大組的UI響應(yīng)來實現(xiàn),后續(xù)要加進去什么內(nèi)容或按鈕,也能根據(jù)它的特點來加到“內(nèi)容”或“懸浮”這兩個組里,因為從情境上來說,所有真實擬物的按鈕或入口,都應(yīng)該加在“內(nèi)容”這個組里,這個組在“光影”組的下層,所以會受到光影的影響,看起來就能跟整個場景融為一體;而所有附加功能的按鈕或入口,都應(yīng)該放在“懸浮”這個組里,這個組的內(nèi)容會漂浮在整個空間之上,不受光影的影響,以強調(diào)它們是超越這個空間的,獨立的存在。
最后,用表格的方式來標注它們的排列順序,以及顯示/隱藏的細則(實際上,從開發(fā)來講,這就是規(guī)范了每個UI組對于開/關(guān)燈“廣播”所響應(yīng)的“態(tài)”),然后再標準化所有切圖文件的命名,這樣,在整理首頁交互思路之余,開關(guān)燈效果的文檔也就順便做好了。
我之所以強調(diào)設(shè)計原型的方法不要“反人類”,是因為我見過很多人設(shè)計原型的方法的確是反人類的(至少在我看來覺得很心痛,也許他們有自己的思維方式這也說不準),這里的“反人類”包括兩方面,一個是違背你自己設(shè)計原型的最佳思考方式,另一個則是違背程序員開發(fā)的工作方式。
Axure是我見過的最反人類且最普遍的原型設(shè)計方式,之所以說是“設(shè)計方式”而非“工具”,是因為它有它作為一個工具的合理性(例如,用它來說服投資方、不懂產(chǎn)品的上司,設(shè)計交互,在原型完成之后做定稿,或進行虛擬迭代),但如果用它來從零設(shè)計原型,我覺得這種行為就像是用十字螺絲刀來擰一個內(nèi)五角螺絲——心累。首先我講講Axure原型從程序員開發(fā)的角度來看為何反人類:
Axure原型跟直接截圖沒區(qū)別
假設(shè)這張瀑布流效果頁是產(chǎn)品經(jīng)理(或交互設(shè)計師)用Axure做給前端工程師的。它很美,沒錯,然而這跟你直接去其它網(wǎng)站截個圖給程序員,然后說“照這樣做”沒什么太大區(qū)別,實際上這張圖本來就是瀑布流鼻祖Pinterest的截圖。
(1/2)用Visio定義瀑布流的“零件”
用Visio做就不同了,見上圖,首先來定義瀑布流的單個“零件”。實際上還有一些圖中沒有說清楚的細節(jié),例如文字位如果超過5行要怎樣設(shè)計“展開”方式,以及整個“零件”的熱區(qū)構(gòu)成……這里只是大致的示例。
(2/2)用Visio定義瀑布流的布局
接著用第二張圖來定義布局(上圖)。同樣這只是個示意,很多細節(jié)沒辦法寫出來,且只局限于前端,但意思已經(jīng)表達清楚了。當你拿著這兩張圖,配上UI設(shè)計師做出來的UI說明圖、切圖,前端(或重構(gòu))工程師就能很輕松地一次性交給你想象中的頁面,也無需你那么辛苦地跟進工作。原型設(shè)計最有效的方式并不是去“直接呈現(xiàn)你想要的東西”,而是“用模塊來重組產(chǎn)品,用最抽象的方式來概括全部的細節(jié)”。
而對于設(shè)計原型的人而言,Axure同樣是反人類的,因為它違背了正常人類的思維過程。為什么很多人私底下講話妙語連珠,大會上卻變成口吃?因為私底下這些人講話是“發(fā)散”的,想到什么就說什么,信手拈來;但是在大會上,他們不敢這樣隨意講話,把嘴邊的靈感都咽了下去,硬生生地用一些高大上的“首先呢”、“其次呢”、“第一點”、“既要……又要”這種句型來套路自己,把自己套路成了啞巴,這種扼殺靈感的思維方式就是“歸納”的。
Axure的使用方法就是“歸納”的,當你用它設(shè)計原型時,你就很容易變成思維上的“口吃”。它一上來就要求你做一個頁面,緊接著做下一個,緊接著就要確定這兩個頁面之間的關(guān)聯(lián)。但事實上,頁面、模塊和鏈接的成型是一個反復(fù)試錯的過程,在Axure里,你一旦做出幾十個頁面,再想變動其中的大模塊就太難了,約等于重做。它讓你喪失了不斷推翻自己原型設(shè)計的勇氣,變得害怕靈感。
而用Visio設(shè)計原型則能做到“發(fā)散”和“歸納”自由切換,用它做原型時,我能像個精神分裂患者一樣,一會切換成磕了藥的藝術(shù)家狀態(tài),在畫布上隨意涂鴉我的靈感;一會又能切換成有點精神潔癖的理科男狀態(tài),給剛才那個人收拾戰(zhàn)場,把那些亂七八糟的靈感整理成規(guī)整的文書——做原型最好的方式就是精神分裂。
自由繪制靈感草圖
見上圖,實際上,初期階段的原型比上圖的要復(fù)雜很多倍,到處都是密密麻麻的靈感和連線。這里為了你看得清上面的字,我就把它簡化了一下。每當我想到一個新點子,我只需要畫一個方塊,然后在方塊里寫上幾句話用來備忘;當我想細化它時,我就把這個方塊做成一個稍微詳細一點的頁面,然后用箭頭把它連接到某個地方。
我無需站在多么宏觀的角度去思考要怎么設(shè)計頁面,我只是盯著這個畫布,一遍又一遍地假設(shè)我是用戶,順著箭頭走,看看到了哪一步會遇到什么問題,被什么東西卡住,或是需要什么新的功能。做Visio原型是我在整個「the App」開發(fā)中最享受的一個環(huán)節(jié),我會聽著FreeTEMPO喝著咖啡來做這件事,可惜它占整個開發(fā)的時間并不長,只怪它效率太高了。
輕松調(diào)整流程
如果你用的是Axure,當你流程設(shè)計有問題時,你需要把所有關(guān)于這一步的入口、出口都修改掉,隨著原型詳細度不斷增加,可能每一次修改都會耗費你幾十分鐘甚至一天的勞動。然而在Visio設(shè)計圖中,一切都是二維展開的,你需要修改的功能,有什么箭頭指向它,以及它的箭頭指向哪些模塊,一切都一目了然,只需拖動幾下鼠標就能調(diào)整整個流程,一次大改動一般只耗費幾分鐘的時間。
做原型最緊要的就是得比它高一個維度,四維空間(空間4維,不是3維空間+1維時間)的人看人類,五臟六腑都是展開的,所以看你一眼就知道你昨晚吃了什么。目前人類的App都是二維的,做在Axure里,你也只能困在那個二維空間里去探索,但做在Visio里,你就能一眼看到它的全局,因為在某個維度中去看低一個維度的東西,它就是展開的。
初具規(guī)模的App原型
一眨眼,整個原型變成了上圖的樣子(上圖只是案發(fā)現(xiàn)場還原,因為當時的原型已經(jīng)直接被繼續(xù)細化了),一個有大概流程的原型稿。你可以注意到,原型已經(jīng)被若干個灰色的“容器”分割成了幾塊,這樣做的原因在于,當你開始細化某個模塊時,它的內(nèi)容就會越來越多,內(nèi)部的箭頭和連接線也越來越多,如果不用容器裝起來,那么內(nèi)部、外部的連接就會混雜起來,讓你難以專注。
在專心設(shè)計某個容器內(nèi)部的功能時,我通常會把整個容器拖開老遠,跟其它部分完全隔離開,以便我能不被其它模塊分心。在這個階段,由于畫布已經(jīng)被撐得很大,所以我強烈建議你買一個帶有橫向滾輪的鼠標,Visio沒有類似于PS的手型工具以便用來自由拖拽畫布(只能點擊鼠標中間來拖拽,但操作體驗不流暢),橫向滾輪+縱向滾輪可以描述任意一個二維空間向量,讓你在越來越大的原型畫布上自由沖浪。
用模塊來拆分原型
當原型設(shè)計到這一步的時候,整個格局已經(jīng)大致確定下來,不再需要每天給它做大手術(shù)了。此時如果我繼續(xù)在一整張畫布上作圖,就會比較難受(卡頓,加上頻繁的縮放和跳轉(zhuǎn)),那么這時候就可以把原型根據(jù)模塊來分成若干個頁面。如上圖,首頁的原型被我單獨分成一個頁面,用5個橙色的方塊來代表箭頭對應(yīng)的模塊,寫上“詳見××模塊”。
具體模塊之:閱讀模塊
見上圖,這是原型的其中一個具體模塊——“閱讀”模塊,你看到的這個示例是「the App」早期的一個原型,當時的設(shè)計跟現(xiàn)在的有所不同,但它挺適合用來體現(xiàn)模塊化思維。
(1/2)從后端而言,兩種閱讀內(nèi)容是不平等的
如上圖,從后端來講,“感悟”包括“未淬火”和“已淬火”兩類,而“信念”則應(yīng)該定義為:個數(shù)∈[1,限定額]的若干個“已淬火感悟”的“組”——它們并不是平等的。但前端設(shè)計上它們有很多類似的地方。
(2/2)從前端來看,兩者有很多共同點
如上圖,左邊是“感悟”的閱讀頁,右邊是“信念”的閱讀頁,它們閱讀區(qū)域、刪除、移動功能都是相近的,只不過是有一些細節(jié)的區(qū)別。
合并同類項
模塊化的設(shè)計思維也好,面向?qū)ο蟮拈_發(fā)思維也好,其實都是合并同類項。
在用Visio做原型時,當我發(fā)現(xiàn)這兩個頁面有很多類似的地方,我就用鼠標把它們拖到一起,然后試著合并同類項。如上圖,我把這兩個頁面的閱讀模塊擺到左右兩邊,把其中雷同的模塊隱掉,放到中間的黑色容器來統(tǒng)一描述,就像一個夾心餅干。前端工程師拿到這頁文檔,只要開發(fā)中間黑色的餡兒就行了。
用一個流程圖來表達兩個功能
而至于“刪除”功能就更簡單了,畫上一個流程圖,它就是一個直接能翻譯成代碼的狀態(tài)機。不管刪除的是感悟還是信念,實際上只是一開始走的支路不同,而且這些支路僅限于前端展示,當狀態(tài)機走到后端層面時,其實處理的邏輯都是完全一樣的。
上面列舉的這兩件事,是把“信念”和“感悟”在原型層面能看到的一些相同之處歸納起來,讓它們共享一些模塊,但這種抽象能不能更高級一些?我發(fā)現(xiàn)一個現(xiàn)象:雖然“信念”在概念上是“感悟”的組,它們級別不同,但是在整個原型中它們很多的處理邏輯都相同,例如:移動、列表展示、打孔……這是因為在視覺設(shè)計上,它們只是不同類型的“紙”,必然會有很多雷同的地方,所以,何不直接把它們劃分到一個“類”?
《黎明殺機》
一個很火的恐怖游戲《黎明殺機》最近出了個很大的BUG,各大平臺主播都在玩這個BUG,玩出了很多搞笑的效果。首先說下這個游戲是怎么玩的,很簡單,四個玩家扮演“逃生者”,一個玩家扮演“屠夫”。逃生者被屠夫抓住掛在樹上就會死,要順利逃出去你必須跟屠夫玩躲貓貓,偷偷修好5個發(fā)電機以便開啟逃生門逃走。
屠夫一共有6種,他們的能力都是固定的,分別是能在草叢里偷偷放捕獸夾來陰人的“夾子屠夫”;手里拿著電鋸,電鋸拉開就能高速沖到你面前的“電鋸?fù)婪颉?敲一敲鈴鐺就能隱身的“小叮當”;喜歡在地上畫個圈圈詛咒別人的“李奶奶”;《月光光心慌慌》的男主角“殺人鬼”和擁有瞬移能力的“護士”。
而作為逃生者,他們手上可以拿一些道具,例如可以用來晃瞎屠夫幾秒鐘的手電筒,或是可以用來包扎傷口的急救包。
于是奇怪的事情發(fā)生了,有一天,某個國外玩家發(fā)現(xiàn)了一個BUG:通過鬼畜地在“屠夫”和“逃生者”兩個界面之間切換和點擊,“逃生者”手上竟然可以拿到“電鋸?fù)婪颉钡碾婁?,而如果這個人被一個“夾子屠夫”殺死了,夾子屠夫竟然可以撿起這把電鋸,右鍵拉動電鋸就能像電鋸?fù)婪蛞粯右?0km/h的速度沖刺鋸翻逃生者,還能拿到電鋸?fù)婪驅(qū)S械摹半婁彌_刺”獎勵分數(shù)。
雖然這個BUG很重大,不應(yīng)該出現(xiàn),但是從這里可以看到《黎明殺機》通過對“類”的精妙劃分而實現(xiàn)的高效開發(fā)(對于一個只有20人左右的小團隊,能制作出占據(jù)Steam榜首的PC游戲,高效是必須的)。從玩家角度來看,不同的屠夫的能力都是固定的,但是從這個BUG可以看出,實際上這個“能力”都是由道具所賦予的。
電鋸?fù)婪蛑岳婁徔梢詻_刺,并不是因為這個屠夫比其它屠夫多了一些專有代碼,而是“電鋸”這個道具本身就能賦予一個屠夫“高速沖刺”的能力;電鋸沖刺的分數(shù)獎勵,也并不是由其它模塊來負責具體的計算,而是這個道具在使用時就會自動計算分數(shù),然后把結(jié)算出來的分數(shù)“通知”給那個統(tǒng)一的計分模塊;而逃生者手上可以拿電鋸,屠夫可以像逃生者一樣從地上撿起它則說明,所有的道具,不論是逃生者的急救包還是屠夫的電鋸,它們都有很多共享的屬性,例如:可以被撿起來、可以裝備在手上、點右鍵可以發(fā)揮它的功能、屏幕左下角會用圖標顯示這個道具的狀態(tài)……
《黎明殺機》對“類”的劃分
如上圖,實際上,在《黎明殺機》中,所有的道具都有一個通用的模板,這個總的模板就是“父類”,在此基礎(chǔ)上細分下去,形成各有特點的屠夫和幸存者道具的“子類”,直到最后,變成實實在在的,某個具體的可以拿在手上的“對象”,例如工具箱和電鋸。
“類”:NOTE
回到「the App」原型設(shè)計,經(jīng)過跟iOS開發(fā)者智超的討論,我們決定把“感悟”和“信念”設(shè)計成同一個叫做Note的“類”(上圖),有了這個類的劃分,我就能進一步去整合Visio原型中除了上面提到的“閱讀”和“刪除”之外的模塊了。
Visio原型制作完之后,我把它們轉(zhuǎn)移到OneNote之中,專門建立了一個描述“Note”的分區(qū),按照類的結(jié)構(gòu)來建立不同層級的頁面,然后把做好的Visio圖形粘貼到各個頁面里……其它的模塊也都用模塊化的思路整理到OneNote里,到了這一步,一個完整的App文檔就差不多搞定了。
同步這個OneNote文檔給程序員,給他們分配閱讀權(quán)限,我們就能協(xié)同工作了?!竧he App」除了設(shè)計素材都是正版購買之外,所有軟件也都是正版購買的,所以協(xié)同工作對我來講只是點一下“保存到云”。正版是一種生活方式,每個月我大概花500月費來供養(yǎng)我整個電腦的所有軟件和服務(wù),這是愛的供養(yǎng),這讓我從來不需要到處去找破解版軟件,我的電腦從不會中毒,我重裝電腦之后所有軟件的云端設(shè)置都會自動還原,我的所有資料也一直在付費云端增量更新,我從不擔心它們會丟失,每天我一打開電腦就能安心工作。
Onenote文檔中不光得有Visio原型,還需要很多的附加文檔,從性質(zhì)上看,主要包括“宏”、“系統(tǒng)文檔”和“集中說明”。它們并不是我一開始就明白要去單獨做的,而是做原型的過程中,遇到了用Visio無法說清的問題,或是即使說清了,也會讓Visio圖形變得太過臃腫,于是就自然而然地想到要另起爐灶了。
(1/3)附加文檔:宏
(1)首先說“宏”
“宏”一般用來歸納那些App中零散出現(xiàn)的,但是不便于統(tǒng)一成某個模塊的東西。上圖是一個用來歸納「the App」中所有后期可能要變動的數(shù)值的Excel表格,例如,打孔器的冷卻時間是多少個小時?打一次孔的加分是多少?每個信念最多能容納的感悟數(shù)量是多少?……這些數(shù)值我無法一次確定下來,需要在試用過程中不斷調(diào)整,顯然,如果我今天在A文檔里去改數(shù)值α,明天在B文檔里去改數(shù)值β,我和智超之間至少有一個人會瘋掉的。
當我寫一個宏文檔,智超就會在代碼里寫一個宏,在這個宏里他就能直接修改這些數(shù)值,并能自動應(yīng)用到所有關(guān)聯(lián)的代碼,只需要幾秒鐘就搞定了。而在后期測試的時候,我顯然不能像數(shù)值中要求的那樣:一個感悟?qū)懴聛碇螅?小時才能淬火——我只有1分鐘的耐心。那么很簡單,我在表格中多加入一列“測試數(shù)值”,寫上“1分鐘”,到時要個測試版就行了。
(2/3)附加文檔:系統(tǒng)文檔
(2)“系統(tǒng)文檔”
Visio原型比較善于表達前端的流程或狀態(tài)機的邏輯,而如果你想要詳細闡述某個系統(tǒng)的原理就比較難了?!竧he App」中“文件夾”這個概念,在Visio中主要描述的是看得到的部分,而看不到的細節(jié)就要用Word文檔來描述了(上圖左),例如:文件夾是否可以重名?是否可以為空?兩個欄目的文件排序規(guī)則分別是什么?這些東西在Word文檔中用論文的結(jié)構(gòu)可以很輕松地交代明白。
「the App」的文件夾都有封面,這些封面包括3種,第1種是特殊文件夾的固定封面(包括不設(shè)置封面時的默認代圖),第2種是用戶自己拍攝或?qū)胝掌?,?種是系統(tǒng)自帶的封面。那么這就帶來一些問題,例如:固定封面是否屬于系統(tǒng)自帶封面可供選擇?用戶自己拍攝的照片被替換掉之后,是否繼續(xù)保存?……
這些問題很難用簡潔的文字來概括,所以我做了一些“偽數(shù)據(jù)結(jié)構(gòu)”(例如上圖右),雖然這個數(shù)據(jù)結(jié)構(gòu)設(shè)計得很外行,直接采用可能會引起手機爆炸,但文檔的意義在于溝通,偽數(shù)據(jù)結(jié)構(gòu)的表達方式在這里能用最少的廢話講清楚我要干什么,那么它就是最好的溝通方式。同理,你甚至可以用偽代碼的方式來描述一些文字不便形容的邏輯,只要程序員能輕松理解到跟你完全一樣的想法,何樂而不為呢?
(3/3)附加文檔:集中說明
最后一種情況是“集中說明”,顧名思義,「the App」中很多東西是零散的,不便于在主文檔中出現(xiàn)的。例如左圖歸納了App中所有出現(xiàn)的文本輸入窗口的具體屬性,包括它們的窗口名、初始文本……這樣我在原型中就不必列舉每個文本輸入頁面的具體屬性;再例如右圖歸納了App中所有教程的出現(xiàn)時機、地點、展現(xiàn)方式,同理,這些凌亂的東西根本不應(yīng)該出現(xiàn)在主文檔不是嗎?
【未完待續(xù)……】