软件开发价格估算方法
在上一篇文章中,我详细介绍了软件开发人员难以接受估计的四个最大原因 ,但是我没有谈论如何解决我提出的任何问题。
尽管对于软件开发人员而言,估算总是固有地会很困难,但是所有希望都不会丢失。
在这篇文章中,我将向您提供五个真实的技巧,您可以利用这些技巧更好地进行估计,甚至可以用于复杂的软件开发任务。
提示1:将事情分解成小块
在我的上一篇文章中,我谈到了软件开发项目中如此普遍的漫长时间段往往使估算变得非常困难且不准确。
如果要求您估计将花费您五分钟的时间,那么与要求您估计将花费您五个月的时间相比,您更有可能是准确的。
那么,如何解决这个问题呢?
实际上有一个相对简单的解决方法:将事物分解为较小的块,然后估计这些较小的块。
是的,我知道这看起来很简单而且很明显-而且我知道这种方法经常引起怀疑。 关于为什么不能将事情分解成小块,您可以找到很多借口,但事实是,大多数事情都可以分解-如果您愿意付出努力。
实际上,我已经讨论过为什么较小的更好 , 以及过去如何分解积压的订单 ,所以我在这里不再赘述所有细节。
要意识到的关键是,您永远不可能擅长估算大型事物。 好吧,让我重新说明一下: 要擅长估计大型事物,唯一的方法就是学习如何将它们分解为许多较小的事物。
如果您确实需要准确地估计某些东西,那么花时间将您的估计分解成更小的部分是值得的。
例如,假设我要估计写一篇博客文章需要多长时间。 这不是一个很大的任务,但是它足够大,以至于估算可能有些不准确。
如果我想更加准确,可以将任务分解为较小的部分。
考虑尝试估算之间的区别:
- 撰写和发布博客文章
和:
- 研究博客文章和集体讨论
- 大纲博客文章
- 撰写博客文章的初稿
- 添加图像,链接和标注
- 安排发布时间
通过将事情分解成更小的部分,我可以更准确地估计每个部分。 实际上,这是一个小技巧,当事情分解成这么细的时候,我实际上可以对过程的某些部分进行时间排序,这可以有效地确保我的估算是正确的(但是,我们正在前进,我们将继续讨论关于时间装箱。
下次要求您实现某些功能时,不要估计您认为将其作为一个整体需要花费的时间,而是尝试将任务分解成非常小的部分,并分别估计每个部分。 您始终可以将较小的估算值相加,以得出更准确的整体估算值。
可是等等! 我完全知道您要说的是这种估计是错误的。 当然,每个零件的估算值可能更准确,但是将它们加回到一起时,总的来说,您仍然会得到与估算一件大物件相同的错误级别。
我只能说“尝试一下”。 在某种程度上您是正确的,较小的零件中的较小误差将加总并导致整体上出现更多偏差,但是较小的零件也趋于平均。 因此,有些花费的时间更少,有些花费的时间更多,这意味着总的来说,与估算带有大误差范围的一件大事情相比,最终结果要准确得多。
提示2:花时间研究
你为什么估计很差?
因为您对所要估算的东西还不了解。
在上一篇文章中,我谈到了困扰许多软件开发项目的未知未知因素如何使估算变得极为困难,但我并没有真正谈论如何处理这些我们不知道我们不知道的事情。知道。
同样,答案确实非常简单:研究。
摆脱未知未知数的最佳方法是了解它。
每当您要负责估算某项任务时,您的第一个本能应该是进行一些研究,以尝试发现不知道的东西。
不幸的是,大多数软件开发人员在尝试进行估算时并没有立即考虑进行研究。 相反,他们依靠过去的经验。 如果他们过去做过一些他们认为足够相似的事情,他们将自信地进行估算-忽略未知未知因素可能带来的陷阱。 如果他们从未做过与要求他们估算的事情类似的事情,那么他们将假设到处都有未知的未知数,并给出充满填充的估算值。
两种方法都不是好方法。 相反,您应该先估算一下研究任务将花费多长时间,然后再估算实际任务将花费多长时间。 我发现大多数软件开发人员都擅长估算研究任务所需的时间,尽管他们可能无法估算完成任务本身所需的时间。
一旦做好研究准备,就应该减少未知的未知数。 您可能仍然有一些未知数,但至少您会了解它们。
但是,现实情况如何?
您实际上如何研究应该估计的任务?
好吧,有时候它涉及到提前推迟和计划事情。 我将为您提供一个示例说明如何在Scrum或敏捷团队中发挥作用。
假设您想通过在估算任务之前进行研究来开始改进估算。 问题是,当您在进行敏捷项目时,通常需要在迭代中估算任务,并且在估算之前并没有真正的时间研究每一项任务,尤其是大型任务。
我发现在这种情况下最好的事情不是直接估算大型任务,而是将任务推后一次迭代,而是估算研究每个大型任务将花费多长时间。
因此,您的迭代中可能有许多小型研究任务,这些任务只是为了获取足够的信息,以便在下一次迭代中对大型任务有更准确的估算。 在这些研究任务中,您也可以将大型任务分解为较小的任务,因为您对它们的了解更多。
等待...等待..等待...我知道你在想什么。 我不能只是将任务推入下一个迭代。 我的老板和商人不会那样。 他们希望它完成此迭代。
是的,您如何处理这个问题?
简单。 您只需要在需要完成时就进行一次迭代就计划更大的任务。 如果您在敏捷团队中工作,则应该养成前瞻性的习惯,并为将来的迭代中即将出现的大型任务承担研究任务。
在评估任何实质性信息之前,总是前瞻性地进行研究,就会养成产生更准确的评估值的习惯。
这项技术还可以应用于较小的任务,有时只需花五到十分钟即可对任务进行少量研究,然后再进行估算。
下次您尝试估算任务时,请花一些时间进行一些研究。 您会惊讶于您的估算变得更加准确。
提示3:追踪您的时间
我们估算事物的最大问题之一是我们对时间没有准确的认识。 我对过去项目花费了多长时间的记忆往往会因我喜欢工作的程度和饥饿程度等因素而有所偏差。
我们头脑中的这种偏斜时间可能会导致一些错误的估计。
因此,重要的是要跟踪实际时间带走了您。
养成始终跟踪自己执行的任务的时间的习惯是一个非常好的主意。 现在,当我撰写此博客文章时,我的Pomodoro计时器正在滴答作响,跟踪我的时间,这样我就可以更好地了解博客文章花了我多长时间。 如果我在流程的一部分上花了太多时间,我也会有一个想法。
一旦养成了追踪时间的习惯,您就会对事情实际需要花费多长时间以及花费的时间有了更好的了解。
认为您会很擅长估计尚未发生的事情是很疯狂的,即使您甚至无法准确地说出发生了多长时间。
认真考虑一下。 不完全是。 我想让您考虑一下,当您对所完成的工作花了多长时间没有准确的想法时,相信自己可以擅长估算任何东西是多么荒谬的。
许多人认为,软件开发与其他工作不同,无法准确估算。 虽然我同意软件开发比安装地毯或重新安装屋顶更难估算,但我认为许多软件开发人员对估算很不满意,因为他们不知道实际需要多长时间。
帮个忙,开始追踪自己的时间。 有很多好的工具可以做到这一点,例如:
- 救援时间
- 切换
- PayMo
如果您对我如何跟踪时间和计划一周感到好奇,请查看这段视频,我确实解释了我开发的过程:
顺便说一句,遵循这个过程使我变得非常擅长估算。 通常,我可以在一到两个小时内估算出整整一周的工作量。 我知道这一点是因为我跟踪了它。
提示4:时间盒的事情
我说过我会回到这个,现在就到了。
成为一名更擅长估算任务的软件开发人员的一个大秘诀是对这些任务进行时间限制。 这几乎就像作弊。
对任务进行时间打包时,请确保将完全按照计划的时间来执行任务。
您可能会认为大多数软件开发任务无法按时进行,但是您错了。 我经常使用这项技术,而且我发现在完成任务时,我们所做的许多任务往往变化很大。
我发现,如果您给任务分配一定的时间(并且只有该时间),则可以以某种方式工作以确保工作在该时间范围内完成。
考虑编写单元测试的示例:
对于大多数软件开发人员而言,编写单元测试是非常主观的事情。 除非您打算获得100%的代码覆盖率,否则通常只编写单元测试,直到您觉得自己已经充分测试了要测试的代码。 (如果您进行测试驱动的开发TDD,那可能也不正确。)
如果您为要编写单元测试花费的时间设置一个时间框,则可以强迫自己先进行最重要的单元测试,然后按照80/20原则操作,以确保获得最大的成功。你的钱。
对于许多任务,您最终可能会花费大量的额外时间来处理次要细节,而这些细节并没有多大区别。 时间装箱迫使您先进行最重要的事情,并避免做过早的优化或过分担心变量名之类的事情。
当然,有时候,您必须在为任务设置的时间范围内运行,但是很多时候,您会发现您实际上已经完成了需要完成的工作,并且可以随时回来进行镀金工作以后如果有时间的话。
再说一次,就像跟踪时间一样,定时拳击是您必须养成的习惯,但是一旦习惯了,您就可以将其用作作弊手段,使估算工作比您想像的更加准确。
您可能想让自己成为番茄定时器或厨房定时器,以帮助您跟踪时间和时间盒任务。 有时有一个物理计时器会很好。
提示5:修改估算
这里有一个小秘密:您不必一开始就搞定。 相反,您实际上可以在完成任务时修改估算。
是的,我知道您的老板希望您现在就给出准确的估计,而不是在您接近完成时给出,但是您始终可以立即给出最佳估计,并在完成任务时对其进行修改。
我无法想象任何不喜欢提供更多最新信息的情况。
使用其他四个技巧来确保您的原始估算值尽可能准确,但是每隔一段时间,您应该花一点时间重新评估实际的当前估算值。
这样考虑:您知道何时下载文件,它告诉您需要多长时间? 您是否希望它仅在下载过程开始时就计算该持续时间,并且从不更新? 当然不是。 相反,大多数下载管理器会显示出剩余时间的不断更新的估计值。
通常,仅执行此过程可以使您更好地进行估计。 当您不断更新和修订估算时,您将不得不面对原始估算超出预期的原因。
你呢?
这些只是我用来提高估算准确性的一些最有用的技巧,但是您呢? 我有东西要离开这里吗? 在下面的评论中让我知道。
翻译自: https://www.javacodegeeks.com/2014/10/5-ways-software-developers-can-become-better-at-estimation.html
软件开发价格估算方法