【產(chǎn)品筆記·思考】若無十分必要,請勿重構(gòu)軟件
進行任何軟件開發(fā)的時候,出于時間效率和成本效率,都不可避免地會忽略一些暫時無法考慮到的細節(jié)。
隨著時間的積累,這些小細節(jié)的問題也逐步積累,逐步暴露出大問題,這時候,可能就有人會提出「重構(gòu)」軟件,我這里的說的「重構(gòu)」,主要指徹底地將原有的版本推翻,重新做一套軟件,在外部表現(xiàn)為軟件最大版本號的迭代。
任何架構(gòu)都不可能完美,其底層設計必然會有一些沒有考慮周全的地方,重構(gòu)軟件確實能解決問題,但是其付出的成本代價真正是否值得,是需要反復考慮和思量的。
首先,提出重構(gòu)軟件的往往是研發(fā)部門,研發(fā)部門的KPI往往是迭代交付周期、內(nèi)部缺陷率、版本質(zhì)量等等,研發(fā)部門做啥都是做,只要保證上述KPI就能交差。但是產(chǎn)品部門的KPI就不同了,產(chǎn)品部門的KPI往往滿足客戶需求,尤其是滿足客戶的價值類需求,但是對給用戶交付的產(chǎn)品的底層代碼邏輯并不是很關(guān)心。
由于研發(fā)部門的KPI與產(chǎn)品部門的KPI的不同,導致了兩個部門的心可能并不往一處使,對于絕大部分產(chǎn)研團隊來講,產(chǎn)品部門要比研發(fā)部門強勢一點,研發(fā)部門讓步于產(chǎn)品部門,畢竟?jié)M足客戶需求才是最重要的,否則哪里獲得利潤來養(yǎng)整個團隊呀。
有些研發(fā)部門強勢或者研發(fā)經(jīng)理強勢的地方,甚至把重構(gòu)軟件當作自己的核心任務,恨不得五年做三次重構(gòu),畢竟只有重構(gòu)軟件才能顯示出自己或自己部門的架構(gòu)能力來么,不重構(gòu)軟件哪來的那么多底層架構(gòu)去設計。我覺得這種思想完全是本末導致,是一種十分自私的行為,完全沒有為客戶著想。
其次,重構(gòu)軟件并不是只有好處,沒有壞處。重構(gòu)軟件的好處在于,從底層架構(gòu)上考慮了更多的用戶使用需求的框架。但是壞處也是十分明顯的,比如產(chǎn)品部門幾乎需要把之前所有的大的、小的需求全都重新分析一遍,再加上產(chǎn)品迭代的過程,這勢必會占用很長一段時間去做「老需求」,尤其是那些對需求管理越來越嚴格的企業(yè),要求對「老需求」進行「新分析」,產(chǎn)品人員的時間和精力會被大量占據(jù)。
所以重構(gòu)軟件往往導致對外的產(chǎn)品版本在很長一段時間內(nèi),無法進行有效的或者明顯的更新。尤其對B端產(chǎn)品來講,用戶的需求本來就無限,長時間的不更新,就可能導致用戶對軟件的信心下降、好感降低,甚至放棄使用。
另外,有需求就會有優(yōu)先級,在對「老需求」進行「新分析」時,不可避免地會去調(diào)研和分析某個功能點的使用率,一些不負責的產(chǎn)品人員或者負責但能力有限的產(chǎn)品人員,會在新版本迭代中,將某些老版本中的功能優(yōu)先級調(diào)低,甚至直接去掉。尤其對于B端軟件,我仍然還是持有和有贊創(chuàng)始人兼CEO的觀點:不建議因為某一功能使用率太小而刪除(參考文末引用資料)。
這是說到負責但能力有限,這是略有些「悲哀」的說法,產(chǎn)品經(jīng)理雖然號稱是「經(jīng)理」,但是只是操著「經(jīng)理」的心,擔著「經(jīng)理」的責,但并沒有「經(jīng)理」的權(quán),無法去調(diào)動相應的資源。
最后,回到今天的主題:若無十分必要,請勿重構(gòu)軟件。既然研發(fā)部門提出了重構(gòu)軟件的想法,那一定羅列諸多重構(gòu)軟件的必要性,但是這些必要性真的是十分必要嗎?還是只有九分必要,是的,我用的是「九分」必要,即使是九分必要,也應該暫時擱置重構(gòu)軟件的計劃,因為重構(gòu)軟件會導致軟件的版本迭代陷入停滯。
對于「十分必要」的定義,我覺得有以下幾個指標:
如果不重構(gòu)軟件,將影響未來50%以上的價值需求的研發(fā)效率
如果重構(gòu)軟件,將使未來所有的研發(fā)工作效率提升一倍以上(研發(fā)工日降低一半以上)
重構(gòu)軟件導致的人力資源成本可以在重構(gòu)軟件后一年內(nèi)收回
重構(gòu)軟件導致的版本停滯對產(chǎn)品的商譽損失在20%以下
重構(gòu)軟件要保持原有軟件95%以上的功能
只有同時達到了上述的全部指標,我認為才真正達到了「十分必要」的程度,這時候才可以「謹慎地」去開展重構(gòu)工作。
【延伸閱讀】白鴉內(nèi)部培訓:企業(yè)服務類產(chǎn)品的底層邏輯,和“有贊產(chǎn)品設計原則”
題圖:Photo by Nathan Dumlao on Unsplash