开发成本与维护成本[关闭]

Posted

技术标签:

【中文标题】开发成本与维护成本[关闭]【英文标题】:Development cost versus maintenance cost [closed] 【发布时间】:2010-08-13 14:18:44 【问题描述】:

我试图向我们的销售部门解释开发成本与维护成本的比率,目前我主要凭直觉认为我们将大约 60% 的时间用于维护。

我们团队中有一些人倾向于销售我们必须构建的定制解决方案,如果销售人员不了解开发的总成本,那么他们将无法以实际价格出售。

另一个“问题”是我们正在扩展我们的服务,并且需要重构一些底层基础架构以缩短上市时间和其他衡量点。

你对我应该参考什么来建立一个可靠的论点有什么好的建议吗?为了让他们更好地理解问题,我应该提出哪些要点?

也许在某个地方我可以指出一些很棒的文字。

【问题讨论】:

恕我直言,这根本不是基于意见的,我敢打赌,在过去的 3 年里,有很多研究收集了这方面的数据...... 【参考方案1】:

在 Robert L. Glass 的“Frequently Forgotten Fundamental Facts about Software Engineering”(IEEE Software May/June 2001 的一篇文章)中,他谈到了软件的“60/60”规则,即维护通常会消耗 40 到80%(平均 60%)的软件成本,然后这种增强大约占软件维护成本的 60%,而纠错成本约为 17%。

【讨论】:

我在一篇关于微服务 (slideshare.net/INPAY/the-why-what-and-how-of-microservices) 的幻灯片分享文章中看到了这个参考。问题是,未来 16 年的成本是上升还是下降? 23% 既不是新功能也不是错误修复的人去哪儿了? @Džuris:可能是开销、电子邮件、时间表、会议等。【参考方案2】:

在行业工作 29 年后,我可以说维护成本占总成本的 60-80%。开发最多为20%。但是今天大多数公司似乎都没有承认他们最关注快速开发并在没有适当估计的情况下设定截止日期。这迫使开发人员转储并离开,这只会使维护更加困难。那么,高管们会怎么做呢?他们扔掉所有内部软件并购买第 3 方的东西。然后系统集成的噩梦发生了,也许 4 或 5 年后,他们会有点,有点让这一切正常工作,但这样做的成本比预先花时间和第一次做对的成本要高得多。与此同时,所有经验丰富的老前辈都挂了帽子,一群新的年轻人带着“我们可以解决任何问题”的态度飞入。而且,我的朋友是他们长期要做的事情。

这就是敏捷最终赢得我的原因,因为瀑布在软件中不起作用。从来没有,也永远不会。这都是关于较小的工作迭代和零件开发。就像亨利福特在 1900 年向我们展示的那样......

【讨论】:

问题是,您上次增量设计汽车发动机是什么时候?在机械领域,他们并没有真正通过敏捷的方法从头开始设计汽车的主要部件(或它们的关系)——他们只是建立了设计模式(从一个多世纪的内燃机使用中出现),他们可能会使用敏捷原则进行改进,但不要从根本上重新定义。在软件中,基本的重新定义很常见,这就是为什么最大的 IT 项目(通常旨在集成较小但功能齐全的零碎解决方案)容易失败的原因。 他们确实以增量和迭代的方式设计汽车。只是,由于设计和制造之间的成本分配不同,周期要长得多。写代码相当于设计一辆汽车。编译是制造。对于软件而言,制造成本不过是设计成本。对于汽车,情况正好相反。因此,数以百万计的重新设计/制造周期对于软件来说是可以接受的,但对于汽车来说是不可接受的。基于类似的推理,整个汽车制造行业可以被同化为一个项目的一大堆分支,其复杂性可能高于中等。【参考方案3】:

研究技术债务的概念。此外,尝试与销售人员一起出去玩。很有可能他们并不邪恶或不在乎;他们只是接触了不同的东西,与你有不同的技能和兴趣。软技能很重要。最大的错误是让他们知道“他们不懂计算机”。我曾经合作过的最简单的销售人员是前质量检查人员,所以他得到了很多东西。顺便说一句,销售人员的工作是歪曲事实并保持这些收入。这是一个微妙的平衡,既不招致太多技术债务,也不错过商机。

【讨论】:

【参考方案4】:

尝试让他们将软件视为汽车。建造它可能只需要几周或一个月的时间,但是在接下来的几周、几个月和几年的使用中,需要进行维护。也许只是为了让事情顺利进行的日常维护;但是当它发生意外并需要修复时,它也可能是紧急维护。

同样的,刚拿到手的时候可能还好,但是用了一点之后就需要打磨一下,让它一直都是你期望的样子。

【讨论】:

使用日常类比是讨论此类话题的好方法。 说实话,我不认为这是一个很好的类比。与购买价格相比,汽车的维护成本微不足道。那么为什么你的软件项目的维护成本超过了总开发预算的一半呢?这正是你有时需要反驳的那种推理。 @BartGijssens,我同意。维护汽车的成本是保持其当前的功能。软件中的类比是修复内存泄漏、执行数据清理、清除旧日志文件等的小错误修复。软件中“维护”的真正成本通常是重新适应和改进,或者修复基本的概念缺陷——一旦机器持续使用并积累了状态,成本更像是安装或更换飞机发动机——飞行。【参考方案5】:

我的经验是,大约 35% 的开发成本将在第一年维护,第二年 30%,第三年 25%。因此,如果我花费 1 MM 进行开发,我将在第一年花费 350K,依此类推。 3年后,成本每年再次上涨5%到10%。因此,在 5 或 6 年后可能需要对应用程序进行全面重新设计。

【讨论】:

以上是关于开发成本与维护成本[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为维护而设计:架构设计的首要原则

为维护而设计:架构设计的首要原则

如何评估自动化的收益?

三软件设计原则

软件工程与软件危机

我是如何用一个半星期解决了别人可能需要三四个月而且维护成本巨大的功能(解决思路与方法)