If you are looking for the ideal world where the customer never changes his mind or you get the ideal spec - you are in the wrong business. That being said, the most effective mechanism I have found for managing customer expectations and change requests is to institute an accurate system of measurement.
This is how I run my team:
1) We start with user stories. The customer is involved in writing them and the development team estimates how long each user story will take in a relative manner.
2) Using prior experience I take these relative estimates (story points) and create a rough schedule for when major milestones of the project will be complete.
3) Within these milestones we run 2-week iterations. The customer is involved in setting the approval criteria and whether or not the story has been approved. A simple burn down chart shows the customer how close we are to meeting the launch goal.
4) Often time during the approval sessions the customer will request a change because the feature did not turn out how he expected it (even though it met his original approval criteria). At this time you generate a new story with a new estimate. You can also adjust your milestone dates appropriately. This then puts the ball back into the customers court:
Often times they realize their change request isn't worth it (they'd have to get approval from their boss) and we'll kill the new feature
Sometimes it is important so we'll delay the due date to get the feature in
And finally, there's always the option to kill another not so important feature that will take an equivalent amount of time.
The key is not to run away from change requests, but to establish that every change request has consequences on the product. There's no such thing as a free lunch.
I work as indpenedent developer and so contact with customers directly. It's normal that most of the time they have no idea what they actually want. So we start slowly and I give them prototype early on to play with and then the changes will be gradualy made. If I think that customers wants "frivolous" change then I tell him that this change doesn't work or is not needed. If it is 5 min of work then I might even do it anyway.
It helps to add later on to the contract some maintenance clause to get money for those small changes that will come up later on. For bigger changes you just charge by the hour.
Managing the customer is hard, and it is something that very easily can go wrong.
I find that as early as possible you need to gain the trust of the customer. For me I think you can do this by:
Ask the customer to appoint a product manager - who is clear thinking enough to communicate the requirements he/she wants, and look to build a strong working relationship with him/her.
Really try to understand their business - you don't need to be a domain expert, but you need to know where the customer is coming from.
Ask pertinent questions about what they want - don't assume what they ask for (at first) is what they really want.
At first welcome all changes. This is not the customer being annoying and fickle, it as an opportunity to better understand what the customer really wants. If this costs you time/money, then you may need to accept it as a loss leader.
Deliver a prototype early, and incorporate as much customer feedback as practicable.
Give the customer a kick arse product.
Once you have done this, and the customer trusts you, then you will be in a position to start knocking back unreasonable changes, or ask for extra payments/time for things that were previously considered out of scope.
Of course, you won't be able to build this sort of relationship with every customer, some are idiots (in this case see if you can have a different product manager appointed) but you should always do as much as you can to build an effective working relationship.
You can’t expect customers to know what they want at the start, so you must be adaptable. But also you need to stop change for changes sake.
This is for ‘internal’ customers.
I have found that bargaining with the customer is an effective way to go. They can have whatever feature they want if they wait for it, or if they sacrifice some other (yet to be implemented) features. This forces them to think about the value of the change they are asking for in relation to the system as a whole.
Sometimes this works well and a good compromise is reached. Other times the customer throws their toys out of the pram and goes however high they have to get the feature implemented and quality is reduced.
If the customer is paying, it is a different ball game. They need to be made aware that change costs, and that the cost increases as the product nears completion. This means that you have to do a lot of up front analysis about what you will deliver and make sure the spec is agreed upon. So then you can measure what has changed. This may not be the most effective solution for either party but it does keep things cut and dry. So they are not dissatisfied and you don’t end up doing loads of work for free.
In software engineering, change is just a fact. It will happen. For us, everything comes at a price. We'll make just about any change the clients wants, but there is always a time estimate and a cost associated with it. Do we ever tell the client no -- not normally, but sometimes the changes request comes in at a very high cost. We do draw the line at potential security threats etc. in which case we calmly explain to them that we can't accommodate the request.
How much do we explain to the customer, we explain where the money is going to be allocated, this much for development, this much for analysis etc. We don't explicitly tell them why something costs the way it does. Now I will admit, this does vary a little with some of our clients. Some of them get very detailed billing as to exactly how many hours are spent where. To get the contract we had to agree to it, although this is very rare for us.
We have sales people who can't say no at times, and that can cause problems. We have spent a lot of time working on that, but unfortunately it still crops up. We combat it by explaining how much money they cost us by quoting something without researching what it will take. Transparency is key at all levels. Everyone has to know how their decisions affect the bottom line.
Do we do frivolous changes? Yep. What you have to remember is that when you bill hourly most of the time a 5 minute change is billed at a full hour, so that is quite lucrative. We explain all of this before like we do with any change request so they are aware of it, but it tends to help discourage such behavior unless it is really important. The fact is that we treat all changes the same. We don't assume we know what is considered frivolous to them no matter how absurd we think it might be. We have a formal change process where the customer asks for something we write it down and get them to sign off that is what we evaluate it and present a Cost of Work Estimate. They either agree in which case they formally sign a document letting us know it is ok to start, or they rescind the request. We try to be diligent, but we let them know that it will take a few days for us to get a response to their request.
A coworker of mine gave me the best advice I have ever heard about managing customer relations ships. It's a give and take. To make the customer happy, you have to be willing to help them when they need something, but at the same time, you have to be able to say no. When dealing with people they want you to help them, but they also want you to have a spine and stand up for yourself. It becomes a win-win situation that way.
I’d prefer a term of evolving requirements to “changing requirements”. Professor M.M.Lehman (http://www.doc.ic.ac.uk/~mml/ and http://en.wikipedia.org/wiki/Meir_Manny_Lehman) has done a considerable contribution into research on software evolution; his works also suggest that not all types of requirements evolve. One might consider themselves lucky if they happen to work on one of these systems, where requirements stay the same (i.e. math libraries etc).
To the rest of us experience suggests that developers prefer as much information about requirements up front as possible, whereas customers or end-users value an ability to specify or adjust requirements as late as possible into the development process. The former need the detailed information to help planning and designing the solution, the latter can gain a strategic advantage through changing a requirement late, because it gives customer some room for manoeuvre to respond to the changing environment or information gained on as a result of the earlier stages / iterations of the project. A trade-off between the ability to have a detailed plan and change things largely determines the development process itself (waterfall, agile, spiral etc).
Some practical advice managing the evolution of requirements:
Build in some room into the initial plan to account for evolving requirements, multiple check points or iterations.
Either put volatile requirements into the beginning of the project so that some kind of prototyping or feasibility study is likely to clarify them or plan for the change late into the project.
Monitor that the requirements are still relevant.
Have an up to date, prioritised list of current requirements handy. Nothing else helps to keep evolution in control as a good visibility to all stakeholders of current “must haves” including their relative priority and cost.
Keep managing customer expectations on how long things are going to take; this also helps to keep focus.
Introduce a formal process for changing or adding requirements if you need. The process description needs to specify roles of these involved, frequency of reviews etc. It could serve as a good safeguard against some political and most opportunistic but not essential requirements.
Build in some time for refactoring even for the first version. You’re very likely to throw all or part of the solution as a result of additional knowledge gain during the development.
The customer comes to you to do something because they either don't have the time to do it or they don't know what to do (and want to pay you to do it for them). If you have changing requirements, it's because of the latter. In other words, they are paying you to figure out the details! And they know what they like and don't like but they won't know how it works.
Recognize this and whatever the solution needs to be falls in to place.
发布评论
评论(7)
如果您正在寻找客户永远不会改变主意的理想世界,或者您获得了理想的规格 - 您就进入了错误的行业。 话虽这么说,我发现管理客户期望和变更请求的最有效机制是建立一个准确的衡量系统。
这就是我管理团队的方式:
1)我们从用户故事开始。 客户参与编写它们,开发团队以相对方式估计每个用户故事将花费多长时间。
2)利用以前的经验,我会进行这些相对估计(故事点),并为项目的主要里程碑何时完成制定一个粗略的时间表。
3) 在这些里程碑中,我们进行两周的迭代。 客户参与设置批准标准以及故事是否已被批准。 一个简单的燃尽图向客户展示了我们离实现发布目标有多近。
4) 在批准会议期间,客户经常会请求更改,因为该功能没有达到他的预期(即使它符合他最初的批准标准)。 此时,您将生成一个具有新估计的新故事。 您还可以适当调整里程碑日期。 然后,这把球又回到了客户的法庭上:
关键不是逃避变更请求,而是要确定每个变更请求都会对产品产生影响。 天下没有免费的午餐。
If you are looking for the ideal world where the customer never changes his mind or you get the ideal spec - you are in the wrong business. That being said, the most effective mechanism I have found for managing customer expectations and change requests is to institute an accurate system of measurement.
This is how I run my team:
1) We start with user stories. The customer is involved in writing them and the development team estimates how long each user story will take in a relative manner.
2) Using prior experience I take these relative estimates (story points) and create a rough schedule for when major milestones of the project will be complete.
3) Within these milestones we run 2-week iterations. The customer is involved in setting the approval criteria and whether or not the story has been approved. A simple burn down chart shows the customer how close we are to meeting the launch goal.
4) Often time during the approval sessions the customer will request a change because the feature did not turn out how he expected it (even though it met his original approval criteria). At this time you generate a new story with a new estimate. You can also adjust your milestone dates appropriately. This then puts the ball back into the customers court:
The key is not to run away from change requests, but to establish that every change request has consequences on the product. There's no such thing as a free lunch.
我作为独立开发人员工作,因此直接与客户联系。 大多数时候他们不知道自己真正想要什么,这很正常。 所以我们慢慢开始,我很早就给他们提供原型来玩,然后逐渐进行更改。 如果我认为客户想要“琐碎”的改变,那么我告诉他这个改变不起作用或不需要。 如果这是 5 分钟的工作,那么我什至可能会做。
它有助于稍后在合同中添加一些维护条款,以便为以后出现的那些小改动获得资金。 对于较大的变化,您只需按小时收费。
I work as indpenedent developer and so contact with customers directly. It's normal that most of the time they have no idea what they actually want. So we start slowly and I give them prototype early on to play with and then the changes will be gradualy made. If I think that customers wants "frivolous" change then I tell him that this change doesn't work or is not needed. If it is 5 min of work then I might even do it anyway.
It helps to add later on to the contract some maintenance clause to get money for those small changes that will come up later on. For bigger changes you just charge by the hour.
管理客户很困难,而且很容易出错。
我发现您需要尽早获得客户的信任。 对我来说,我认为你可以通过以下方式做到这一点:
一旦你做到了这一点,并且客户信任你,那么你将能够开始取消不合理的更改,或者为之前被认为超出范围的事情要求额外的付款/时间。
当然,您无法与每个客户建立这种关系,有些客户是白痴(在这种情况下看看您是否可以任命不同的产品经理),但您应该始终这样做您竭尽全力建立有效的工作关系。
Managing the customer is hard, and it is something that very easily can go wrong.
I find that as early as possible you need to gain the trust of the customer. For me I think you can do this by:
Once you have done this, and the customer trusts you, then you will be in a position to start knocking back unreasonable changes, or ask for extra payments/time for things that were previously considered out of scope.
Of course, you won't be able to build this sort of relationship with every customer, some are idiots (in this case see if you can have a different product manager appointed) but you should always do as much as you can to build an effective working relationship.
你不能指望客户一开始就知道他们想要什么,所以你必须适应。 但你也需要停止为了改变而改变。
这是针对“内部”客户的。
我发现与客户讨价还价是一种有效的方法。 如果他们等待,或者牺牲一些其他(尚未实现)的功能,他们就可以拥有他们想要的任何功能。 这迫使他们思考他们所要求的变革相对于整个系统的价值。
有时这很有效并且可以达成良好的妥协。 其他时候,顾客将玩具从婴儿车中扔出,无论达到何种程度,他们都必须实现该功能,但质量却下降了。
如果顾客付钱,那就是另一回事了。 他们需要意识到成本的变化,以及随着产品接近完成而成本增加。 这意味着您必须对您将交付的内容进行大量的预先分析,并确保规格得到商定。 这样你就可以衡量发生了什么变化。 对于任何一方来说,这可能都不是最有效的解决方案,但它确实能让事情变得简单明了。 所以他们不会不满意,你最终也不会免费做大量的工作。
You can’t expect customers to know what they want at the start, so you must be adaptable. But also you need to stop change for changes sake.
This is for ‘internal’ customers.
I have found that bargaining with the customer is an effective way to go. They can have whatever feature they want if they wait for it, or if they sacrifice some other (yet to be implemented) features. This forces them to think about the value of the change they are asking for in relation to the system as a whole.
Sometimes this works well and a good compromise is reached. Other times the customer throws their toys out of the pram and goes however high they have to get the feature implemented and quality is reduced.
If the customer is paying, it is a different ball game. They need to be made aware that change costs, and that the cost increases as the product nears completion. This means that you have to do a lot of up front analysis about what you will deliver and make sure the spec is agreed upon. So then you can measure what has changed. This may not be the most effective solution for either party but it does keep things cut and dry. So they are not dissatisfied and you don’t end up doing loads of work for free.
在软件工程中,变化只是一个事实。 它会发生。 对我们来说,一切都是有代价的。 我们将做出客户想要的任何改变,但总是有一个时间估计和与之相关的成本。 我们是否曾告诉客户“不”——通常不会,但有时变更请求的成本非常高。 我们确实对潜在的安全威胁等划清界限。在这种情况下,我们会冷静地向他们解释我们无法满足该请求。
我们向客户解释了多少,我们解释了资金将被分配到哪里,这么多用于开发,这么多用于分析等等。我们没有明确告诉他们为什么某些东西会这样花费。 现在我承认,这对于我们的一些客户来说确实有点不同。 他们中的一些人会得到非常详细的账单,确切地知道在哪里花费了多少时间。 为了获得合同,我们必须同意,尽管这对我们来说非常罕见。
我们的销售人员有时无法拒绝,这可能会导致问题。 我们花了很多时间来解决这个问题,但不幸的是它仍然出现。 我们通过引用某些内容来解释它们花了我们多少钱来对抗它,而不研究它会花费什么。 透明度在各个层面都是关键。 每个人都必须知道他们的决定如何影响底线。
我们会做一些无意义的改变吗? 是的。 您必须记住的是,当您按小时计费时,大多数情况下 5 分钟的变化将按整小时计费,因此这是相当有利可图的。 我们之前会像处理任何变更请求一样解释所有这些,以便他们意识到这一点,但这往往有助于阻止此类行为,除非它真的很重要。 事实上,我们对所有变化都一视同仁。 我们并不认为我们知道什么对他们来说是无聊的事情,无论我们认为它有多么荒谬。 我们有一个正式的变更流程,客户要求我们写下来并让他们签字,这就是我们对其进行评估并提出工作成本估算的内容。 他们要么同意,在这种情况下,他们正式签署一份文件,让我们知道可以开始,要么撤销请求。 我们尽力做到勤奋,但我们让他们知道我们需要几天时间才能得到对他们请求的答复。
我的一位同事给了我关于管理客户关系船舶的最好建议。 这是一种给予和接受。 为了让客户满意,你必须愿意在他们需要帮助时提供帮助,但同时你必须能够拒绝。 在与人打交道时,他们希望你帮助他们,但他们也希望你有勇气坚持自己。 这样就形成了双赢的局面。
In software engineering, change is just a fact. It will happen. For us, everything comes at a price. We'll make just about any change the clients wants, but there is always a time estimate and a cost associated with it. Do we ever tell the client no -- not normally, but sometimes the changes request comes in at a very high cost. We do draw the line at potential security threats etc. in which case we calmly explain to them that we can't accommodate the request.
How much do we explain to the customer, we explain where the money is going to be allocated, this much for development, this much for analysis etc. We don't explicitly tell them why something costs the way it does. Now I will admit, this does vary a little with some of our clients. Some of them get very detailed billing as to exactly how many hours are spent where. To get the contract we had to agree to it, although this is very rare for us.
We have sales people who can't say no at times, and that can cause problems. We have spent a lot of time working on that, but unfortunately it still crops up. We combat it by explaining how much money they cost us by quoting something without researching what it will take. Transparency is key at all levels. Everyone has to know how their decisions affect the bottom line.
Do we do frivolous changes? Yep. What you have to remember is that when you bill hourly most of the time a 5 minute change is billed at a full hour, so that is quite lucrative. We explain all of this before like we do with any change request so they are aware of it, but it tends to help discourage such behavior unless it is really important. The fact is that we treat all changes the same. We don't assume we know what is considered frivolous to them no matter how absurd we think it might be. We have a formal change process where the customer asks for something we write it down and get them to sign off that is what we evaluate it and present a Cost of Work Estimate. They either agree in which case they formally sign a document letting us know it is ok to start, or they rescind the request. We try to be diligent, but we let them know that it will take a few days for us to get a response to their request.
A coworker of mine gave me the best advice I have ever heard about managing customer relations ships. It's a give and take. To make the customer happy, you have to be willing to help them when they need something, but at the same time, you have to be able to say no. When dealing with people they want you to help them, but they also want you to have a spine and stand up for yourself. It becomes a win-win situation that way.
我更喜欢“不断变化的需求”这个术语,而不是“不断变化的需求”。 MMLehman 教授 (http://www.doc.ic.ac.uk/~mml/ 和 http://en.wikipedia.org/wiki/Meir_Manny_Lehman)对软件演化研究做出了相当大的贡献; 他的作品还表明,并非所有类型的需求都会发生变化。 如果人们碰巧在这些系统之一上工作,并且要求保持不变(即数学库等),那么他们可能会认为自己很幸运。
对于我们其他人来说,经验表明,开发人员更喜欢预先获得尽可能多的有关需求的信息,而客户或最终用户则看重在开发过程中尽可能晚地指定或调整需求的能力。 前者需要详细的信息来帮助规划和设计解决方案,后者可以通过后期更改需求来获得战略优势,因为它为客户提供了一些回旋余地,以应对不断变化的环境或因需求而获得的信息。项目的早期阶段/迭代。 制定详细计划和改变事物的能力之间的权衡在很大程度上决定了开发过程本身(瀑布式、敏捷式、螺旋式等)。
管理需求演变的一些实用建议:
在初始计划中构建一些空间,以考虑不断变化的需求、多个检查点或迭代。
在初始计划中构建一些空间,
要么在项目开始时提出不稳定的要求,以便某种原型设计或可行性研究可能会澄清这些要求,要么为项目后期的变更做好计划。
监控要求是否仍然相关。
手边准备一份最新的、按优先顺序排列的当前需求列表。 没有什么比让所有利益相关者更好地了解当前“必须具备的”(包括其相对优先级和成本)更能帮助控制演变。
持续管理客户对事情需要多长时间的期望; 这也有助于保持专注。
如果需要,引入更改或添加要求的正式流程。 流程描述需要指定相关人员的角色、审查频率等。它可以很好地防范某些政治和最机会主义的要求,但不是必要的要求。
即使是第一个版本,也需要一些时间进行重构。 由于在开发过程中获得了额外的知识,您很可能会放弃全部或部分解决方案。
I’d prefer a term of evolving requirements to “changing requirements”. Professor M.M.Lehman (http://www.doc.ic.ac.uk/~mml/ and http://en.wikipedia.org/wiki/Meir_Manny_Lehman) has done a considerable contribution into research on software evolution; his works also suggest that not all types of requirements evolve. One might consider themselves lucky if they happen to work on one of these systems, where requirements stay the same (i.e. math libraries etc).
To the rest of us experience suggests that developers prefer as much information about requirements up front as possible, whereas customers or end-users value an ability to specify or adjust requirements as late as possible into the development process. The former need the detailed information to help planning and designing the solution, the latter can gain a strategic advantage through changing a requirement late, because it gives customer some room for manoeuvre to respond to the changing environment or information gained on as a result of the earlier stages / iterations of the project. A trade-off between the ability to have a detailed plan and change things largely determines the development process itself (waterfall, agile, spiral etc).
Some practical advice managing the evolution of requirements:
Build in some room into the initial plan to account for evolving requirements, multiple check points or iterations.
Either put volatile requirements into the beginning of the project so that some kind of prototyping or feasibility study is likely to clarify them or plan for the change late into the project.
Monitor that the requirements are still relevant.
Have an up to date, prioritised list of current requirements handy. Nothing else helps to keep evolution in control as a good visibility to all stakeholders of current “must haves” including their relative priority and cost.
Keep managing customer expectations on how long things are going to take; this also helps to keep focus.
Introduce a formal process for changing or adding requirements if you need. The process description needs to specify roles of these involved, frequency of reviews etc. It could serve as a good safeguard against some political and most opportunistic but not essential requirements.
Build in some time for refactoring even for the first version. You’re very likely to throw all or part of the solution as a result of additional knowledge gain during the development.
客户来找您做某事是因为他们要么没有时间做这件事,要么不知道该做什么(并且想要付钱给您为他们做这件事)。 如果您的需求发生变化,那是因为后者。 换句话说,他们付钱给你是为了让你弄清楚细节! 他们知道自己喜欢什么、不喜欢什么,但他们不知道它是如何运作的。
认识到这一点,无论需要什么解决方案就可以落实到位。
The customer comes to you to do something because they either don't have the time to do it or they don't know what to do (and want to pay you to do it for them). If you have changing requirements, it's because of the latter. In other words, they are paying you to figure out the details! And they know what they like and don't like but they won't know how it works.
Recognize this and whatever the solution needs to be falls in to place.