我将尝试说明一些其他答案尚未解决的方面,而IMO非常重要。
基本问题是这样的:有些开发人员的主要动机是乐于进行一些艰巨的工作,仔细考虑设计,仔细考虑潜在问题,然后逐步解决问题,而在与扩展人员的最小交互下一段的时间。他们通常会及时高质量地完成工作;他们的工作是可维护的,并且与整体架构相适应。
这类开发人员可能会发现很难适应敏捷的环境,他们的态度经常被视为“不愿意改变”,可能与自我或过时有关。
经常被忽略的是,为了解决复杂的问题,一个人需要处理很多信息,而这可能需要大量的分析,思考,尝试,草拟解决方案,将其丢弃,再尝试另一种解决方案。如此复杂的问题可能需要花费几个小时到几周的时间才能完成,直到您获得完整的解决方案为止。
一种方法是,开发人员接受问题说明,然后回到自己的房间,并在两三个星期后返回解决方案。在任何时候(需要时),开发人员都可以与团队中的其他成员或与利益相关者进行某种互动(询问特定问题),但是大部分工作是由分配任务的开发人员完成的。
在敏捷场景中会发生什么?经过快速分析(整理)后,团队将问题分解为小块(用户故事)。希望用户故事彼此独立,但事实并非总是如此:为了将一个复杂的问题分解为真正独立的部分,您需要了解一些通常只需要几天才能获得的知识。换句话说,如果您能够将一个复杂的问题分解成多个独立的小部分,则意味着您已经基本解决了该问题,而您仅剩下勤奋的工作了。对于需要三个星期的工作的问题,第二个星期可能就是这种情况,而不是在冲刺开始时进行几个小时的梳理之后。
因此,在计划了冲刺之后,团队将研究问题的不同部分,这些部分之间可能会相互依赖。试图集成不同的解决方案可能会产生很多通信开销,这些解决方案可能同样好,但是彼此之间是完全不同的。基本上,反复试验工作分布在所有参与的团队成员中,并具有额外的通信开销(以平方倍增加)。我认为其中一些问题在Paul Graham的这篇文章中得到了很好的说明,特别是第7点。
当然,在团队成员之间共享工作可以减少与一名团队成员离开项目有关的风险。另一方面,关于代码的知识可以通过其他方式传达,例如使用代码审查或向同事进行技术演示。在这方面,我认为并不是在所有情况下都可以使用的灵丹妙药:共享代码所有权和结对编程不是唯一的选择。
此外,“在较短间隔内交付工作功能”导致工作流程中断。如果功能块是“可以在冲刺结束时完成”的“在登录页面中添加取消按钮”这一功能块,那么可能就可以了,但是当您执行复杂任务时,您不希望出现此类中断:尝试以最快的速度开100公里的汽车,然后每5分钟停车一次,以检查您的行驶距离。这只会减慢您的速度。
当然,拥有频繁的检查点是为了使项目更可预测,但是在某些情况下,中断可能会非常令人沮丧:人们几乎无法加快速度,因为它已经是时候停止并提出一些东西了。
因此,我不认为问题中描述的态度仅与自我或对变革的抵抗有关。也可能是某些开发人员认为上述解决问题的方法更有效,因为它使他们可以更好地了解他们正在解决的问题和所编写的代码。强迫此类开发人员以其他方式工作可能会降低其生产率。
另外,我不认为让团队中的某些成员单独解决特定的难题是违反敏捷价值观的。毕竟,团队应该自我组织并使用多年来发现最有效的流程。
只是我的2美分。
There’s a great story of a manager of a Coca-Cola plant whose numbers were far better than his peers. When asked what his “secret” was, he said simply that rather than take a best practice and modify it to meet what the plant did, he instead modified the plant to match the best practice.
除非您了解为什么要这样做,否则您就不会做敏捷。