我总是开始思考“我会在一天结束时轻松完成此工作”,并设定看起来像是一个现实的目标。
那么,为什么我从不打它呢?由于无法预料的错误,最后的更改等,任务最终总是需要花费3倍的时间才能结束。
只有我吗?我似乎无法更好地预测一天可以做什么。
我总是开始思考“我会在一天结束时轻松完成此工作”,并设定看起来像是一个现实的目标。
那么,为什么我从不打它呢?由于无法预料的错误,最后的更改等,任务最终总是需要花费3倍的时间才能结束。
只有我吗?我似乎无法更好地预测一天可以做什么。
Answers:
因为从未教过您如何计划。
计划是一种技能,就像编码或写作一样。但是,几乎所有课程都将其排除在外。
它需要学习和实践,并且您对自己能力的估计需要不断更新。这就是为什么像Agile这样的工作实践会强调衡量您过去的实际工作并将其与您的估计进行比较,以便您可以提高计划能力的原因。
就像其他人所说的那样,您不仅需要考虑任务,还应该考虑任务的所有前任,伴随的任务(例如,学习如何做X),并且需要意识到自己内部的心理偏见,这将阻止您正确说明您的实际工作方式。
对此进行培训,谁知道您会变得更好。
很难相信,没有人提到霍夫施塔特定律。
我认为真正的答案是,您的计划始终以最佳方案为前提,就好像一切立即生效,不会发生任何中断。在现实生活中,您开始编码,然后电话传声响了,您分散了5分钟的时间,花了15分钟在stackoverflow或程序员身上。进行一些谷歌搜索,花2个小时测试可能的解决方案,等等。
换句话说:“最佳情况”只发生在您的梦想中。
每位程序员在很长一段时间内都会拥有完美的一天。您会在闹钟响起前5分钟醒来,感觉很棒。早餐是在柜台上制作的,还有新鲜的咖啡,因此您可以抢些东西然后出去。在上下班途中,您碰到了所有绿灯,交通似乎特别畅通。考虑到您的前一天,您能够完全了解您的任务的设计和后果,而这些任务的计划和要求都是经过严格计划的。
您开始工作,发现自己没有重要的电子邮件,没有语音邮件在等待,您的同事不在或不在会议中,您不必参加。您启动了编辑器,并立即进入区域,您可以感觉到代码的结构,并看到数据结构和算法完美地结合在一起。想法通过您的双手流到键盘,输入完美而优雅,可维护且没有错误的代码。
白天,您可以无间断地工作,办公室安静,而且您专心致志,以至于您从未想过要花费任何时间赶上新闻,博客等。编译和运行测试时,您会发现一切毫无疑问,它可以正常工作,并且最终您可以毫无冲突地进行承诺。在您出门的时钟上瞥了一眼,您发现自己投入了12个小时,感觉就像是一个简短的20分钟编码会话。
那天,那一天是完美的一天,这是我们假设每次必须估算任何东西时都会得到的。
不要忘了开会,打扰您的人等等。难以预料的错误很难预测,但是随着时间的流逝,您应该能够了解在特定时间内发现了多少个错误。在估计需要花费多长时间时,您必须考虑上下文。即“假设我不会被打扰或发现错误,那么我应该能够在X时间内完成某些工作”
作为您自己的一些小练习,请考虑执行以下操作:
您会发现一些模式开始出现,并可以针对这些模式进行计划。每当您告诉经理预计的完成时间时,只需用第一段中的假设加以说明。当您消除花费在中断和错误上的时间时,您可能会惊讶于估计的准确性。
在处理错误列表或功能列表时,您可能已经在做第一个和第三个要点。这项小小的练习将告诉您所有时间的去向,您可能会对答案感到惊讶。
因为您的计划不正确。哎哟。
我敢打赌,如果您连续计算出漏失的总数(甚至在纸上),然后将估计值上调该百分比,就可以正确地计划。
FWIW,众所周知,软件很难估算。麦康奈尔(Code Complete名誉)甚至都有一本书。