迭代,反馈与渐进开发
当我们谈论敏捷开发或精益方法,许多人可能首先想到的是某些具体的操作,如每日站会、使用看板、每周迭代等等。然而,这些并不是敏捷开发的必要条件,更不是敏捷开发的全部。敏捷开发的精髓,其实是在于持续迭代的思维方式。 持续迭代 持续迭代,是敏捷开发的关键。迭代的本质,是对人类能力有限这一现实的理解与接受。我们每个人都有所不能,但同时也有无限的可能。在敏捷开发的过程中,我们不是在试图设计出完美无瑕的产品,而是在理解和接受我们可能会犯错误,然后以此为起点,不断地修正、优化和改进。 以错误处理为例。当团队中出现错误时,我们不应逃避责任,而应积极寻找问题的原因,并通过流程改进来防止同类错误再次发生。这种改进是由团队自发进行的,而非强制实施。这种自主的改进精神,能够最大程度地激发团队成员的主观能动性,推动团队向更高效的目标发展。 讲述这种思想,也许用画画来作比喻最为贴切。我们的第一版产品,就像画的草图。之后,我们在草图上逐步添加线条、颜色、细节,最终得到一幅完整的画作。这个过程就像我们在不断地迭代优化产品,每一次的改进都是在前一版本的基础上进行的,而每一版的产品,都是可以独立运行的完整版本。 工程实践 在实际操作中,不同的敏捷团队可能会有不同的实践方式。比如,有的团队可能使用测试驱动开发(TDD),有的团队则可能使用代码审查(PR)。这些都是可能的,也都是敏捷的体现。因为,无论采取何种方式,都是为了尽快建立反馈循环,以提高开发效率和产品质量。就像我们进行TDD时,先编写测试,然后实现功能,再进行重构。测试的目的,就是为我们提供反馈,让我们知道实现是否正确。 此外,持续集成也是一种反馈机制。它能告诉我们代码是否能成功编译、是否能与其他模块正确集成,我们的代码是否能形成一个可运行的软件。在持续集成环境下运行的测试,可以帮助我们尽早发现和修复错误。 小结 简而言之,迭代开发的核心就是:首先,能够端到端交付一个小而完整的功能;其次,提供反馈机制,以指导下一步的增量工作;最后,拥有开放的学习心态,根据反馈及时进行调整。在这个过程中,我们既要接受可能会犯错误的现实,又要尽全力去修正这些错误,使产品越来越完善。只有这样,我们才能真正理解和实现敏捷开发。 扩展阅读 Don’t Know What I Want, But I Know How to Get It Revisiting the Iterative Incremental Mona Lisa