我們?yōu)槭裁催x擇工作流。
一直感覺很難對(duì)那些從未接觸過(guò)工作流的同學(xué)們解釋清楚。
還記得有一個(gè)活動(dòng)中,有人提問(wèn):“工作流到底是做什么的?”回答的同志希望根據(jù)具體的實(shí)例解釋一下,就反問(wèn)他:“你們公司的報(bào)銷流程是怎么走的?”結(jié)果提問(wèn)的同志直接說(shuō):“直接找財(cái)務(wù)啊。”引得下面一陣喧嘩:“不用領(lǐng)導(dǎo)簽字就可以隨便報(bào)銷啊。”
那個(gè)提供的同志心里一定感覺很無(wú)辜:“我也不知道公司的請(qǐng)假流程應(yīng)該找誰(shuí)啊,大家每次都直接給財(cái)務(wù)了。”其實(shí)對(duì)于小公司來(lái)說(shuō),里邊工作的人本來(lái)不多,可能都是報(bào)銷這種事情都是這樣兩步完成了,可實(shí)際上真實(shí)的流程應(yīng)該是這樣:
大家對(duì)圖中的環(huán)節(jié)估計(jì)不會(huì)有什么異議,只是對(duì)于直接拿發(fā)票找財(cái)務(wù)報(bào)銷的人來(lái)說(shuō),中間的核實(shí)部分變成了完美的黑盒,他不了解,也沒有必要去了解報(bào)銷的整個(gè)過(guò)程,站在當(dāng)事人的角度,他只要最后知道這次報(bào)銷能拿到多少錢就可以了。
對(duì)
于一個(gè)公司的內(nèi)部事務(wù)來(lái)說(shuō),這樣就最好的,員工沒有必要去了解每個(gè)環(huán)節(jié)是如何進(jìn)行的,但是在為這種公司進(jìn)行軟件開發(fā)時(shí)無(wú)疑要面臨著掉進(jìn)陷阱的危險(xiǎn)。假設(shè)你
只對(duì)員工進(jìn)行需求調(diào)研,他會(huì)只給你發(fā)票的單據(jù),告訴你報(bào)銷流程就是找財(cái)務(wù)。如果再去找財(cái)務(wù)進(jìn)行需求調(diào)研,他會(huì)告訴你只要看一下沒問(wèn)題就可以報(bào)銷了,最有可
能略過(guò),也可能是最關(guān)鍵的特別情況需要經(jīng)過(guò)老板審核的步驟,這個(gè)步驟可能是5000元以上必須經(jīng)老板過(guò)目,也可能是特殊事項(xiàng)需要老板簽字,但是因?yàn)楣救?
常不會(huì)出現(xiàn)很多這種情況而被人們無(wú)意識(shí)的忽略掉,有可能到程序開發(fā)到中段時(shí)才突然想起來(lái),然后就需要把流程重改。
說(shuō)到這里,那么使用了工作流就可以避免出現(xiàn)這類需求變更問(wèn)題嗎?
答
案是否定的,軟件開發(fā)時(shí)的需求變更常常是因?yàn)榭蛻魧?duì)本身業(yè)務(wù)要求和業(yè)務(wù)流程的不熟悉所導(dǎo)致的,軟件開發(fā)的過(guò)程常常伴隨著流程的梳理和細(xì)化,這也是為什么很
多程序員都說(shuō):“這個(gè)項(xiàng)目做完了,我比他們公司里的人都懂業(yè)務(wù)了。”其實(shí)不是你比他們還懂業(yè)務(wù),真正辦公的時(shí)候你還是會(huì)被各種情況沖的頭昏腦脹,但是因?yàn)?
你在軟件開發(fā)的過(guò)程中對(duì)各個(gè)部門之間的依賴和關(guān)聯(lián)進(jìn)行了完全的梳理,所以對(duì)各個(gè)部門之間的數(shù)據(jù)流和業(yè)務(wù)流了解的更為通透。
話
說(shuō)回來(lái),工作流雖然不能解決因?yàn)榭蛻魧?duì)本身業(yè)務(wù)的深化而造成的需求變更問(wèn)題,但是它確實(shí)可以把這個(gè)風(fēng)險(xiǎn)提前,我們知道,風(fēng)險(xiǎn)總是越早解決越有利,因?yàn)楫?dāng)我
們一張張單據(jù)化為流程圖時(shí),客戶也能夠更好的參與到流程的解讀中來(lái),通過(guò)流程圖可以加快業(yè)務(wù)的深化,提早暴露出之前沒有考慮到的問(wèn)題,便于我們盡快的盡早
的解決。
那么我們直接用visio不就可以了?何必使用工作流呢?
答案是
visio也可以,只要可以限制圖形中的語(yǔ)義,不要讓客戶任意發(fā)揮,就完全可以實(shí)現(xiàn)工作流的效果。為什么要限制語(yǔ)義呢?因?yàn)橹挥辛鞒虉D可以直接映射為開發(fā)
完成的程序,對(duì)流程圖的細(xì)化才是真正有意義的,否則客戶畫了一張完全無(wú)法用程序?qū)崿F(xiàn)的圖形,我們?cè)撛趺崔k呢?工作流一般都提供了自己定義的一套語(yǔ)義,大多
都是以XML格式保存的,只要以此為基礎(chǔ)畫出的流程圖都是可以轉(zhuǎn)換為實(shí)際程序的,再加上與客戶的溝通,讓客戶和程序員對(duì)流程中每個(gè)環(huán)節(jié)的理解保持一致,就
可以盡量避免理解上的偏差,減少修改和返工現(xiàn)象。
但是工作流的學(xué)習(xí)曲線太高了,原本程序中我只需要設(shè)置幾個(gè)狀態(tài)位就可以解決問(wèn)題,值得興師動(dòng)眾的配上工作流嗎?
對(duì)
這個(gè)問(wèn)題的回答還需要對(duì)實(shí)際情況進(jìn)行分析,小型系統(tǒng)中,你只需要制作一個(gè)CMS,不同的管理員負(fù)責(zé)不同版塊內(nèi)容的審批,這種邏輯簡(jiǎn)單,流程固定的需求確實(shí)
沒有必要使用工作流,使用了工作流反而會(huì)加大開發(fā)和維護(hù)的復(fù)雜度,使用狀態(tài)位模擬FSM有限狀態(tài)機(jī)也完全可以實(shí)現(xiàn)。但是在復(fù)雜的業(yè)務(wù)情況中可能存在著同步
并行,多路決策,循環(huán)遍歷等情況,這種情況下使用狀態(tài)位就無(wú)法滿足客戶的業(yè)務(wù)需求,因此隨著業(yè)務(wù)需求復(fù)雜度的上升,我們必然需要選擇功能更強(qiáng)大的武器來(lái)解
決這一系列的問(wèn)題。