企业自杀行为:重写程序

自杀

敏捷开发和最小化功能组合的好处是能持续得到客户反馈,快速迭代,防止无用程序的产生。但是随着时间的推移,如果开发人员不注意,那些为早期客户编写的程序会变得笨拙不堪,难以维护,无法扩展。你最终会讽刺的得到和敏捷方法完全相反的结果。而且问题的严重程度会随着公司的壮大呈指数级增长。合理的解决方案是什么?把产品“重构重写”。

对于处于快速变换的市场中的一个公司,这通常是走向灭亡的开始。

看似很合理

我刚好和一位朋友在加州的Palo Alto共进午餐,他是一个科技公司的创始人,现在出任董事会主席。几年前他聘请了一位职业经理做CEO。我询问他工作做的如何(“非常好,谢谢你的关心,五年来,公司现在的市值已经达到5千万美元”),但他却想跟我谈一个在他脑子里想了很久的问题。“随着公司的壮大成长,我们对市场变化和客户反馈的反应越来越迟钝。虽然现在我们的营业收入看起来还不错,但如果我们不能使公司的产品平台跟上客户需求的快速变化,一两年内我们就可能完蛋。我们的CEO没有技术背景,但他也为公司不能开发出他想要的一些新功能和平台(Facebook,iPhone,Android等)而沮丧。在最近的一次董事会会议上,我们主管技术的副总裁指出问题的根源在于‘我们的程序积累了太多的技术债务‘,程序实在是糟透了,我们现在根本没法处理。他告诉董事会,如果想在其上做我们想要的修改,那只能重写这个产品。”我的朋友补充道,“这听起来很合理,所以CEO打算批准这个计划。”

举枪自杀

“那么董事会在听到这种鲁莽的计划后没有做任何反应吗?”我问道。“没有,”朋友回答道,忧郁的摇摇脑袋,“董事会成员都感觉这像个好主意。”

经过更详细的询问后,我了解到他们的已经膨胀巨大的代码库中还保留着公司早期在拓荒阶段为客户开发的代码遗迹。当初针对客户的产品技术设计对于公司当前所面对的新平台的扩展任务来说并不是正确的设计。

我提醒我的这位朋友,我从来没有做过技术管理,所以任何我给他的建议都是来自于经历过这种事情的他人。

引诱非技术出身的CEO的美妙海妖歌声

CEO在其职业生涯中至少会遇到一次这样的“重写”问题。如果他是被请来替代技术创始CEO的,那这个决策似乎很好定 —— 只需要对比一下负责技术的副总裁提供的重写(短期)进度计划和保留老代码、增加新功能(长期)的进度计划就行了。而事实上,这是个愚蠢的决定。技术团队也许会知道使用旧程序的困难和问题所在,但不会知道如果重写代码库将会面对多少的困难和问题。

曾经经历过重写噩梦或理解程序的复杂性的CEO会知道,没有最初的技术开发团队,重犯以前曾经犯过的错误的几率会非常的高。加之会引入以前不曾犯过的错误,根据墨菲法则,不受约束的乐观主义会使1年期的重写计划变成数年。

我的观点是,CEO和主管技术的副总裁混淆了因果。客户并不要求新的程序。他们要的是新的功能和平台 —— 在当前。他们不太关心这些功能是由一堆糊涂代码、还是由外星飞船、还是由一个新产品提供的。当你在代码重写的过程中,那些不痴迷于架构血统纯度的竞争对手会扩展他们的功能、平台,拉拢客户、增加市场份额。这种目前就增加这些功能、还是一两年后再增加这些功能之间的区别代表着收入增长、还是被淘汰出局两种境况之间的区别。

谁想要老的产品

也许这着手搞程序重写最危险的副作用就是当你对旧的程序宣告死亡时却没有可替代的产品存在。当副总裁和CEO宣告公司将来要采用新的程序时,谁还会去重视这充满问题的旧程序呢?当管理者说出“重写”这个词时,老的程序就死掉了。这后果就是,CEO没有退路可走。如果技术副总裁的开发进程最终是花了4年时间,而不是设想的1年,那么在这几年期间对于系统新功能的增加不会有任何的进展。

这是一种预测的失败

我认为这看起来像是技术副总裁蓝景设计上的失败 —— 再加之没有代码重写经历的CEO推波助澜 —— 再经过想不出具有建设性的方案的董事会们的搅和。

给朋友的建议?指出市场的快速变化和竞争性,指出这种动作会使公司致命。公司在前进道路上的探索不应该在时间对于市场至关重要的情况下、在客户的需求快速转换的情况下对代码库进行重写。重写是在竞争周期比较长的市场条件下才可行。

我建议他应该在董事会会议上把这些情况陈列清楚。要求CEO详细列出什么时候需要什么样的功能和平台特征,用什么样的手段对进度计划管理的风险进行控制。弄清楚这种完全不同的技术方案是否真的可行。(是否可以只重构目前需要追加新功能的部分模块?在新的代码库上开发要求的新平台系统?启动一个独立的分支工作团队来开发新平台?等等)

[英文原文:Startup Suicide – Rewriting the Code ]
分享这篇文章:

8 Responses to 企业自杀行为:重写程序

  1. 时刻不得闲 says:

    国企最不怕的就是浪费。

  2. 西空 says:

    以前我们公司是来料加工的时候也是一点也不胖浪费

  3. ccxw1983 says:

    专业的决定要由专业人士来决定,我觉得他们缺乏对自己的业务很了解的人,没人能够理清一个系统的脉络,这样的系统确实很难维护,这告诉我们,公司要留住了解业务的高手是多么有价值阿!

  4. 阿蒙 says:

    到目前经历过两次重构,都是大系统。
    第一次成功,第二次还在进行…

  5. nscboy says:

    早死造托生啊.
    快速开发的程序,到了一定程度就必须重写.不管是一步一步走,还是痛改前非.这时必须的.没有浴火重生.软件修改到一定程度将会变成真正的泥潭,噩梦.
    对比下两年前的需求和现在的.除了软件名字还没有大的变化外,还能找到一样的东西吗.

  6. Alix says:

    重写都是迫不得已的,他们也是被逼无奈。关键是项目和产品生命周期,对目前的市场形势都有点过时,神马都是快速迭代。

    我相信模块化的思路还是不错的,不至于后来自己被自己拖死。
    公司规模起来后,当然要做第二系统,两边交叉更新,就像intel那样

  7. 谢伟 says:

    和我们的一样,补丁上面加补丁。考虑到一点加一点,现在觉得已经千疮百孔了

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据