来自@George Stocker的引用名单,以及我的反驳......
缺乏结构和必要的文件
仅适用于高级开发人员
采用不充分的软件设计
要求采用太多的文化变革
可能导致更艰难的合同谈判
可能效率非常低 - 如果对一个代码区域的要求通过各种迭代进行更改,则可能需要多次完成相同的编程.如果要遵循计划,则预计会编写一个代码区域一次.
无法对提供报价所需的工作量进行实际估算,因为在项目开始时没有人知道整个范围/要求
由于缺乏详细的需求文档,可能会增加范围蔓延的风险
敏捷是功能驱动的,非功能性质量属性很难被用作用户故事
我认为最重要的陷阱是认为"敏捷方法"意味着你可以做或不做你想做的任何事情.我猜想大多数使用敏捷的人确实使用"临时"而不是实施那些导致敏捷的做法.敏捷需要工作和纪律,或许比计划驱动的开发更为重要.
我从那些认为敏捷效率较低的人那里得到了一个轻笑,因为变化可能发生,你必须做些什么.现实情况是,无论采用何种方法,都会发生变化,而且您必须做一些事情(或最终得到一个不满意的客户).敏捷方法只是接受这种情况会发生并尝试使用允许它以最少破坏性方式发生的方法.为了提高效率,您仍然需要对您允许的更改保持纪律,使用敏捷只是让您有更好的机会说是,并且仍能按时完成.
这里的很多答案都不是陷阱,而是批评.在我看来,"陷阱"是值得注意的潜在问题,而不是避免敏捷的原因.
以下是极限编程的一些内容:
通过结对编程,个人卫生,性安慰和亲密的社交技巧突然变得更加重要
很容易让Refactoring如此兴奋,你想要重构无关紧要的代码,将高级模式应用于琐碎的例程,并在截止日期前重构.
这些做法以重要的方式相互支持.如果你抛弃一个,你将陷入另一个麻烦.例如,如果您停止执行TDD,您的重构将变得更加困难和风险更大.
仅仅因为你认为你遵循这些做法并不意味着你做得对.你真的需要有才华的人,了解XP的运作方式,并做正确的事.
你可能仍然失败.仅仅因为你敏捷并不保证你将完成你的项目,或者它将是你的客户想要的好软件.