您所描述的是-至少根据我的经验- 团队尝试“敏捷”的一种非常普遍的新兴模式。如果这实际上是敏捷本身的一部分或它的常见错误实现,违背敏捷清单/原理或它的内在后果,则可以进行辩论。从经验的角度来看,仅基于我自己的少量经验样本(以及与我交谈的人),如果团队敏捷,那么进入这种模式的机会似乎要比平均水平高。让我们继续讨论一下,重点关注您的具体示例。
您所描述的内容分为两个方面:
- 缺乏共识/愿景,因此效率不高
- 如何衡量成功/进展和总成本
走错路或盘旋
以我的经验,发生这种情况的主要原因是,为了快速生成代码,团队积极地搁置了他们已经知道或很容易发现的用例或需求。这样想吧:10到20年前,人们试图编写巨型规格并事先考虑所有事情,但常常失败。他们花了太长时间或忽略了一些东西。过去的经验之一是,在软件开发中,有些事情是您不知道的,并且事情发生了很大的变化,因此,需要快速迭代并快速产生有意义的输出的想法。这是一个很好的原则。但是今天,我们处于另一个极端:“我不在乎,因为它是下一个冲刺的一部分”或“我不提交该错误,而是在再次出现该错误时进行处理”。
- 收集您可以找到的所有高级用例,需求,依赖性和限制。将其放在一些Wiki中,以便所有涉众和开发人员都可以看到它们。出现新情况时将其添加到他们。与您的股东和用户交谈。在开发时将其用作检查清单,以防止实施对最终产品没有帮助的事情,或者是解决了一个问题却导致三个新问题的变通办法/黑客。
- 制定高层次的概念。我不是在谈论设计接口或类,而是大致勾勒出问题领域。最终解决方案中的主要元素,机制和相互作用是什么?在您的情况下,当使用jquery-workaround帮助作为中间步骤并且仅引起其他工作时,它应该很明显。
- 使用您收集的列表来验证您的概念。是否有任何明显的问题?是否有意义?是否有更有效的方法来实现相同的用户价值而又不会造成长期的技术负担?
不要过分。您只需要一些东西,以便团队中的每个人(包括非开发人员)都可以共同理解实现MVP的最佳途径。每个人都应该同意没有明显的疏忽,并且实际上可以奏效。通常,这有助于防止陷入僵局或多次重做同一件事。敏捷可以帮助您更好地应对意外情况,无可置疑地忽略已知的内容。
注意沉没成本的谬误:如果您从一种架构或数据库类型入手,大多数人会在项目中期更改它。因此,在开始实施某些东西之前,花一些时间进行“有根据的最佳猜测”是一个好主意。开发人员倾向于快速编写代码。但是通常有一些模拟,实时原型,屏幕截图,线框等,它们的迭代速度甚至比编写代码还要快。请注意,编写的每一行代码甚至单元测试都使再次更改整体概念变得更加困难。
衡量成功
一个完全独立的方面是您如何衡量进度。假设您的项目目标是使用周围的东西建造一座高1m的塔。如果例如上市时间比稳定性更重要,那么盖一栋纸牌屋可能是一个完全有效的解决方案。如果您的目标是建立持久的东西,那么使用Lego会更好。关键是:什么被认为是hack,什么优雅的解决方案完全取决于如何衡量项目的成功。
您的“加载”示例非常好。过去,我有这样的事情,每个人(包括销售,采购订单,用户)都认为这很烦人。但这对产品的成功没有影响,也没有造成长期债务。之所以删除它,是因为开发资源还有更多有价值的事情要做。
我的建议是:
- 保持一切,哪怕是很小的错误,因为在你的票制度的门票。做出积极的决定,在项目范围之内,什么不在项目范围内。创建里程碑或以其他方式过滤您的积压订单,以便始终获得所有仍需要完成的工作的“完整”列表。
- 具有严格的重要性顺序和明确的起点,在该起点上可以认为该项目是成功的。最终产品实际需要什么级别的稳定性/代码质量/文档?通过从顶部进行选择,尝试尽可能多地度过每一天的工作。处理一张票证时,请尝试在不引入新票证的情况下彻底解决该问题(除非由于优先级较低而推迟处理)。每次提交都应使您朝着自己的最终目标前进,而不是向侧面或向后前进。但要再次强调一下:有时候,在以后产生更多工作的黑客仍然可以对项目产生积极的影响!
- 使用您的采购订单/用户来确定用户价值,但也要让您的开发人员来计算技术成本。非开发人员通常无法判断真正的长期成本(不仅仅是实施成本!),因此请帮助他们。注意“青蛙青蛙”问题:随着时间的推移,许多无关紧要的小问题会使团队陷入僵局。尝试量化团队的效率。
- 密切关注总体目标/成本。而不是从一个Sprint到另一个 Sprint来思考,而是要保持“我们作为一个团队可以在项目结束之前做所有必要的事情”的思路。冲刺只是一种分解事物并具有检查点的方法。
- 与其希望早点展示,不如将您的课程安排在最快的道路上,以提供给用户的最低可行的产品。不过,您的总体策略应允许在两者之间取得可验证的结果。
因此,当某人做了不符合您最终实现目标的事情时,最好不要考虑已完成的故事。如果关闭故事很有帮助(例如,从客户那里获得反馈),请立即打开一个新的故事/错误以解决短期问题。明确表示采用快捷方式不会降低成本,而只是隐藏或延迟它们!
这里的技巧是要与项目的总成本进行争论:例如,如果采购订单要求采取捷径来制定截止日期,则要量化随后要考虑的项目工作量!
还要提防基于标准的优化:如果您的团队是根据他们在sprint审查中可以显示的故事数量来衡量的,那么获得良好“评分”的最佳方法是将每个故事切成10个小故事。如果以编写的单元测试的数量来衡量,则倾向于编写很多不必要的单元测试。不要计算故事,而是要衡量所需的用户功能有多少工作,在项目范围内解决的技术债务成本有多大等。
摘要
归结为一点:快速而精简是一个好方法。牛逼,他的问题是在解释“快”和“最小”。人们应该始终考虑长期成本(除非您有一个与之无关的项目)。使用仅需1天但在交货日期后1个月就会产生技术债务的快捷方式,比花费1周的解决方案要贵的公司多。立即开始编写测试似乎很快,但是如果您的概念存在缺陷并且巩固了错误的方法,那就不会很快。
请记住,“长期”在您的情况下意味着什么:我知道一家以上的公司因试图编写出色的代码而破产,因此交付太迟了。从公司的角度来看,好的架构或简洁的代码只有在实现它的成本小于没有它的成本时才有价值。
希望有帮助!