尽管Steve Yegge的智慧,大多数开发人员都面临着从非技术客户那里收集的需求.有时,有些项目经理会与客户打交道并转换他们的要求,有时则不然.无论如何,要求将改变的事实是不可避免的.
大多数构成"良好的编程实践"的东西都与开发适应性强的系统有关,因此它们可以承受不断变化的要求.YAGNI,DRY,松散耦合等原理对此有所贡献.诸如敏捷之类的迭代开发过程也试图解决尝试击中移动目标的问题,当然,正在测试的系统使得进行更改变得更加可行.
尽管如此,似乎对于我们中的许多人而言,不断变化的要求不仅会损害我们软件的质量,还会耗尽我们的动力并使我们想要刺伤某人.
这个问题是关于如何管理客户,使他们能够以他们需要的方式改变他们的要求,同时阻止任意或无聊的变化.你怎么做呢?
您是否有项目经理将开发人员与客户隔离开来?
您是否有正式的变更管理流程?改变经理?
客户在真正需要变更时有多难?
相反,客户在"轻浮"时获得变更是多么容易?
在解释变更成本时,您给了客户多少细节?
在收到变更请求后,您能以多快的速度向客户提供此信息?
哪些因素可以破坏这个过程(例如PM谁不能拒绝客户?)
什么对你有用?
Jim.. 9
如果您正在寻找理想的世界,客户永远不会改变主意,或者您获得了理想的规格 - 那么您的业务就是错误的.话虽这么说,我发现用于管理客户期望和变更请求的最有效机制是建立一个准确的衡量系统.
这就是我管理团队的方式:
1)我们从用户故事开始.客户参与编写它们,开发团队估计每个用户故事将以相对方式进行多长时间.
2)利用先前的经验,我采用这些相对估计(故事点)并创建一个粗略的时间表,以确定项目的主要里程碑何时完成.
3)在这些里程碑中,我们进行为期2周的迭代.客户参与设置批准标准以及故事是否已获批准.简单的刻录图表显示了客户与实现启动目标的距离.
4)在批准会议期间,客户通常会要求更改,因为该功能未达到预期效果(即使它符合其原始批准标准).此时,您将生成一个包含新估计值的新故事.您还可以适当调整里程碑日期.然后将球放回客户法庭:
很多时候他们意识到他们的变更请求是不值得的(他们必须得到老板的批准)我们会杀掉新功能
有时这很重要,所以我们会延迟截止日期以获得该功能
最后,总是可以选择杀死另一个不太重要的功能,这需要花费相同的时间.
关键不是要远离变更请求,而是要确定每个变更请求都会对产品产生影响.没有免费午餐这样的东西.
如果您正在寻找理想的世界,客户永远不会改变主意,或者您获得了理想的规格 - 那么您的业务就是错误的.话虽这么说,我发现用于管理客户期望和变更请求的最有效机制是建立一个准确的衡量系统.
这就是我管理团队的方式:
1)我们从用户故事开始.客户参与编写它们,开发团队估计每个用户故事将以相对方式进行多长时间.
2)利用先前的经验,我采用这些相对估计(故事点)并创建一个粗略的时间表,以确定项目的主要里程碑何时完成.
3)在这些里程碑中,我们进行为期2周的迭代.客户参与设置批准标准以及故事是否已获批准.简单的刻录图表显示了客户与实现启动目标的距离.
4)在批准会议期间,客户通常会要求更改,因为该功能未达到预期效果(即使它符合其原始批准标准).此时,您将生成一个包含新估计值的新故事.您还可以适当调整里程碑日期.然后将球放回客户法庭:
很多时候他们意识到他们的变更请求是不值得的(他们必须得到老板的批准)我们会杀掉新功能
有时这很重要,所以我们会延迟截止日期以获得该功能
最后,总是可以选择杀死另一个不太重要的功能,这需要花费相同的时间.
关键不是要远离变更请求,而是要确定每个变更请求都会对产品产生影响.没有免费午餐这样的东西.