Refactoring 如何让自由职业者客户了解开发和维护成熟产品的成本?

Refactoring 如何让自由职业者客户了解开发和维护成熟产品的成本?,refactoring,time-estimation,Refactoring,Time Estimation,我有一个自由职业者的web应用程序项目,客户每两周左右就会请求一次新功能。我无法预测即将推出的功能的需求。因此,当客户端请求新功能时,可能会发生以下几种情况之一: 我轻松地实现了这个特性 因为它与 现有平台 我使用 困难是因为我必须重写 相当一部分 平台基础 客户端撤回请求,因为它 成本太高,无法实施 现有平台 在项目开始时,大约六个月的时间里,所有的功能请求都属于类别1),因为系统小而灵活。但在过去的六个月里,大多数功能的实现都属于第2类)。系统是成熟的,每次我想添加新模块时,我都要进行重构和

我有一个自由职业者的web应用程序项目,客户每两周左右就会请求一次新功能。我无法预测即将推出的功能的需求。因此,当客户端请求新功能时,可能会发生以下几种情况之一:

  • 我轻松地实现了这个特性 因为它与 现有平台

  • 我使用 困难是因为我必须重写 相当一部分 平台基础

  • 客户端撤回请求,因为它 成本太高,无法实施 现有平台

  • 在项目开始时,大约六个月的时间里,所有的功能请求都属于类别1),因为系统小而灵活。但在过去的六个月里,大多数功能的实现都属于第2类)。系统是成熟的,每次我想添加新模块时,我都要进行重构和测试。此外,我发现自己打破了用来工作的东西,并修复了它(我没有为此得到报酬)

    客户开始对我实施新功能的时间和成本表示失望。对他们来说,许多功能请求的规模与他们六个月前请求的功能相同。例如,一位客户会问:“如果你去年花了1周的时间建立一个票务系统,那么今天为什么要花1个月的时间建立一个活动注册系统?活动注册系统比票务系统简单得多,应该只需要1周!”因为这种情况,我担心功能请求将很快进入第3类)。事实上,我自己已经花了很多钱,因为我自愿花了很多时间来支持这个项目

    当我诚实地告诉客户做某事所需的时间时,客户经常感到震惊。客户总是将我的估算值与项目的前几个月进行比较。我认为他们还没有准备好开发、维护和支持一个成熟的web应用程序的真正成本

    当我在一家全职公司工作时,经理们更愿意接受我的估计,甚至鼓励我记下数字,为意外情况做好准备。有没有办法让我的客户也这么想

    有谁能给我一些建议,告诉我如何在不花太多钱的情况下继续从事这个网络项目


    其他信息-我全职做自由职业者才一年。我还没有高端客户,但我正在慢慢地到达那里。随着时间的推移,我得到了质量更好的客户。

    最近我自己也在做自由职业者的事情(不同的领域),我在合同中加入了两件事;a) 如果要对框架进行任何重大(我认为)添加/更改,每个都被视为单独的项目,具有单独的交付要求和成本,b)我将提供适当级别的文档,以便如果他们对我的“估计”不满意,他们可以尝试其他人


    我有一个客户尝试了一次选项b;他们很快就回来了。

    在我看来,您的体系结构中似乎欠了一些技术债;就变化而言,它是脆弱的。此外,还不清楚您是否在正确的时间进行测试。编写测试的最佳时间是在编写代码之前,让测试作为代码的可执行规范发挥作用

    健壮的体系结构应该通过鼓励类之间的解耦来促进更改。这将限制添加新功能时更改的传播。听起来你的耦合比正常情况下要多,但如果不看代码,这几乎是不可能的。我只是根据你对症状的描述

    如果是这样的话,那么花一些时间改进底层架构可能是值得的。提前告知您的客户,基础系统不再符合他们的要求,您现在需要花一些时间,以便将来的更改可以更快、更便宜地完成。有些可能是你的错——如果是的话,也要诚实。我不认为期望客户机为支持其新功能所需的体系结构更改买单是不合理的。不过,如果部分原因是缺乏经验,你可能想自己承担一些成本,并将其记为一次学习经历。如果您可能会失去客户,您可能还是希望这样做。

    看看文章

    有人能给我提供建议吗 继续处理此web项目 不吃太多的费用 我自己

    透明度和沟通是你最好的工具。如果你的客户无法理解为什么一件事情过去需要一周的时间,现在需要三周的时间,你需要能够更好地解释。根据客户的专业领域,你可能会找到一个与他们产生共鸣的隐喻——比如,尝试在T型车架上制造普锐斯,或者尝试用没有元音的打字机书写战争与和平。不要为你诚实的估计感到羞耻,也不要被欺负。并尽可能多地与客户分享您的流程和您面临的障碍-您甚至会发现他们有一些有价值的建议

    关于技术债务的问题——我同意这是潜在的问题——TDD将带您走得更远,因为广泛的测试覆盖率允许频繁的重构。想一想什么样的设计会允许您轻松地进行所有更改,并通过测试和重构逐步实现该设计。也许你不得不承担这些费用,因为这些功能都已经支付了。但是,展望未来,在你的估计中包括重构的成本——不要把它看作是填充。填充(可以说)是不诚实的;维护您公司的设计