到目前为止,我见过的最有趣的实际调度方法之一是证据基于调度,它是 FogCreek FogBugz 6.0 版本的一部分。 请参阅上面链接的 Joel 的博客文章,了解概要和一些示例。
By far one of the most interesting approaches I've ever seen for scheduling realistically is Evidence Based Scheduling which is part of the FogCreek FogBugz 6.0 release. See Joel's blog post linked above for a synopsis and some examples.
If an estimate blew out, attempt to identify if it was just random (environment broke, some once off tricky bug etc) or if there was something that you didn't identify.
If an esimate was way too large, identify what it was that you thought was going to take so long and work out why it didn't.
Doing that enough will hopefully help developers in their estimates.
For example, if a dev thinks that writing tests for a controller is going to take ages and then it ends up taking less time than he imagined, the next estimate you make for a controller of similar scope you can keep that in mind.
I estimate with my teammates iteratively until we reach consensus. Sure, we make mistakes but we don't calculate the "velocity" factor explicitely but rather, we use gathered experience in our new estimation debates.
I've found that estimating time will get you so far. Interuptions with other tasks, unforseen circumstances or project influences will inevitably change your time frames and if you were to constantly re-asses you would waste much time managing when you could be developing.
So for us here, we give an initial estimation based on experience to the solution for time (we do not use a model, I've not found one that works well enough in our environment) but do not judge our KPIs against it, nor do we assure the business that this deadline WILL be hit. Our development approach here is largely reactive, and it seems to fill the business' requirements of us very well.
when estimates are off, there is almost always a blatant cause, which leads to a lesson learned. Recent ones from memory:
user interface assumed .NET functionality that did not exist (the ability to insert a new row and edit it inline in a GridView); lesson learned is to verify functionality of chosen classes before committing to estimate. This mistake cost a week.
ftp process assumed that FtpWebRequest could talk to a bank's secure ftp server; it turned out that there's a known bug with this class if the ftp server returns anything other than a backslash for the current directory; lesson learned is to google for 'bug' and 'problem' with class name, not just 'tutorial' and 'example' to make sure there are no 'gotchas' lurking. This mistake cost three days.
these lessons go into a Project Estimation and Development "checklist" document, so they won't be forgotten for the next project
发布评论
评论(5)
到目前为止,我见过的最有趣的实际调度方法之一是证据基于调度,它是 FogCreek FogBugz 6.0 版本的一部分。 请参阅上面链接的 Joel 的博客文章,了解概要和一些示例。
By far one of the most interesting approaches I've ever seen for scheduling realistically is Evidence Based Scheduling which is part of the FogCreek FogBugz 6.0 release. See Joel's blog post linked above for a synopsis and some examples.
如果估计结果超出预期,请尝试确定它是否只是随机的(环境损坏、一些曾经出现过的棘手错误等),或者是否存在您无法识别的内容。
如果估计值太大,请确定您认为需要花很长时间的原因是什么,并找出为什么不需要。
做得足够多将有望帮助开发人员进行估计。
例如,如果开发人员认为为控制器编写测试需要很长时间,然后最终花费的时间比他想象的要少,那么您对类似范围的控制器进行的下一次估计可以记住这一点。
If an estimate blew out, attempt to identify if it was just random (environment broke, some once off tricky bug etc) or if there was something that you didn't identify.
If an esimate was way too large, identify what it was that you thought was going to take so long and work out why it didn't.
Doing that enough will hopefully help developers in their estimates.
For example, if a dev thinks that writing tests for a controller is going to take ages and then it ends up taking less time than he imagined, the next estimate you make for a controller of similar scope you can keep that in mind.
我和队友一起反复估算,直到达成共识。 当然,我们会犯错误,但我们没有明确计算“速度”因素,而是在新的估计辩论中使用收集的经验。
I estimate with my teammates iteratively until we reach consensus. Sure, we make mistakes but we don't calculate the "velocity" factor explicitely but rather, we use gathered experience in our new estimation debates.
我发现估计时间会让你走得更远。 其他任务的中断、不可预见的情况或项目影响将不可避免地改变你的时间框架,如果你不断地重新评估,你会浪费大量时间来管理你可以开发的时间。
因此,对于我们来说,我们根据经验对解决方案的时间进行初步估计(我们不使用模型,我还没有找到在我们的环境中运行良好的模型),但不会根据它来判断我们的 KPI,也不会我们是否向企业保证会在这个截止日期前完成? 我们这里的开发方法很大程度上是被动的,它似乎很好地满足了我们的业务需求。
I've found that estimating time will get you so far. Interuptions with other tasks, unforseen circumstances or project influences will inevitably change your time frames and if you were to constantly re-asses you would waste much time managing when you could be developing.
So for us here, we give an initial estimation based on experience to the solution for time (we do not use a model, I've not found one that works well enough in our environment) but do not judge our KPIs against it, nor do we assure the business that this deadline WILL be hit. Our development approach here is largely reactive, and it seems to fill the business' requirements of us very well.
当估计出现偏差时,几乎总是有一个明显的原因,这会导致吸取教训。 最近的记忆:
用户界面假设了不存在的.NET 功能(插入新行并在 GridView 中内联编辑它的能力); 吸取的教训是在进行估计之前验证所选类的功能。 这个错误花费了一周的时间。
ftp 进程假设 FtpWebRequest 可以与银行的安全 ftp 服务器通信; 事实证明,如果 ftp 服务器返回当前目录除反斜杠以外的任何内容,则此类存在一个已知错误; 吸取的教训是用类名搜索“bug”和“问题”,而不仅仅是“教程”和“示例”,以确保没有潜伏的“陷阱”。 这个错误花费了三天时间。
这些经验教训将纳入项目估算和开发“清单”文档中,这样下一个项目就不会忘记它们
when estimates are off, there is almost always a blatant cause, which leads to a lesson learned. Recent ones from memory:
user interface assumed .NET functionality that did not exist (the ability to insert a new row and edit it inline in a GridView); lesson learned is to verify functionality of chosen classes before committing to estimate. This mistake cost a week.
ftp process assumed that FtpWebRequest could talk to a bank's secure ftp server; it turned out that there's a known bug with this class if the ftp server returns anything other than a backslash for the current directory; lesson learned is to google for 'bug' and 'problem' with class name, not just 'tutorial' and 'example' to make sure there are no 'gotchas' lurking. This mistake cost three days.
these lessons go into a Project Estimation and Development "checklist" document, so they won't be forgotten for the next project