Technical debt kills velocity. Thus, I like to include "No increased technical debt" in the Definition of Done. Without this, you can't achieve sustainable pace. This is illustrated by the picture below (borrowed from the Technical Debt - How not to ignore it presentation from Henrik Kniberg):
To me, all these things are obvious and you can even prove it with numbers (by measuring the velocity over time). Explain these concepts to your client, explain him that TDD is one of the techniques allowing to control technical debt. Then, let him choose (or choose for him).
How you run your project internally is your business. Don't involve them in this decision. They are not experts in software development processes. Ask them about business requirements and things they know about.
Sound like you are doing this to improve project quality. Do you think it will cost more to do TDD? Why work to convince them of something and then ask their approval? Did you ask if you could do waterfall on the last project?
Why would your client even notice the transition to TDD? Stressful, bumpy; how so?
Tell the client why you are upgrading to TDD. I'm sure the reasons are as compelling to them as they are to you. To me, TDD first of all means a much greater sense of reliability on what you produce.
Surely your client remembers all the regressions and manual testing from your last project?
I don't know of any specific illustrations for you (the web is full of articles and blogs, but I'm not aware of any videos), but you pretty much answered your own question...
we used waterfall... testing was an after thought and as a result unit-testing code coverage is significantly lower than we feel comfortable with, not to mention the never-ending 'we are ALMOST done' problem
You just need to be honest with your client. Explain to them what the project methodology you used on your last project cost them in terms of flexibility, maintainability, and your ability to confidently provide them with quality code. Explain to them how TDD addresses that, and explain that you anticipate a slower start due to using a new methodology.
Illustrate for them, as concretely as possible, what they will gain, and it should be an easy sell. I would, however, approach it more from the "this is what we're planning on doing" angle, rather than the "can we please do this?" angle. Give them the impression (without being dishonest) that you are already planning on going this way and any change to that plan will be an inconvenience to you and your team, and will likely cost them productivity.
我不知道有任何视频,但向他们解释一下,你花了 N 个工时重新设计了上一个项目的某个功能,因为原始设计不正确,直到你开始测试才发现;如果使用 TDD,则需要 M (<
另外,请解释一下,由于经过深思熟虑的测试,拥有较少错误的软件的置信水平将提高 Y%。
然后解释一下,您估计第一个项目的学习曲线需要 X 小时,并询问他们,当初始时间投资在这些项目上折旧时,所有未来项目的给定收益是否值得。
I'm not aware of any videos, but explain to them that it took you N man-hours to redesign a certain feature on the last project due to original design not being correct taht was not caught until you started testing; and with TDD it would take M (<<N) man-hours since you would not spend the extra hours working based on a bad design/bug as happened last time.
Also, explain that the confidence level of having less buggy software will be raised by Y percent due to thought-out tests.
Then explain you estimate X hours for learning curve on the FIRST peoject, and ask them if the given benefits on ALL future projects will be worth it, when the initial time investment is depreciated across those.
Firstly, unit testing isn't unique to Agile methodologies; I've been around a while and have seen it used on waterfall projects. In fact, I heard of unit testing long before I heard of Agile!
Afraid I can't point you to any videos that will help convince a client to switch development methodologies. Google may help though; if not with videos, then maybe with studies, blogs, etc.
Anyway, one suggestion for improving the chances that the client will accept your reduced productivity during your learning curve is to reduce his costs somehow. E.g. if you're billing by the hour either charge less by the hour for time spent learning, or just don't bill for those learning hours.
I spent the time since asking this question looking for the best videos I could and I've come across a number that are very close to what I need. I will post them here so that others will find them if they are in a similar position to me.
I realise that I asked more about TDD - but these videos capture a good portion of the message I'm trying to drive home... especially 'Why does Agile Software Development Pay' and 'Scrum in under 10 minutes'... it is the process of being responsive to change, producing higher quality code, having fewer defects and faster development cycles.
发布评论
评论(7)
技术债务扼杀了速度。因此,我喜欢在完成的定义中包含“不增加技术债务”。如果没有这一点,您就无法实现可持续的步伐。下图说明了这一点(借自 技术债务 - 如何不忽视它 来自 Henrik Kniberg 的演示):
alt text http://img27.imageshack.us/img27/329/screenshotkq.png
对我来说,所有这些事情都是显而易见的,你甚至可以用数字来证明它(通过测量速度)时间)。向您的客户解释这些概念,向他解释 TDD 是控制技术债务的技术之一。然后,让他选择(或为他选择)。
Technical debt kills velocity. Thus, I like to include "No increased technical debt" in the Definition of Done. Without this, you can't achieve sustainable pace. This is illustrated by the picture below (borrowed from the Technical Debt - How not to ignore it presentation from Henrik Kniberg):
alt text http://img27.imageshack.us/img27/329/screenshotkq.png
To me, all these things are obvious and you can even prove it with numbers (by measuring the velocity over time). Explain these concepts to your client, explain him that TDD is one of the techniques allowing to control technical debt. Then, let him choose (or choose for him).
如何在内部运行项目是你的事。不要让他们参与这个决定。他们不是软件开发过程方面的专家。询问他们业务需求和他们所了解的事情。
听起来您这样做是为了提高项目质量。你认为做TDD会花费更多吗?为什么要努力让他们相信某件事,然后征求他们的批准呢?你有没有问过上一个项目是否可以做瀑布?
How you run your project internally is your business. Don't involve them in this decision. They are not experts in software development processes. Ask them about business requirements and things they know about.
Sound like you are doing this to improve project quality. Do you think it will cost more to do TDD? Why work to convince them of something and then ask their approval? Did you ask if you could do waterfall on the last project?
为什么您的客户会注意到向 TDD 的转变?压力大、坎坷;为何如此?
告诉客户您为什么要升级到 TDD。我相信这些理由对他们来说和对你一样有吸引力。对我来说,TDD 首先意味着对你所生产的产品有更大的可靠性。
您的客户肯定还记得您上一个项目中的所有回归和手动测试吗?
Why would your client even notice the transition to TDD? Stressful, bumpy; how so?
Tell the client why you are upgrading to TDD. I'm sure the reasons are as compelling to them as they are to you. To me, TDD first of all means a much greater sense of reliability on what you produce.
Surely your client remembers all the regressions and manual testing from your last project?
我不知道你有什么具体的插图(网络上到处都是文章和博客,但我不知道有任何视频),但你几乎回答了你自己的问题......
你只需要诚实地对待你的客户。向他们解释您在上一个项目中使用的项目方法在灵活性、可维护性以及您自信地为他们提供高质量代码的能力方面给他们带来了哪些成本。向他们解释 TDD 如何解决这个问题,并解释您预计由于使用新的方法而启动速度会变慢。
尽可能具体地向他们说明他们将获得什么,这应该很容易推销。然而,我会更多地从“这就是我们计划做的事情”的角度来看待它,而不是“我们可以这样做吗?”角度。让他们留下这样的印象(但不要不诚实):您已经计划这样做,对该计划的任何更改都会给您和您的团队带来不便,并且可能会降低他们的生产力。
I don't know of any specific illustrations for you (the web is full of articles and blogs, but I'm not aware of any videos), but you pretty much answered your own question...
You just need to be honest with your client. Explain to them what the project methodology you used on your last project cost them in terms of flexibility, maintainability, and your ability to confidently provide them with quality code. Explain to them how TDD addresses that, and explain that you anticipate a slower start due to using a new methodology.
Illustrate for them, as concretely as possible, what they will gain, and it should be an easy sell. I would, however, approach it more from the "this is what we're planning on doing" angle, rather than the "can we please do this?" angle. Give them the impression (without being dishonest) that you are already planning on going this way and any change to that plan will be an inconvenience to you and your team, and will likely cost them productivity.
我不知道有任何视频,但向他们解释一下,你花了 N 个工时重新设计了上一个项目的某个功能,因为原始设计不正确,直到你开始测试才发现;如果使用 TDD,则需要 M (<
另外,请解释一下,由于经过深思熟虑的测试,拥有较少错误的软件的置信水平将提高 Y%。
然后解释一下,您估计第一个项目的学习曲线需要 X 小时,并询问他们,当初始时间投资在这些项目上折旧时,所有未来项目的给定收益是否值得。
I'm not aware of any videos, but explain to them that it took you N man-hours to redesign a certain feature on the last project due to original design not being correct taht was not caught until you started testing; and with TDD it would take M (<<N) man-hours since you would not spend the extra hours working based on a bad design/bug as happened last time.
Also, explain that the confidence level of having less buggy software will be raised by Y percent due to thought-out tests.
Then explain you estimate X hours for learning curve on the FIRST peoject, and ask them if the given benefits on ALL future projects will be worth it, when the initial time investment is depreciated across those.
首先,单元测试并不是敏捷方法所独有的。我已经使用了一段时间并且看到它在瀑布项目中使用。事实上,我早在听说敏捷之前就听说过单元测试!
恐怕我无法向您推荐任何有助于说服客户改变开发方法的视频。不过,谷歌可能会有所帮助;如果不是通过视频,那么也许可以通过研究、博客等。
无论如何,为了提高客户在学习曲线期间接受生产力下降的机会,一个建议是以某种方式降低他的成本。例如,如果您按小时计费,则可以按小时减少学习时间的费用,或者干脆不按这些学习时间计费。
Firstly, unit testing isn't unique to Agile methodologies; I've been around a while and have seen it used on waterfall projects. In fact, I heard of unit testing long before I heard of Agile!
Afraid I can't point you to any videos that will help convince a client to switch development methodologies. Google may help though; if not with videos, then maybe with studies, blogs, etc.
Anyway, one suggestion for improving the chances that the client will accept your reduced productivity during your learning curve is to reduce his costs somehow. E.g. if you're billing by the hour either charge less by the hour for time spent learning, or just don't bill for those learning hours.
自从问这个问题以来,我花了很多时间寻找最好的视频,我发现了一些非常接近我需要的视频。我会将它们发布在这里,以便其他与我处境相似的人可以找到它们。
我意识到我问了更多关于 TDD 的问题 - 但这些视频捕捉到了我想要传达的信息的很大一部分......尤其是“为什么敏捷软件开发会付费”和“Scrum 在 10 分钟内完成”......是响应变化、生成更高质量的代码、更少的缺陷和更快的开发周期的过程。
I spent the time since asking this question looking for the best videos I could and I've come across a number that are very close to what I need. I will post them here so that others will find them if they are in a similar position to me.
I realise that I asked more about TDD - but these videos capture a good portion of the message I'm trying to drive home... especially 'Why does Agile Software Development Pay' and 'Scrum in under 10 minutes'... it is the process of being responsive to change, producing higher quality code, having fewer defects and faster development cycles.