最近一直在和團隊在做一款服務(wù)于軟件研發(fā)的工具,得以有計劃從理論上和實操上重新思考軟件研發(fā)這件事避乏。接下來想從軟件研發(fā)本來的樣子爷耀,怎樣更好的開發(fā)一款軟件兩方面談?wù)劇?/p>
軟件研發(fā)工作本來的樣子
一個完整的軟件研發(fā)流程大致包括市場調(diào)查、用戶分析淑际、產(chǎn)品定義畏纲、交互設(shè)計扇住、UI設(shè)計、軟件開發(fā)盗胀、測試這幾個階段艘蹋。一個完整的軟件開發(fā)團隊通常包括項目經(jīng)理、產(chǎn)品經(jīng)理票灰、交互設(shè)計師女阀、UI設(shè)計師、前后端工程師屑迂、測試人員這些角色浸策。產(chǎn)品經(jīng)理會負責市場調(diào)查、用戶分析惹盼、產(chǎn)品定義庸汗,交互設(shè)計師和UI設(shè)計師分別負責交互設(shè)計和UI設(shè)計,工程師負責軟件開發(fā)手报,測試人員負責軟件的測試蚯舱,而項目經(jīng)理則對項目的質(zhì)量、成本掩蛤、工期負責枉昏。當然有些成員會身兼數(shù)職,比如在敏捷研發(fā)中揍鸟,產(chǎn)品經(jīng)理通常也扮演了項目經(jīng)理的角色兄裂,而交互設(shè)計的工作一般都由產(chǎn)品經(jīng)理和UI設(shè)計師分攤。
在我看來阳藻,整個軟件開發(fā)流程就像沙漏里的沙一樣晰奖,先匯聚一點,再發(fā)散出去稚配,最后落地畅涂。為什么這么說呢?首先說明匯聚的那一點代表什么道川,是產(chǎn)品需求文檔午衰。這文檔算是軟件開發(fā)流程中的集大成者。產(chǎn)品需求文檔把軟件開發(fā)流程切割成前后兩個部分冒萄,前一部分的核心內(nèi)容是研究怎么做臊岸,后一部分的核心內(nèi)容就是做出來。具體來說尊流,就是產(chǎn)品經(jīng)理帅戒、交互設(shè)計師和UI設(shè)計師通過市場調(diào)查,用戶研究,界面設(shè)計等工作逻住,研究軟件到底怎么做钟哥,輸出調(diào)研報告、原型瞎访、設(shè)計圖等各種文檔成果腻贰,然后他們把成果匯集整理成一份產(chǎn)品需求文檔;之后工程師和測試人員的工作就是根據(jù)產(chǎn)品需求文檔的指導精神扒秸,輸出代碼播演、用例、缺陷等伴奥,就是在把軟件給做出來写烤。要指出的是產(chǎn)品需求文檔只是一個信息傳達介質(zhì),形式是很豐富的拾徙。
除了漏斗的形式洲炊,軟件開發(fā)還有不少其他特點。首先是研發(fā)流程各階段的關(guān)系特點尼啡。雖然流程前后各階段有強烈的依賴關(guān)系选浑,但后一階段不必等到前一階段完全完成才開始,經(jīng)常在前一階段進行到一個特定時點時就可以開始了玄叠。比如測試不能在還沒有代碼的時候就測試,但可以早早就開始書寫用例拓提,一旦有了可測的模塊便可以進入測試读恃;UI設(shè)計不能在還沒有產(chǎn)品原型圖的時候就開始設(shè)計,但可以在核心頁面原型出了后就開始確定風格代态;諸如此類寺惫。
其次,軟件開發(fā)項目中蹦疑,對工期的預測和把控是非常困難的工作西雀。這主要由于兩個原因造成。一方面是產(chǎn)品經(jīng)理在產(chǎn)品定義過程中歉摧,基本不可能考慮到所有細節(jié)艇肴,有些因為疏忽大意而漏掉,有些因為認知不到而忽略叁温,這部分內(nèi)容如果在開發(fā)過程中產(chǎn)生比較大的問題再悼,可能就會影響工期。另外就是產(chǎn)品經(jīng)理膝但、項目管理人員不一定懂技術(shù)冲九,和蓋房子不一樣,代碼不像磚頭那樣直觀可見跟束,這樣的情況下莺奸,開發(fā)工作不管順利與否丑孩,都要等到有了成型可見的界面后,才能得到最有效反饋灭贷,這種反饋的滯后很容易導致巨大的返工成本温学。基于同樣的原因氧腰,項目管理人員在計劃工期的時候也常陷入手足無措的境地枫浙。
另外,軟件研發(fā)的成員古拴,很多時候都是多窗口并行工作箩帚,輸入和輸出交錯進行。為了能輸出正確的東西黄痪,需要輸入各種不同類型的信息紧帕。舉個例子,一名工程師桅打,開發(fā)時可能要同時打開編輯器是嗜、終端進行代碼編寫,同時也要打開產(chǎn)品需求文檔查看產(chǎn)品開發(fā)需求挺尾,打開文件管理器調(diào)用素材鹅搪,以及不知道多少個瀏覽器標簽頁來解決編碼中所遇到的問題,此外遭铺,還有一個或多個隨身預覽結(jié)果的窗口丽柿,可能是瀏覽器或模擬器。這就是為什么程序員通常都需要兩臺屏幕魂挂,只有這樣才能應付這種錯綜復雜的工作甫题。在這樣的情況下,如果不能合理安排窗口涂召,總是來回切換的話坠非,工作效率很低,而且很容易煩躁果正。
追求更好的軟件研發(fā)是在追求什么
軟件研發(fā)的目的很明確炎码,就是開發(fā)出質(zhì)量上層、解決問題的軟件來舱卡。和任何項目都一樣辅肾,軟件開發(fā)也遵從項目三角形的表述,技術(shù)轮锥、人員等客觀條件一定矫钓,項目的質(zhì)量受成本、范圍、和時間限制新娜。要開發(fā)更多的功能赵辕,必然影響到開發(fā)周期和開發(fā)成本;要降低開發(fā)成本概龄,必然影響到開發(fā)周期和開發(fā)范圍还惠;要縮短開發(fā)時間也一樣。要開發(fā)出高質(zhì)量的軟件私杜,必須保證這個三角形的閉合蚕键。一個有經(jīng)驗的項目經(jīng)理,面對項目三角形的時候衰粹,通常固定一邊锣光,調(diào)整一邊,投資一邊铝耻。但我們說這不是更好的軟件研發(fā)誊爹,更好的軟件研發(fā)不是去調(diào)整平衡三條邊,而是讓三角形整體變大瓢捉,即相同的任務(wù)频丘,現(xiàn)在花更少的時間和成本。而這里面又分為三塊泡态,完成常規(guī)任務(wù)的效率更高搂漠,面對高難度任務(wù)也能順利完成,盡量少的犯錯誤某弦。
如何更高效的完成常規(guī)任務(wù),在軟件研發(fā)中拍摇,工作時間是可以分為兩部分的亮钦,一部分用來獨自工作,另一部分用來溝通充活。要想提高獨自工作的效率蜂莉,就兩點,自動化可自動化的流程混卵,復用可復用的組建映穗。復用可復用的組建就要求每個成員在工作中注意積累和總結(jié)食侮,因為現(xiàn)在很多項目都不是一錘子買賣屯碴,而是小步快跑的方式,所以這樣的積累是很有價值焦匈,而且價值越來越大的。自動化可自動化的流程辕录,就要求團隊善于運用工具睦霎,有了工具,切圖標志走诞、數(shù)據(jù)分析副女、代碼編譯、版本部署等工作都可以節(jié)約特別多時間蚣旱。
提升溝通效率稍微復雜一點碑幅,這要求團隊建立順暢的信息傳輸和反饋渠道和機制,來保證團隊信息同步塞绿,需求傳達準確沟涨,反饋即時有效。在我心中位隶,最理想的軟件研發(fā)是由一個人完成的:你獲得了一個點子拷窜,通過問卷、訪談等方法確定了這個點子可行涧黄;接著你把看得見的和看不見的問題都想的清楚通徹了篮昧,并根據(jù)自己理解定義出了軟件,還畫出了產(chǎn)品設(shè)計圖笋妥;然后你又自己把軟件開發(fā)了出來懊昨,自己測試了一下,覺得沒問題就上線發(fā)布了春宣。在這個過程中酵颁,你對該產(chǎn)品的思考和認知一脈相承,不需要和任何人去面對面溝通月帝、不需要花時間制作任何文檔躏惋,也不需要考慮標注切圖的問題,因為這一切都是你的嚷辅,不做這些也不會影響你下一步的進行簿姨。然而這樣的通才并不常見,況且實在趕時間的話簸搞,就算一個人什么都會扁位,也做不過來。所以我們還得有個團隊趁俊。從這個方面來想域仇,一個人工作不涉及到的任務(wù)分配、談話寺擂、郵件暇务、會議泼掠、各式文檔等都是因溝通而存在的。
能提高溝通效率的方式很多般卑,仁者見仁智者見智武鲁,但這里我想給你介紹幾點工作中覺得特別重要又容易忽視的幾點。首先蝠检,要明確計劃沐鼠,雖然軟件開發(fā)中可能遇到各種突發(fā)情況,甚至戰(zhàn)略方向都會改變叹谁,但制定計劃依然是必要的饲梭,有一份詳盡的計劃,能按照計劃實行當然最好焰檩,不能按照計劃實行憔涉,也能讓團隊成員對我們在做什么、要去哪析苫、為什么變化了有個譜兜叨,可以更容易理解最新的信息,更準確解讀接收的需求衩侥。其次国旷,要根據(jù)成員的特點優(yōu)化關(guān)鍵文檔的展現(xiàn)形式,拿產(chǎn)品需求文檔舉例茫死,產(chǎn)品經(jīng)理可以采取各種不同的工具和敘述方式來制作產(chǎn)品需求文檔跪但,說不上孰好孰壞,根據(jù)團隊成員的工作習慣和工作場景峦萎,選擇讓工作更舒服的方式最好屡久。再次,讓變更有跡可循爱榔,任何文檔被环,當變更了,都需要記下何時何地何人做了何等變更详幽,為什么蛤售;人和新需求,要記錄何時何地何人提出了這等需求妒潭,為什么;任何回憶揣钦,也要記錄何時何地何人討論的問題和達成的成果雳灾。只有這樣,思路才能是完整的冯凹,在之后做類似決策時才是有據(jù)可考的谎亩。最后炒嘲,要即時反饋即時糾錯,現(xiàn)在的軟件開發(fā)已經(jīng)在往這個方向發(fā)展了匈庭,所說的敏捷開發(fā)就有此意夫凸,但有時候依然不夠,如果可能的話阱持,嘗試周穩(wěn)定版本甚至日穩(wěn)定版本都是有幫助的夭拌,畢竟問題總是越早發(fā)現(xiàn),糾錯成本越小衷咽。
如何順利完成高難度任務(wù),也是個見仁見智的問題镶骗。這里就簡單的介紹一下我覺得靠譜的方法桶现。一是工作的形式上,在面對困難任務(wù)時鼎姊,可以改變各顧各的形式骡和,采用結(jié)對編程,即兩個人用一臺電腦編程相寇,在思考和交流中慰于,更容易碰撞出靈感;如果兩個人都不行裆赵,那可以采用特種部隊的方法东囚,這個特種部隊可以由不同類型的成員組成,從不同的思路去思考同一個問題战授,這樣的小組專門在特定的時間負責攻克特定的任務(wù)页藻,完成任務(wù)就可以就地解散。另一種是建立團隊資源庫植兰,各種各樣的問題份帐,在哪里、找誰有可能得到答案楣导,都可以收集起來废境,這樣遇到問題時不至于手足無措。
怎樣避免少犯錯誤呢筒繁?錯誤可分為看得見的錯誤和看不見的錯誤噩凹。看得見的錯誤當然有些因為馬虎毡咏,有些因為確實難解決驮宴,前一種坑可以通過評審盡量避免、后一種坑則和前面說的攻克高難度任務(wù)差不多呕缭《略螅看不見的錯誤主要因為經(jīng)驗不足修己,而經(jīng)驗不足就要努力積累經(jīng)驗∮蓿可以建立一個公共的的知識庫睬愤,積累一整套認知論和方法論,然后再通過不斷的的總結(jié)和復盤去迭代纹安。更重要的是尤辱,這個知識庫要使用優(yōu)質(zhì)的文檔管理軟件來建立,至少是方便搜索查找的钻蔑,如果經(jīng)驗積累了卻無法提取啥刻,也是徒勞。此外咪笑,即時收集反饋和糾錯也很重要可帽,不僅減少錯誤,也減少已犯的錯誤造成的損失窗怒。
結(jié)語
以上談了對軟件開發(fā)的一些理解映跟,隨著互聯(lián)網(wǎng)的發(fā)展,這個行業(yè)已經(jīng)發(fā)展得挺健全了扬虚,我所說的這些認識和方法也不是我這一家的洞察和思考努隙,說到底,能不能開發(fā)出更高質(zhì)量的軟件辜昵,還得看能不能結(jié)合團隊特征調(diào)節(jié)流程荸镊、找好工具、認真實行堪置,畢竟一個幾十人的團隊就已經(jīng)算得上一個復雜系統(tǒng)躬存,和復雜系統(tǒng)打交道從來就不容易。