最近項目組發(fā)版質(zhì)量持續(xù)降低合陵,生產(chǎn)事故接連不斷,回家的路上陷入深思澄阳,明明幾個月前還做的相當(dāng)不錯拥知,質(zhì)量穩(wěn)步提升,雖不完美碎赢,但總算還在持續(xù)進步低剔。到底什么原因?qū)е卢F(xiàn)在的情況?隨著思考不斷深入肮塞,更多本質(zhì)的問題浮到面上襟齿。(本文著重討論開發(fā),不涉及敏捷需求價值部分)
人的素養(yǎng):
手工藝人制造商品枕赵,從設(shè)計猜欺,制作,檢驗拷窜,并擺上商鋪進行銷售往往都是一個人完成开皿。逛街的時候會遇到現(xiàn)場制作的手工藝人,一道工序篮昧,接另一道工序赋荆,最后組合成可用的商品,其中并沒有看到做出來的東西需要另一個人單獨測試懊昨,才能擺上商鋪才能銷售窄潭。大家往往習(xí)慣于此,但為什么我們的軟件制作(開發(fā))需要單獨一個人或一組人幫你驗證(測試)酵颁,你自己開發(fā)的東西狈孔?你自己開發(fā)出來的東西,為什么有如此多的缺陷材义,如果不經(jīng)過別人的驗證均抽,甚至不敢擺上商鋪銷售(上線)?
優(yōu)秀的軟件工程師其掂,完成一段代碼油挥,一個功能,無論從內(nèi)在質(zhì)量,還是外在質(zhì)量都經(jīng)得起推敲深寥,甚至根本不用任何人幫助他驗證攘乒,即可上線。他們在做自己功能的時候惋鹅,會主動構(gòu)建自動化測試则酝,開發(fā)過程中不斷重構(gòu)自己代碼,完成后還要經(jīng)過自己多次驗證闰集,同時為了避免思維盲區(qū)沽讹,他們會采用結(jié)對編程或同行評審的方式再次驗證功能的邏輯。然后和測試武鲁,產(chǎn)品一起看看還有沒有遺漏的部分爽雄。完成上述事情,他們才認(rèn)為開發(fā)完成沐鼠。
平庸的.....(我覺得都不應(yīng)該稱為工程師)挚瘟,接到需求,不經(jīng)思索就匆忙開始饲梭,寫完代碼乘盖,不做任何自動化驗證,不做重構(gòu)憔涉,后續(xù)什么都不做侧漓,就簡單跑下功能得到(happy path)的結(jié)果,就扔給測試人員一堆垃圾代碼监氢,就讓別人測試。這個是軟件開發(fā)嗎藤违?這就是中國當(dāng)前大多數(shù)企業(yè)的開發(fā)現(xiàn)狀浪腐。
我覺得這是人的素養(yǎng)問題,有涵養(yǎng)的人對自己的事都有高度的責(zé)任心顿乒,做任何事都抱著不麻煩別人的利他精神议街,自己的事情自己完成,自己的代碼自己負(fù)責(zé)璧榄,需要他人協(xié)作也是借鑒他人思路特漩,而不是假他人之手來做。和這樣人相處整個團隊都會處于正向上升骨杂,效率涂身,質(zhì)量都會不斷進步。但是如果團隊大量存在平庸的人搓蚪,那么這個團隊只能處于向下的循環(huán)蛤售,開發(fā)效率低下, 質(zhì)量差,開發(fā)埋怨測試不夠快悴能,測試埋怨開發(fā)質(zhì)量差揣钦,整個團隊士氣低下,幾乎無可救藥漠酿。
意識與技能
“功能都做不完冯凹,還寫什么自動化測試,做什么重構(gòu)炒嘲?”宇姚,能力平庸的開發(fā)人員往往搬出這套說法告訴你,做這些浪費時間摸吠,影響交付空凸。往往說這種話的人,從沒寫過自動化測試寸痢,重構(gòu)是什么根本不了解呀洲。他們不知道CI,TDD啼止,refactoring三件套實際是加速整個交付效率道逗。這種人既沒有良好的軟件開發(fā)意識,同時也不具備基本的軟件開發(fā)技能献烦。在一個企業(yè)留下一堆垃圾代碼滓窍,然后倉皇而逃,繼續(xù)禍害下個企業(yè)巩那。
這里企業(yè)并不是無辜的吏夯,只要“性價比高”就招進來,寧愿招一群能力平庸的人即横,也不愿高薪聘請少量的優(yōu)秀工程師噪生。軟件在歐美是一個令人羨慕的行業(yè),薪資常年Top5东囚,engineer這個職位是被人尊敬的跺嗽。但在這里廉價勞動力獲得野蠻生長,真正的劣幣驅(qū)逐良幣页藻。
磨刀不誤砍柴工
我們有句諺語:“磨刀不誤砍柴工”忍疾,這句話用在開發(fā)里面解釋就是测蘑,如果我在加入一個新功能前万俗,能有結(jié)構(gòu)清晰的代碼(重構(gòu)完成)词疼,有良好的自動化測試守護,那么在加入新功能時就能加快速度废境《且荩總體做完一個功能花費的時間比在一個內(nèi)部質(zhì)量差爷辙,且沒有自動化守護的代碼基上加入新功能花的時間更短。
重構(gòu)+自動化測試+新功能+測試+修改bug所花費的時間 < 直接開發(fā)新功能+測試+修改bug的時間朦促。
有時大家明明理解這個道理膝晾,卻還是不愿意去做,是因為工作量的原因务冕。敏捷期望團隊提升協(xié)作血当,提升能力,達到提升效率禀忆。但很多組織在團隊還沒有提升的時候加大工作量臊旭。上個迭代完成60個點,下個迭代就要求完成80個點箩退。導(dǎo)致團隊明知道磨刀會加快速度离熏,但卻不愿意磨刀,直接去砍柴戴涝。結(jié)果越砍越慢滋戳,越慢越加班,越加班啥刻,越不愿磨刀奸鸯,形成惡心循環(huán)。
人性
敏捷體系是建立在信任的基礎(chǔ)上可帽。有了信任才有了協(xié)作娄涩,不同性格的人才有發(fā)揮空間。敏捷強調(diào)管理者映跟、團隊關(guān)注未完成的事情蓄拣。 一旦管理者,團隊不僅僅關(guān)注事情努隙,還更關(guān)注人是否忙碌球恤,這個直接破壞了敏捷的基礎(chǔ)。這樣每個人都處在微觀管理下剃法,協(xié)作變的不順暢,團隊無法自組織路鹰,更無法持續(xù)提升贷洲。
要讓敏捷發(fā)展,管理層要有魄力信任個人晋柱,團隊优构,讓他們自主決定做哪些事,怎么協(xié)作雁竞,怎么提升钦椭,不到萬不得已拧额,不干涉團隊的決定。這個對管理者能力是個極大的考驗彪腔。
KPI
還記得“績效毀掉sony這個故事嗎侥锦?”講述sony公司在引入績效考核后,大家都盯著kpi做事德挣,有一個很有價值的事恭垦,產(chǎn)品老化測試,但由于耗時長格嗅,體現(xiàn)不出績效番挺,而無人問津,最后導(dǎo)致sony的產(chǎn)品質(zhì)量急劇下降屯掖。
雖然不知道這個故事真假玄柏,不過績效可以很輕易的破壞敏捷文化。敏捷文化很重要的一點就是協(xié)作贴铜,無論個人還是團隊之間粪摘。如果一個組織過度注重績效,人人都盯著績效做事阀湿,凡事都問:“這個事對我績效有什么幫助嗎赶熟?”。那么會導(dǎo)致人與人之間陷嘴,團隊于團隊之間協(xié)作困難映砖。每個人和團隊都在做局部優(yōu)化,整體優(yōu)化丟失灾挨,組織整體效率變的低下邑退。
總結(jié)以下:
要開展敏捷,以下幾點很重要:
- 需要高素養(yǎng)的人劳澄,技能可以學(xué)習(xí)地技,但高素養(yǎng)的人需要從小培養(yǎng)
- 開發(fā)中經(jīng)常使用UT,TDD秒拔,refactoring莫矗,pair programming,code review
- 支持團隊成長砂缩,合理化工作量
- 扁平組織架構(gòu)作谚,基于信任的管理
- 注重整體績效,盡量基于團隊庵芭,甚至多個團隊進行整體績效管理