碼農(nóng)的命就是搬磚虐拓。
曾經(jīng)挺羨慕“軟件開(kāi)發(fā)”這行的心俗,軟件,聽(tīng)著多牛逼蓉驹!入行了以后才知道城榛,不過(guò)就是碼代碼。曾經(jīng)苦心鉆研過(guò)的高級(jí)統(tǒng)計(jì)算法态兴,曾經(jīng)費(fèi)神思考過(guò)的高效率排序狠持,這些在硬件性能越來(lái)越牛逼的情況下,顯得越來(lái)越不那么重要瞻润,反而讓你的代碼這么復(fù)雜喘垂、難理解献汗,更可怕的是從你的代碼就能看出你的年齡!
這幾年我看到的代碼王污,幾乎全部是以實(shí)現(xiàn)功能為最高標(biāo)準(zhǔn)的罢吃,而非在實(shí)現(xiàn)功能的同時(shí)還得有美感。
這當(dāng)然也不能賴碼農(nóng)昭齐,項(xiàng)目時(shí)間緊尿招,誰(shuí)有功夫給你干那些沒(méi)用的。
這么說(shuō)阱驾,碼農(nóng)就沒(méi)有機(jī)會(huì)高大上一把了么就谜?對(duì),沒(méi)有機(jī)會(huì)了里覆,除非你不是搬磚丧荐,而是給其他搬磚的制造“搬磚機(jī)”。
還記得幾個(gè)月以前我說(shuō)的哪個(gè)政府項(xiàng)目么喧枷?那就是造搬磚機(jī)虹统。這篇兒就說(shuō)說(shuō)搬磚和造搬磚機(jī)在項(xiàng)目管理、方法論隧甚,技術(shù)管理上的區(qū)別车荔。
搬磚指開(kāi)發(fā)商業(yè)軟件,比如滿座網(wǎng)戚扳,比如企業(yè)內(nèi)部系統(tǒng)忧便,比如抖音APP。
這些項(xiàng)目都:
有個(gè)“價(jià)值取向”帽借;
所有的開(kāi)發(fā)都圍繞著“價(jià)值”的
項(xiàng)目組的歷次提交物都是實(shí)現(xiàn)了這個(gè)價(jià)值(當(dāng)然你要是說(shuō)我們開(kāi)發(fā)的東西沒(méi)有價(jià)值珠增,客戶也不關(guān)心,是政治項(xiàng)目砍艾,大家都是樂(lè)呵樂(lè)呵完了蒂教,我也沒(méi)轍)
這類項(xiàng)目單純的像個(gè)大一學(xué)生,只要跟她聊辐董,有時(shí)間陪著她悴品,就算成功了禀综。同樣简烘,只要花時(shí)間和客戶聊價(jià)值取向,在客戶中定枷、團(tuán)隊(duì)中統(tǒng)一這個(gè)價(jià)值取向孤澎,根據(jù)這個(gè)取向造出Epic Story,然后BA細(xì)化欠窒,分派給開(kāi)發(fā)和測(cè)試覆旭,開(kāi)發(fā)完成后退子,再由BA驗(yàn)證,最后showcase給客戶型将,項(xiàng)目肯定沒(méi)跑兒寂祥。
從技術(shù)上說(shuō),使用CI七兜,堅(jiān)持code review丸凭,多寫點(diǎn)兒test方便重構(gòu),基本上都不會(huì)出大事腕铸;
項(xiàng)目管理上惜犀,堅(jiān)持實(shí)施Scurm方法論,揪住BA狠裹,時(shí)刻確認(rèn)他的價(jià)值觀是否和客戶一致虽界,基本上不用管開(kāi)發(fā)碼什么;
簡(jiǎn)單么涛菠?本來(lái)就不復(fù)雜莉御。
咱再說(shuō)工具類,就是搬磚機(jī)的開(kāi)發(fā)俗冻。為了說(shuō)著方便颈将,我用三個(gè)項(xiàng)目對(duì)比著說(shuō):
第一個(gè)是這個(gè)政府項(xiàng)目;第二個(gè)拿微軟的Word說(shuō)事言疗;第三個(gè)是創(chuàng)造Java開(kāi)發(fā)語(yǔ)言和jvm晴圾。
開(kāi)始
造搬磚機(jī)最大的問(wèn)題是“問(wèn)題定義不清晰”或者說(shuō)“戰(zhàn)斗面太大”。
第一個(gè)項(xiàng)目的目標(biāo)有三個(gè)
“可以提交任何格式的表單到任何結(jié)構(gòu)的數(shù)據(jù)庫(kù)中”
“可以顯示任何數(shù)據(jù)源的數(shù)據(jù)到任何頁(yè)面中以任何格式顯示出來(lái)”
“可以將腳本語(yǔ)言(比如Js噪奄、Python死姚、Groovy)插入到上述流程中,完成腳本語(yǔ)言中定義的任意功能”
第二個(gè)項(xiàng)目的目標(biāo)就一個(gè)
“寫文檔勤篮、排版”
第三個(gè)項(xiàng)目目標(biāo)也不復(fù)雜:
“創(chuàng)建一個(gè)運(yùn)行環(huán)境和一種語(yǔ)法都毒,凡是符合這種語(yǔ)法的代碼,就可以在該運(yùn)行環(huán)境中運(yùn)行”
有沒(méi)有發(fā)現(xiàn)碰缔,這三個(gè)項(xiàng)目的需求其實(shí)跟沒(méi)說(shuō)一樣账劲,在看幾個(gè)“搬磚”項(xiàng)目:
“我需要一個(gè)注冊(cè)用戶的統(tǒng)計(jì)報(bào)表,里面應(yīng)該包括XXX金抡,XXX瀑焦,XXX,這樣我就能知道用戶總量和拉新情況”
“我需要讓用戶能夠按照商品名稱和描述查詢商品梗肝,這樣他們就能進(jìn)入購(gòu)買流程了”
你感受一下”戰(zhàn)斗面“的區(qū)別榛瓮。
其中的Word項(xiàng)目還好,是能夠從“寫文檔巫击、排版”這5個(gè)字深化下去禀晓,不論幾十個(gè)Story還是成百上千精续,花時(shí)間就行。而第一個(gè)和第三個(gè)粹懒,想細(xì)化都下不去手重付,簡(jiǎn)直了。
造搬磚機(jī)類的項(xiàng)目還有一個(gè)問(wèn)題:對(duì)于任何一個(gè)技術(shù)層面的修改或者重構(gòu)都可能禍及整個(gè)項(xiàng)目凫乖,這就需要更加高深的架構(gòu)設(shè)計(jì)和整體規(guī)劃堪夭。
仔細(xì)想一下第一個(gè)項(xiàng)目和第三個(gè)項(xiàng)目,是不是有種感覺(jué):“不到最后一周拣凹,全部的努力就是垃圾森爽,什么用都沒(méi)有,而只有最后一周嚣镜,一切連起來(lái)了爬迟,這個(gè)龐大的家伙奇跡般的站起來(lái)了”
相比較一般的“搬磚”項(xiàng)目都是有累積的,做完了用戶模塊和訂單模塊就可以注冊(cè)菊匿、下單付呕,至于統(tǒng)計(jì)、廣告模塊跌捆,以后慢慢增加就行徽职。那個(gè)Word項(xiàng)目,功能也是可以累加開(kāi)發(fā)的佩厚,第一版的Word就沒(méi)有做表格的功能嘛姆钉。
再看這三個(gè)例子,其中Word是產(chǎn)品抄瓦,夠復(fù)雜吧潮瓶,但還不是造工具類的。反而這個(gè)政府項(xiàng)目和Java虛擬機(jī)的開(kāi)發(fā)很神似钙姊,是工具類開(kāi)發(fā)毯辅。
下面就好好掰扯掰扯怎么管理這類項(xiàng)目。
《星際爭(zhēng)霸 I》玩過(guò)么煞额?玩過(guò)的都暴露年齡了思恐。啥?你沒(méi)聽(tīng)說(shuō)過(guò)這個(gè)游戲膊毁,90后吧胀莹?那你看到這兒就當(dāng)個(gè)樂(lè)呵完了,別往下看了媚媒,多花點(diǎn)兒時(shí)間搬磚比什么都強(qiáng)嗜逻。
內(nèi)個(gè),回正題缭召,回正題栈顷,咱說(shuō):
蟲族:一隊(duì)小狗推一個(gè)地堡;
神族:兩個(gè)蝴蝶推整個(gè)基地嵌巷;
為什么突然說(shuō)這個(gè)呢萄凤?
造搬磚機(jī)需要神族;搬磚用蟲族最好搪哪∶遗混戰(zhàn)的時(shí)候,往往蟲族和神族配和晓折。
從人員配備上來(lái)說(shuō)惑朦,造搬磚機(jī)項(xiàng)目需要兩個(gè)團(tuán)隊(duì)
神族 - 團(tuán)隊(duì)1:純開(kāi)發(fā)團(tuán)隊(duì),工作經(jīng)驗(yàn)必須60年以上漓概,最多三個(gè)人漾月,最好兩個(gè)人,不管他們干什么和怎么干胃珍,就告訴他們上面說(shuō)的那個(gè)模棱兩可的需求就行梁肿。要求他們先動(dòng)手,做出第一個(gè)版本觅彰;
蟲族 - 團(tuán)隊(duì)2吩蔑,BA、QA填抬、Dev烛芬、PM都配齊,等團(tuán)隊(duì)1有了第一個(gè)版本飒责,他們是實(shí)施方和反饋方蛀骇,他們真正和客戶接觸,解決客戶“我就喜歡紅色读拆,你換個(gè)紅色的按鈕給我看看”之類的問(wèn)題擅憔;
從錢上說(shuō),兩個(gè)團(tuán)隊(duì)基本上3/7開(kāi)吧檐晕,弄好了4/6也行暑诸,神族占7,蟲族占3辟灰。對(duì)个榕,你沒(méi)看錯(cuò),2個(gè)人掙5個(gè)人的兩倍芥喇。這和一個(gè)神族蝴蝶和蟲族小狗的成本比例基本一致西采。多說(shuō)一句,碰到不差錢的继控,說(shuō)”這兩個(gè)團(tuán)隊(duì)都要神族“械馆,我要牛逼中的戰(zhàn)斗機(jī)胖眷。那肯定也是一個(gè)沒(méi)玩過(guò)星際的,你見(jiàn)過(guò)20個(gè)神族的叉子推基地的場(chǎng)面么霹崎?上去8個(gè)就圍滿了珊搀,另外12個(gè)圍著這8個(gè)亂跑;20個(gè)小狗推基地啥勁頭尾菇?沒(méi)一個(gè)閑著的啊境析,推的比8個(gè)叉子還快。這就是啥人干啥事派诬,你非讓宇航員給你當(dāng)司機(jī)劳淆,不如找個(gè)出租車司機(jī)安全又踏實(shí)。
從項(xiàng)目管理上說(shuō)默赂,神族團(tuán)隊(duì)的客戶是是蟲族沛鸵,他們提反饋給神族團(tuán)隊(duì),可不能讓神族直接面對(duì)最終客戶放可,遇見(jiàn)那種“你換個(gè)紅色的按鈕我看看”谒臼,沒(méi)兩天你神族就走光了。
蟲族耀里,用Scrum完全夠用蜈缤,妥妥兒的。
神族冯挎,用敏捷有點(diǎn)兒勉強(qiáng)底哥,瀑布方式最好,先讓他們做Demo房官,做嘗試蹭沛,定方案医舆。不用定期的showcase,什么時(shí)候有想法隨時(shí)聊。
從項(xiàng)目的進(jìn)度安排上說(shuō)眷蜈,
神族團(tuán)隊(duì)先上涮毫,什么時(shí)候做出第一個(gè)版本什么時(shí)候蟲族再上畴蹭。至于你的神族是不是能快速做出第一個(gè)版本最筒,這就和星際趟地圖一樣,技巧和策略不能說(shuō)沒(méi)有湿颅,但是主要靠命载绿。
最后,如果時(shí)間能夠重來(lái)油航,我會(huì)做這么幾件事情:
1崭庸、在項(xiàng)目初期就提醒客戶:我們不需要蟲族,拿全部蟲族的錢找神族,把11個(gè)人的團(tuán)隊(duì)縮減為2個(gè)人怕享,也不需要我這個(gè)TL(自己把自己先開(kāi)了)执赡。跟客戶說(shuō)明這個(gè)道理:即使掏8個(gè)人的錢養(yǎng)2個(gè)人,那也是少掏了3個(gè)人的錢熬粗,賺了啊這是搀玖。
2余境、如果客戶否定了1驻呐,退而求其次,把團(tuán)隊(duì)分成兩個(gè)芳来,蟲子里面找有沒(méi)有猛犸含末,把猛犸編成一隊(duì),全力做出第一個(gè)版本即舌。另外一隊(duì)打醬油(誰(shuí)讓客戶愿意當(dāng)大頭呢)佣盒。雖然有點(diǎn)兒浪費(fèi)錢,但是這樣安排也比小狗顽聂、猛犸混編肥惭、分散精力強(qiáng);
2.5紊搪、如果客戶仍然喜歡敏捷蜜葱,想嘗試一把,就讓“醬油組”陪著玩耀石,把猛犸隔離出來(lái)牵囤,安心就干v1這一個(gè)事;
3滞伟、如果猛犸組2個(gè)月以后仍然沒(méi)有動(dòng)靜的話揭鳞,就得和客戶談了,兩種情況:
第一種:“任務(wù)對(duì)于這個(gè)團(tuán)隊(duì)太難了梆奈,必須有正經(jīng)的神族參與野崇,找不到的話就解散團(tuán)隊(duì),別浪費(fèi)錢了亩钟,咱都是窮人家的孩子乓梨。。径荔《角荩”;
第二種:“任務(wù)對(duì)于這個(gè)團(tuán)隊(duì)太難了总处,咱能換一個(gè)簡(jiǎn)單點(diǎn)兒的方案么狈惫?你看有那么多‘任意’倆兒字。。胧谈。啥忆肾?方案也不能換么?那菱肖。客冈。內(nèi)個(gè),你看稳强,咱都是窮人家的孩子场仲。。退疫∏疲”