成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

“洋蔥”式App開發(fā):為什么你的軟件項(xiàng)目越來越冗雜?

移動(dòng)開發(fā)
開發(fā)項(xiàng)目的初衷很美好,功能需求你都理得特別清晰。可為什么在實(shí)際開發(fā)過程中,你的軟件項(xiàng)目總是需要更改和調(diào)整?最終,添加的功能越來越多......要知道,看上去很理所當(dāng)然的功能列表,實(shí)際做下去之后你就會(huì)發(fā)現(xiàn)事情沒那么簡(jiǎn)單。

編者按:開發(fā)項(xiàng)目的初衷很美好,功能需求你都理得特別清晰。可為什么在實(shí)際開發(fā)過程中,你的軟件項(xiàng)目總是需要更改和調(diào)整?最終,添加的功能越來越多......要知道,看上去很理所當(dāng)然的功能列表,實(shí)際做下去之后你就會(huì)發(fā)現(xiàn)事情沒那么簡(jiǎn)單。本文編譯自Medium上原題為《Your app is an onion: Why software projects spiral out of control》的文章。

[[226985]]

最開始,你的想法很美好。你會(huì)雇傭一個(gè)開發(fā)者來實(shí)現(xiàn)自己的創(chuàng)業(yè)點(diǎn)子。但幾乎每一周,項(xiàng)目似乎都需要進(jìn)行調(diào)整。各種功能開始涌入,范圍越鋪越大。

就好像項(xiàng)目被賦予了生命,而它正在試圖毀掉你的生活。

[[226986]]

這一切究竟是怎么發(fā)生的?你雇傭的開發(fā)者不靠譜嗎?還是你沒能做好項(xiàng)目管理?抑或是創(chuàng)意自始至終就很糟糕嗎?

這都有可能。但是有一個(gè)核心誤區(qū)通常在一開始就注定了項(xiàng)目最終會(huì)失敗。

我們假設(shè)自己的項(xiàng)目是由功能組合定義而成的,我們會(huì)將這些功能記在紙上。偶爾再添加一些功能,偶爾又會(huì)減掉一些。但你仍然能一眼看到項(xiàng)目的范圍。

但是,這種假設(shè)是錯(cuò)誤的。

你的項(xiàng)目并非存在于二維空間里,它不是一張紙。它有自己的深度。

軟件的每一個(gè)功能都可以被一層一層得剝開。事實(shí)上,如果我傾向于做標(biāo)題黨的話,那我會(huì)直截了當(dāng)?shù)帽硎灸愕膽?yīng)用就是個(gè)洋蔥。讓我來解釋下這到底是什么意思吧。我會(huì)告訴你,為什么你在將自己的應(yīng)用一層一層剝下時(shí),它會(huì)讓你流淚不止。

終結(jié)所有圖書館的圖書館

我們來聊點(diǎn)具體的例子吧。給我推薦一個(gè)想法吧。

人們通常想看的書,附近的圖書館都沒有。但其他地區(qū)的人可能會(huì)有。因此,這款應(yīng)用可以讓人們發(fā)送圖書需求,而有這本書的人則會(huì)作出響應(yīng)。每一筆交易,我們都會(huì)進(jìn)行抽成。

這個(gè)想法,很有才吧!

我知道,難道不是嗎?功能列表非常簡(jiǎn)潔明了:

“洋蔥”式App開發(fā):為什么你的軟件項(xiàng)目越來越冗雜?

現(xiàn)在是時(shí)候把產(chǎn)品說明書發(fā)給開發(fā)者,然后開始給公司考慮一個(gè)炫酷的名字了。kaBooki?lib.rari.ly?還是reddit?

欸?別急阿。讓我們?cè)偕晕⑸钏家幌掳伞8螞r,已經(jīng)有一個(gè)軟件叫reddit了。

讓我們帶著下述這些問題來細(xì)究一下你的想法,看看想法最后究竟會(huì)發(fā)展成什么樣子吧。

用戶如何交易呢?他們是見面的時(shí)候一手交錢、一手交貨還是說通過應(yīng)用來付款呢?

恩,他們應(yīng)該在應(yīng)用上利用信用卡進(jìn)行付款,這樣我們才能抽成啊。

他們?cè)撊绾伟l(fā)送圖書需求呢?我的意思是,他們?cè)趹?yīng)用上究竟要做些什么呢?是填寫一個(gè)包含書名和作者信息的開放式表格嗎?

哦......他們應(yīng)該在應(yīng)用上搜索圖書,然后挑選自己感興趣的。

好的,那么我們就需要建立一個(gè)圖書數(shù)據(jù)庫了。

我想應(yīng)該是這樣。

那實(shí)際上,究竟什么是圖書需求呢?賣書的人能夠看到所有的書籍需求列表嗎?還是說我們需要像Uber或是Thumbtack那樣發(fā)送通知告知這些賣書的人嗎?

是的,我們需要給那些有書的人發(fā)送需求通知。

那么,賣書的人需要在軟件里填寫自己要賣的書目信息嗎?

恩,是的。

那么書該如何完成交接呢?是用戶自行交接,還是我們幫忙處理配送問題呢?

我們負(fù)責(zé)配送。

那你需要一個(gè)系統(tǒng)告訴你哪些書需要取貨,然后要送往哪里。我想你的司機(jī)應(yīng)該會(huì)想知道最短路線怎么走吧,對(duì)嗎?

好吧,這樣可不行。那不如這樣吧?讓用戶相互之間郵寄圖書。

那么,我們就這樣將收貨人的地址信息告知發(fā)貨人?那我們?nèi)绾谓鉀Q運(yùn)費(fèi)問題呢?

實(shí)際上,你知道的。這些用戶都需要靠得近一些。他們可以上門取貨,順便還能認(rèn)識(shí)個(gè)新朋友,這樣不好嗎?

所以,我們需要匹配距離相隔較近的用戶。那他們?nèi)绾握业綄?duì)方呢?應(yīng)用是否還需要內(nèi)嵌一個(gè)實(shí)時(shí)地圖,這樣才能安排見面呢?

好吧,這樣也行。就這么做吧。

我們需要設(shè)定圖書的價(jià)格嗎?還是說買賣雙方自行商定?

他們自己商定吧,然后確定一個(gè)價(jià)格。

他們?nèi)绾未_定呢?我們是否要在應(yīng)用里嵌入一個(gè)聊天功能?

他們可以直接打電話進(jìn)行聯(lián)系啊。

好吧,那我們是否要發(fā)送短信來確認(rèn)號(hào)碼的有效性呢?如果......好了,說到這兒你就應(yīng)該懂我的意思了。我們還可以這樣無休止得談下去。

別,別再就此問題繼續(xù)聊下去了。

那不妨現(xiàn)在再來看看功能列表長什么樣吧。

“洋蔥”式App開發(fā):為什么你的軟件項(xiàng)目越來越冗雜?

每一行列出來的內(nèi)容都可以多次進(jìn)行延伸。我們只不過剛剛把洋蔥剝開了一層皮,結(jié)果就已經(jīng)變成這樣了。

現(xiàn)在,你可不要哭啊。

到底發(fā)生了什么呢?

我們要弄清楚哪些原因不會(huì)導(dǎo)致功能爆炸。

這也并非是我們常說的功能蔓延。

功能蔓延指的是產(chǎn)品不斷添加新的功能。如果你看一下我們最終的功能列表,你會(huì)發(fā)現(xiàn)每一條功能的存在都符合最初的想法設(shè)定。

而這也無關(guān)乎任何技術(shù)考量。

舉個(gè)例子,什么是最適合的聊天系統(tǒng)架構(gòu)呢?最容易整合的支付平臺(tái)是什么呢?

我們?cè)谶@兒不會(huì)就這個(gè)問題多加贅述。一個(gè)優(yōu)秀的開發(fā)人員會(huì)把各式各樣的技術(shù)方案都告知給你。但是他無法幫你決定軟件需要什么功能。

這也無關(guān)什么市場(chǎng)考量。

人們需要這樣一個(gè)產(chǎn)品嗎?在用戶數(shù)量很少的情況下,你該如何誘使早期用戶報(bào)名呢?用戶愿意為此項(xiàng)服務(wù)付費(fèi)嗎?

這類問題必須要和想法的驗(yàn)證、產(chǎn)品市場(chǎng)組合的確定以及定價(jià)策略息息相關(guān)。再重申一下,這些問題都非常重要。不過,這也并非是功能列表爆炸的原因。

這與全球變暖或是牙仙也沒有任何聯(lián)系。你是打算告訴我項(xiàng)目變成洋蔥的原因嗎?還是說你打算告訴我每一條非原因項(xiàng)嗎?

你可真無趣。事情其實(shí)是這樣的。

我們從根本意義上就曲解了復(fù)雜性的運(yùn)作原理。

我們?cè)疽詾槊恳豁?xiàng)功能的復(fù)雜程度就和我們一開始描述得一樣。嘿,也許程序員是要花些功夫去寫代碼的,但是用商業(yè)術(shù)語中的幾個(gè)詞,你就可以輕松描述出產(chǎn)品的功能。比如說“用戶用Y來做X這件事”。不是嗎?

可這種觀點(diǎn)是錯(cuò)誤的。

軟件功能更像是分形

你離得越近去看,它們就能呈現(xiàn)出更多的細(xì)節(jié)。

洋蔥是分形嗎?

不,我只是換了個(gè)隱喻而已。繼續(xù)說吧。

關(guān)于功能,我們一開始是基于一個(gè)大的藍(lán)圖去進(jìn)行描述的。但是,當(dāng)開發(fā)人員在開發(fā)這款應(yīng)用時(shí)候,抑或是用戶或你本人使用這款應(yīng)用時(shí),其實(shí)它是在一個(gè)較小的規(guī)模下進(jìn)行的。它是一步一步在軟件內(nèi)完成的。每一個(gè)步驟,你都會(huì)遇到一些問題。為了解決這些問題,你需要重新規(guī)劃這一步驟、添加新的步驟或是添加全新的功能。

這就像是規(guī)劃一條從你家到辦公室的路線。看著地圖,這段行程似乎就是兩點(diǎn)連起來的一條直線。

“洋蔥”式App開發(fā):為什么你的軟件項(xiàng)目越來越冗雜?

但當(dāng)你以更小的比例去看這條路線時(shí),你會(huì)發(fā)現(xiàn)自己原先規(guī)劃的那條直線并不符合城市道路網(wǎng)。你會(huì)遇到交通站、高地或者道路阻塞。基于你是步行、騎車還是駕車,你可能需要規(guī)劃一條不同的路線。

開發(fā)軟件也與之類似。當(dāng)你離得越近去看,你就可以更為詳細(xì)地意識(shí)到你的解決方案是什么樣子的。

那可真是太棒了,一路上都是各種細(xì)節(jié),這還都是我需要去考慮的。這是不是意味著我的產(chǎn)品永遠(yuǎn)都完不成了?

是也不是。之所以會(huì)顯得復(fù)雜,原因在于我們?cè)谝婚_始對(duì)功能進(jìn)行了描述,這通常是要實(shí)現(xiàn)的目標(biāo)。之后,我們就會(huì)將其放大處理,一步步設(shè)計(jì)解決方案來實(shí)現(xiàn)目標(biāo)。當(dāng)我們將細(xì)節(jié)放大,我們就會(huì)發(fā)現(xiàn)事情變得愈加復(fù)雜了。

復(fù)雜本身不是問題。問題是我們選擇發(fā)現(xiàn)復(fù)雜性的方式。我們將功能的規(guī)格說明書遞交給開發(fā)人員。幾周之后,我們會(huì)拿到應(yīng)用的初始版本并且進(jìn)行測(cè)試。這是我們第一次一步一步操作整個(gè)軟件,然后我們就發(fā)現(xiàn)很多的漏洞。我們會(huì)將修改意見記錄下來,然后將其發(fā)送給開發(fā)人員,讓他開發(fā)第二版應(yīng)用。

“洋蔥”式App開發(fā):為什么你的軟件項(xiàng)目越來越冗雜?

在整個(gè)過程的最后,經(jīng)過反復(fù)幾次的修改調(diào)整,我們得到了一個(gè)較好的解決方案。問題在于,開發(fā)周期實(shí)在是太長了。每一個(gè)環(huán)節(jié)都需要數(shù)周或數(shù)月時(shí)間來完成,

但是,要發(fā)現(xiàn)應(yīng)用存在的內(nèi)部復(fù)雜性,這又是必要之舉。

反反復(fù)復(fù)和開發(fā)人員進(jìn)行溝通來發(fā)現(xiàn)這種復(fù)雜性,耗時(shí)還燒錢。

我們希望這樣做:

 

“洋蔥”式App開發(fā):為什么你的軟件項(xiàng)目越來越冗雜?

我們想要在寫代碼之前就能盡可能多得發(fā)現(xiàn)這種復(fù)雜性。我們想要?jiǎng)兿?ldquo;洋蔥”的皮來發(fā)現(xiàn)一個(gè)更可靠的功能清單,最好能以一種快速且便宜的方式。

我們并不想來回修改應(yīng)用,而是想要反復(fù)修改軟件規(guī)格書。

我們想要從這個(gè)流程:

“洋蔥”式App開發(fā):為什么你的軟件項(xiàng)目越來越冗雜?

變?yōu)檫@個(gè)流程:

“洋蔥”式App開發(fā):為什么你的軟件項(xiàng)目越來越冗雜?

為了高效做到這一點(diǎn),我們需要兩個(gè)東西。首先,我們需要一種方式來呈現(xiàn)功能列表,以便之后反復(fù)修改調(diào)整。第二,我們需要一種高效的方式來審視這份功能列表。

我們來聊聊該如何實(shí)現(xiàn)這兩點(diǎn)吧。

規(guī)劃功能

我們不必再用商業(yè)術(shù)語來考慮這一點(diǎn),而是要把自己當(dāng)做是一個(gè)用戶去思考功能需求。在這個(gè)層面上,我們就需要應(yīng)對(duì)軟件復(fù)雜性問題了。

首先,列出用戶目標(biāo)。用戶使用你的app要做什么呢?

接下來,你需要規(guī)劃用戶流程。以用戶的角色確認(rèn)實(shí)現(xiàn)目標(biāo)所需要的每一個(gè)步驟,記錄下這些內(nèi)容。

我們要建立一張用戶使用應(yīng)用的流程圖。

有很多種方式可以實(shí)現(xiàn)這一點(diǎn)。你可以簡(jiǎn)單做一個(gè)所需步驟的略圖。你可以針對(duì)用戶看到的每一個(gè)界面進(jìn)行版面設(shè)計(jì)。你還可以在紙上或是用軟件畫出流程圖。

 

“洋蔥”式App開發(fā):為什么你的軟件項(xiàng)目越來越冗雜?

圖中是一種版面設(shè)計(jì)。

 

不管你選擇哪種方式,確保優(yōu)先考慮速度問題。除非你是Photoshop領(lǐng)域的專家,否則還是放棄使用軟件,拿起紙筆來干活吧。

確保略圖中能呈現(xiàn)出每一個(gè)界面。舉個(gè)例子,如果一個(gè)特定的步驟需要在屏幕上以多個(gè)界面呈現(xiàn)出來,那你就需要將該步驟分開。我們希望能梳理出更多的細(xì)節(jié)。

此過程應(yīng)該能揭示出應(yīng)用中存在的一些復(fù)雜性問題了。

現(xiàn)在,我們要開始從更深層面來挖掘了。

對(duì)一切事情保持疑問

像我們之前問的那些問題未免太過寬泛了。這很難找到切入點(diǎn)。

首先,我列出了一些適用于大多數(shù)軟件的常見問題。這些問題會(huì)被分為四大類,你可以將其當(dāng)做是模板來提問自己的軟件略圖。

仔細(xì)觀察略圖中的每一個(gè)步驟,拿列表上的每一個(gè)問題問問自己。如果答案呈現(xiàn)出了新的步驟,就將其添加在你的軟件略圖里。

用戶輸入:

這些問題是用戶在輸入信息到產(chǎn)品中時(shí)候會(huì)碰到的。

  • 用戶會(huì)輸入什么樣的信息?
  • 輸入的是信息是開放式的還是交互式的?
  • 開放式信息舉例:輸入自由格式文本內(nèi)容、選擇圖片進(jìn)行上傳或錄制視頻。
  • 交互舉例:往搜索框輸入文本來顯示可選結(jié)果、在地圖上選擇地址、從預(yù)定義選項(xiàng)組合中進(jìn)行選擇。
  • 是否有些輸入的信息應(yīng)該被當(dāng)做是無效的呢?應(yīng)用又將如何處理呢?
  • 是否有無源輸入呢?最常見的例子:通過GPS 進(jìn)行用戶定位。
  • 產(chǎn)品需要獲取新用戶 (https://www.useronboard.com/)的什么信息呢?用戶后續(xù)可以對(duì)信息進(jìn)行修改嗎?

向用戶呈現(xiàn)的信息

如果之前那部分算作是信息輸入,那么這部分應(yīng)當(dāng)是信息輸出。

  • 屏幕上哪些信息會(huì)被呈現(xiàn)給用戶?
  • 信息是以何種方式呈現(xiàn)的?比如說:文本、圖片、地圖、列表或圖表。
  • 這些信息需要以某種形式進(jìn)行篩選嗎?比如說:距上次使用時(shí)間、用戶距離、相關(guān)性等。
  • 產(chǎn)品是否可以主動(dòng)和外界進(jìn)行交流?比如說:郵件、推送通知、短信。

各部分之間的交互

這部分問題是關(guān)于軟件體驗(yàn)中各個(gè)部分之間的交互。

  • 用戶會(huì)彼此之間進(jìn)行交互嗎?比如說:短信、添加好友、點(diǎn)贊或是給其他用戶內(nèi)容加標(biāo)簽。
  • 用戶是否會(huì)和外界服務(wù)發(fā)生交互呢?比如說:付費(fèi)服務(wù)、物流追蹤、社交媒體賬戶登錄。
  • 產(chǎn)品是否會(huì)和外界服務(wù)發(fā)生交互呢?比如說:位置查找服務(wù)、天氣應(yīng)用程序接口、社交網(wǎng)絡(luò)(“你的朋友XXX剛剛加入了!查看他們的信息!”)

企業(yè)家功能

這部分問題是關(guān)于企業(yè)家對(duì)于產(chǎn)品的需求。

  • 你需要通過郵件或其他媒介發(fā)送提醒或介紹嗎?
  • 你需要為自己或員工提供專門的系統(tǒng)嗎?比如:為配送人員提供導(dǎo)航軟件,為廚房員工提供實(shí)時(shí)點(diǎn)餐管理接口。
  • 你需要手動(dòng)批準(zhǔn)用戶/內(nèi)容的接口嗎?
  • 你需要一個(gè)內(nèi)容管理系統(tǒng)嗎?它可以讓管理員輕松撤除內(nèi)容或讓用戶賬戶失效。

還有很多很多的問題。

這就對(duì)了!這其實(shí)也是人們通常在開發(fā)應(yīng)用早期會(huì)遺忘的一些問題。針對(duì)你的產(chǎn)品,還會(huì)衍生出更多的問題,你需要慢慢發(fā)現(xiàn)。

總結(jié)

建立軟件略圖和審核軟件的過程會(huì)告訴你——你漏掉了哪些內(nèi)容。重復(fù)幾次這一流程,之后你就可以更加自信地提供一份可靠的功能清單了。

你知道,我真的希望你有什么妙招能夠修繕我的項(xiàng)目。可這聽上去工作量好像很大的樣子。

事實(shí)也確實(shí)如此。但是這是你在軟件開發(fā)過程中必須要做的事情,不論在什么階段。

記住我們之所以要這樣做的原因。無論如何,你都需要發(fā)現(xiàn)軟件功能中隱藏的復(fù)雜性問題。你所要做的僅僅是選擇何時(shí)剝洋蔥。

從本質(zhì)上來說,你有兩個(gè)選擇:

  1. 你可以發(fā)現(xiàn)用戶目標(biāo)、構(gòu)建版圖設(shè)計(jì)或流程圖、質(zhì)疑自己的假設(shè),然后像我們說得那樣將軟件一層一層剝開。或者說,
  2. 你可以讓開發(fā)人員直接開始開發(fā)應(yīng)用,然后根據(jù)開發(fā)的每一個(gè)版本暴露的問題進(jìn)行修改,一周一次。在幾個(gè)月之后,你就會(huì)發(fā)現(xiàn)這些問題,你本可以在一周之內(nèi)就用紙筆想明白的。

這也是為什么軟件項(xiàng)目常常會(huì)變得非常復(fù)雜,恨不得將你生吞活剝掉一般。

那么,趕快去發(fā)現(xiàn)自己所需要的功能吧。構(gòu)建版圖設(shè)計(jì)然后質(zhì)疑自己的假設(shè),用一種快速且省錢的方式發(fā)現(xiàn)大量的問題。

此舉可以將你從壓力和痛苦中拯救出來,幫助你將產(chǎn)品推向全世界,讓它如繁花一般恣意盛開。

洋蔥會(huì)盛開嗎?你這比喻可真糟糕。

責(zé)任編輯:未麗燕 來源: 36氪
相關(guān)推薦

2021-08-03 11:09:41

智能手機(jī)功能技術(shù)

2021-09-18 10:41:45

手機(jī)廠商安全

2019-10-28 15:10:31

懶人剪輯運(yùn)動(dòng)相機(jī)移動(dòng)應(yīng)用

2013-07-09 09:43:04

函數(shù)式思維函數(shù)式編程編程

2022-06-16 20:56:53

邊緣計(jì)算

2024-07-19 16:31:57

2022-01-26 23:18:21

手機(jī)屏幕電池

2018-05-29 12:00:51

前端工作互聯(lián)網(wǎng)

2020-08-13 09:49:43

WAF應(yīng)用安全網(wǎng)絡(luò)安全

2021-09-11 22:57:22

手機(jī)價(jià)格配置

2018-06-11 09:22:48

超融合存儲(chǔ)應(yīng)用

2015-06-30 10:35:51

數(shù)據(jù)中心

2024-03-13 10:29:39

2021-08-24 00:14:10

手機(jī)工具游戲

2009-09-24 09:20:10

數(shù)據(jù)中心管理

2024-02-21 14:28:09

智能家居物聯(lián)網(wǎng)安全

2013-10-21 09:09:14

惡意App安全軟件手機(jī)病毒

2017-10-23 13:58:46

前端代碼工程師

2016-01-05 10:40:42

web前端復(fù)雜

2021-10-10 21:31:09

手機(jī)數(shù)據(jù)體積
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美中文在线 | 成人国产精品一级毛片视频毛片 | 在线欧美小视频 | 日韩在线播放第一页 | 91网视频| 欧美三区 | 色婷婷综合久久久中文字幕 | 国产蜜臀97一区二区三区 | 影音先锋男 | 午夜国产一区 | 精品一区二区三区在线播放 | 成人一区二区三区 | 国内精品久久久久 | 国产精品178页 | 中文字幕在线免费视频 | 成人免费视频网址 | 爱高潮www亚洲精品 中文字幕免费视频 | 免费在线观看一级毛片 | 久久久精品网站 | 一区二区在线免费观看 | 欧美一区二区三区国产精品 | 国产99视频精品免视看9 | 日韩在线小视频 | 欧美午夜精品久久久久免费视 | 男人的天堂久久 | 日日射影院| 精品久久久999 | 国产精品一区二区欧美黑人喷潮水 | 日本黄色免费视频 | 国产日韩免费观看 | 亚洲精品成人av久久 | 中文字幕国产日韩 | 日日干综合 | 国产伦精品一区二区三区精品视频 | 国产精品资源在线 | 免费视频二区 | www.操com| 毛片一级黄色 | 久久久精品网 | 一区二区在线观看免费视频 | 欧美视频第三页 |