您如何将Scrum应用于维护和遗留代码改进?

时间:2008-11-13 00:35:22

标签: project-management scrum

正如标题所示...... 如何将scrum进程应用于任何不能用于新代码的东西,并且可以在某种程度上进行估算?

当我还想计划做某事时,如何将scrum流程应用于维护和紧急修复(可能需要5分钟到2周才能修复)环境类型?

基本上,我如何克服难以用scrum流程估算的计划外任务和任务?或者我只是在这个环境中使用错误的流程?

12 个答案:

答案 0 :(得分:21)

  

基本上,我如何克服难以用scrum流程估算的计划外任务和任务?或者我只是在这个环境中使用错误的流程?

您在此环境中使用了错误的进程。您需要的是一个堆栈/队列管理过程,它与您计划/估计的SCRUM开发过程是分开的。

原因很简单,双重:

  1. 正如你在帖子中提到的,它是 往往很难估计 维护任务,特别是在哪里 涉及遗留系统。 维护任务一般和 遗留系统专门有一个 涉及'卷曲'的倾向 问题,或有一个很长的'尾巴', 一个看似简单的修复方法 需要稍微困难一些 改为另一个组件 转弯需要彻底改变 某些子系统的运行,其中 转......你明白了。

  2. 经常在处理时 维护任务,到你的时候 你已经完成了估算 也完成了解决问题。 这使得估计过程成为可能 冗余作为规划工具。那些坚持将估算与解决问题分开的人 用于维护任务 只是添加不必要的开销。

  3. 简单地说,你需要一个排队系统。它将包含以下组件:

    • 已经完成的“池”任务 确定需要注意。 新饲料应始终使用 进入游泳池,从不排队。
    • 将这些任务移出的过程 游泳池和队列。通常需要商业/技术知识的组合。
    • 明确排序的任务队列 这样开发者负责 服务队列可以简单地选择 从它的前面。
    • 用于在队列中移动项目的方法 (重新优先化)。允许“跳跃队列”关键/紧急事项。
    • 用于传递不中断服务队列的已完成项目的方法。这很重要,因为提供维护项目的开销通常远低于开发工作。您不希望维护团队坐在那里等待构建和测试团队在每次交付错误修复程序时给他们确定。

    队列管理还有其他细微差别,但要实现这些细分应该会让你走上正确的道路。

答案 1 :(得分:11)

如果您的环境中有那么多流失,那么您的密钥将是更短的迭代。我听说团队每天都在进行迭代。您还可以转向看板类型样式,其中您有一个具有固定限制的队列(通常非常低,如2或3个项目),并且在完成之前不能再添加任何项目。

我要做的是尝试每周站立,积压优先级和“完成,完成”一周的迭代。然后在5或6周后重新评估,看看有什么可以改进的。不要害怕按原样尝试这个过程 - 并且一旦你尝试过它就不要害怕将它调整到你的环境中。

还有一个名为Agile for Support and Operations in 5 minutes的PDF最近发布到雅虎的Scrum Development list

答案 2 :(得分:5)

没有人说积压物品必须是新代码。维护工作,无论是错误修复,增强功能还是数据修复,都可以放入产品Backlog中,进行估算并确定优先级。这实际上是使用Scrum的最大好处之一 - 没有更多关于用户是否存在错误修复或增强功能的论据。

使用Waterfall,有一种默认的理解,错误是开发人员的责任。不知何故,他们可以在不影响新代码和功能开发的情况下修复它们。因此,它们对用户来说是“免费的”,但给开发人员带来了巨大的不便。

在Scrum中,您认识到所有工作都需要时间。没有“免费”。所以开发人员自由地接受某些东西是一个bug,但它仍然存在于产品Backlog中。然后由客户决定修复错误是否比添加新功能更重要。你可以忍受一些错误。

答案 3 :(得分:2)

  

正如标题所示......我怎么能   对任何事情都应用scrum流程   不适用于新代码,可以   估计到某种程度?

相反,我听说团队在维护阶段更容易采用Scrum ...因为变化较小(没有宏大的设计更改),因此更容易估计。任何新的更改请求都会添加到产品待办事项中,由开发人员估算,然后由产品所有者确定优先级。

  

如何应用scrum流程   维护和紧急修复(其中   可能需要5分钟到2周的时间   修复)我还在的环境类型   我想计划做什么?

如果您要暗示消防类型的活动,请为此类活动保留一部分迭代工作配额。根据历史趋势/活动,您应该可以说,例如我们每次迭代的速度为10个故事点(4人团队5天迭代)。我们每个人每周花一天时间来应对紧急情况。因此,我们应该只为下一次迭代选择8点积压项目才能切合实际。如果我们没有紧急问题,我们将从优先顺序积压中选择下一个最重要的项目 CoryFoy在他的回复中提到了一种更具动态性/实时性的方法,其中有kanban post-it。

  

基本上,我如何克服计划外的问题   非常的任务和任务   难以用scrum估计   处理?或者我只是应用   这个环境的错误过程是什么?

AFAIR Scrum没有强制要求估算技术。使用团队最熟悉的一个......人日/故事点/等等。估计变得更好的唯一方法是我相信的实践和经验。同一组人坐在一起估计新任务越多,他们的估计就越好。在维护类型的环境中,我认为它更容易估计,因为系统或多或少地为集团所熟知。如果没有,请安排/使用尖峰以获得更清晰。

我觉得你在这里尝试吃大象..我建议以下咬伤

答案 4 :(得分:1)

将所有修复和改进视为单个故事并相应地进行估算。我个人认为,需要花费不到10-15分钟才能解决的问题应该立即完成。对于那些花费更长时间的人来说,他们成为当前“修复与安抚”的一部分。改进'迭代周期。与估算常规要求一样,您可以作为一个团队进行最佳猜测。随着越来越多的信息曝光,估算结束时,请调整迭代和即将到来的冲刺。

很难将迭代周期应用于修复和改进,因为它们往往会阻止系统按预期工作,而“业务”会给他们施加压力,使他们尽快上线。在这一点上,可能会更好地转移到一个非常短的迭代周期,比如一两周。

答案 5 :(得分:1)

将所有没有故事的“错误修复”视为新代码。估计它们,并照常正常工作。通过将它们视为新故事,您将建立一个故事和测试库。只有这样才能开始 pin 应用程序的行为。

请看Michael Feathers的有效使用遗留代码。这是摘录的链接。 http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf

-Jason

答案 6 :(得分:1)

您询问如何在紧急情况下使用流程。尝试为需要在同一时间连接的用户的生产环境中破解代码的内容保留“紧急”一词。否则,利益相关者可能会滥用这个词,并对他们想要真正快速的任何事情发出紧急情况。缺乏过程并不意味着失控:有人必须对宣布紧急情况负责,有人(最佳做法是其他人)必须在正常过程之外授权更改,然后对此负责。

除此之外,使用每次迭代完成大量修复和改进的建议可能是最好的方法。

答案 7 :(得分:1)

这在很大程度上取决于应用程序的生命周期。如果这是一个即将重新启动的“日落”应用程序,当然,重点只是修复最优先的错误。

如果产品“成熟”并且有路线图并且正在继续发展,那么您将需要修复和增强功能。通过重构保持设计清洁和发展有很多动力。这可能意味着定期的次要和主要版本[eFixes除外 - 紧急修复/修补程序]。你可以灵活地为你的心灵做好准备,因为增强和修复可能是故事登上并成为你的Sprint积压的一部分。整个列表将使您的产品Backlog。

底线:如果你想重构并保持你的应用程序设计干净[程序员倾向于采用快捷方式,如果重点是专门修复错误],那么它只能在“生活”应用程序中发生。一个进化和更新的。敏捷很自然。

即使您只有修复(它是Turing Complete;)或Sunset应用程序),如果它们都可以进入sprint并进入每个sprint的生产端,这会有所帮助。如果修复需要在修复时投入生产,那么应用Scrum会更加困难。

答案 8 :(得分:1)

我们已在此背景下应用了scrum。

成功的关键因素 1.企业中的每个人都购买scrum创意(这是至关重要成功) 2.冲刺约2周(我们的2-3次第一次冲刺,在1周内了解过程)
3.在任何情况下都不能在当前冲刺中增加一点 4.如果出现真正的紧急情况,请停止冲刺,进行回顾并开始新的冲刺 5.花时间进行回顾(分享关于最后冲刺的时间并分析) 6.在sprint中插入至少一项改进流程的任务(通常会在追溯中添加到积压工作中);这对士兵的士气有好处,并且在一天结束时你会遇到更少的紧急情况。
7. TIME BOXED每日站立会议

对于估计,通常您估计的越多,您变得越精确。 Scrum的好处在于,每个程序员都会选择他的任务,并且如果他认为这不是现实的话,可以设置一个新的估计。如果你仍然有一些估算问题,那么让你的团队找到一个解决方案......你可以对它们带来的东西感到惊讶。

为期2周的修复。如果这是原始估计,请将其切成小块。如果你做了一个更乐观的估计(假设2-3天),这个问题应该在站起来会议中成为阻碍者。也许其他人有关于如何解决它的想法。您可以决定进行一些配对编程以找到解决方案。有时候,只是为了向另一个程序员描述这个bug有很多帮助。您也可以在sprint中执行其他任务后延迟它。我们的想法是提供功能齐全的任务。如果你没有时间完全修复它并进行演示,即使你完成了90%(是的!我们知道它意味着什么),你认为它没有在冲刺中完成。在下一个冲刺中,您将能够使用正确的时间估计来解决它。

最后,根据我的理解,Scrum更多的是使用“工具”来改进您的流程。你从简单的事情开始。你做小迭代。在每次迭代中,您都需要 FIX TARGET 来代替无限错误列表。因为您在计划中从列表中选择任务(反对分配它们),所以您可以更多地参与交付。通过站立会议,您每天都会通过您的TODO列表与您的对话相遇......您希望尊重您前一天所做的参与。通过迭代,您可以花时间相互交流,并确定哪些是好的,哪些应该改进。你也采取行动改进它并继续做有效的工作。不要害怕改变任何东西,甚至我所说的;)/甚至Scrum本身的任何基础......真正的关键是让Scrum适​​应你的团队需要快乐和富有成效的东西。一次迭代后你不会看到它,但很多都是......

答案 9 :(得分:1)

我强烈建议您查看sprint / iterations会给您带来的价值。当有足够的任务需要优先处理时以及当利益相关者需要大致知道何时完成任务时,应用它们是有意义的。

在这种情况下,我强烈建议结合三种方法:

  • 尽可能多地安排下一次迭代的传入任务
  • 使用Yesterday's Weather计划您需要计划多少缓冲区来处理必须立即处理的任务
  • 使用非常短的sprint,以便最大化可以等到下一次迭代开始的任务数

事实上,每个敏捷/ Scrum项目都是真实的,因为它们处于维护模式 - 从迭代2中添加到现有的工作系统。

如果迭代没有提供足够的值,您可能需要查看kanban /排队系统。基本上,当您完成任务时,只需从优先级任务队列中拉出下一个任务。

答案 10 :(得分:1)

在我看来,这取决于你发布“真实”版本的频率。在我们的具体案例中,我们每年都会发布一个主要版本,并在一年中发布一些小版本。

这意味着当sprint完成后,它不会立即部署在我们的生产服务器上。在我们完成完整的“项目”之前,大多数时候会发生一些冲刺。当然,我们演示了我们的sprint,并在测试服务器上部署了sprint。他的整体“项目”将进行一些端到端测试,最终将部署到我们的生产服务器 - >这是次要版本。我们可能会决定不立即将它部署到我们的生产服务器,例如,它依赖于需要首先升级的其他产品/项目。然后我们在主要版本中部署它。

但是当我们的生产服务器出现问题时,可能需要立即采取行动。因此,没有时间向产品所有者询问目标或重要性(如果我们甚至为sunc提出问题),因为它会阻止我们的客户使用我们的应用程序。在这种紧急情况下,这些问题不会被放入产品Backlog或sprint中,而是作为单独项目尽快解决,测试和部署的纯维护任务。

我们如何将其与Sprint相结合?为了让我们的团队成员专注于sprint,我们决定“选择退出”我们的员工加入团队。这意味着一个或多个人不会成为某个Sprint团队的成员,并且可以专注于其他工作,例如这些紧急修复。下一个Sprint这个人将再次成为团队的一员,其他人将负责紧急呼叫。

另一个选择可能是我们预计Sprint中有20%的时间用于“计划外任务”,但这会给出我们在Sprint中可以做的大量工作的错误指示(我们不会有相同数量的每个冲刺期间的紧急修复)。我们还希望我们的团队成员专注于Sprint,在Sprint中进行这些紧急修复会分散我们团队成员的注意力。 “上下文转换”也意味着时间损失,我们试图避免这种情况。

这完全取决于您的“环境”以及应该如何快速解决紧急问题。

答案 11 :(得分:0)

我认识到Sprint的某些百分比包含那些需要解决的计划外“火灾”,我取得了一些成功。即使在短暂的冲刺中,这些也可能发生。如果开发团队负有这些责任,那么在sprint规划期间,只有故事可以用于sprint,这些故事可以为这些其他计划外活动提供足够的空间并根据需要进行处理。如果在冲刺期间没有“火”点燃,那么tam可以从积压的顶部引入故事。在许多方面,它变成了一个队列。

优势在于积压的承诺。缺点是存在这个漏洞,可以作为将团队拖入非关键任务的机会进行沟通。如果容量中的缺口充满了未被跟踪的计划外工作,速度也会有很大差异。

我解决其中一部分的方法是创建一个“支持”故事,用一个代表团队可用于支持活动的可用时间的任务来填充剩余的容量。当支持情况进入无法延迟到积压的sprint时,将创建包含任务的新故事,并重新估计占位符支持故事和任务以考虑新注入。如果支持事件没有进入sprint,那么随着积压项目进入以填充未使用的容量,这个支持故事会减少。

结果是短跑保留了一些所需的流量,人们觉得他们在需要支持工作时不会被烧伤。速度更加一致,burndowns正常跟踪,但也有记录每次冲刺发生的支持注射。然后在sprint回顾期间,我们可以评估计划内和计划外的工作,如果需要采取不同的下一个sprint,我们可以这样做。如果这意味着新的sprint持续时间,或者与组织中的某个人进行了尖锐的对话,那么我们就会有数据来支持新的决策。