提高软件开发生产力的秘方
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:在所有的软件开发项目中,存在一种共通的东西,需要经常地花时间反省和学习。学什么?一切:成员彼此、技术、问题域、客户,等等。学得快的团队才会成为赢家。本文将详细分析这种困扰团队表现的看不见的“学习瓶颈”。
现在,当我们反思我们的过程的时候,留心观察能传递更多价值的途径,我们要记住通常我们向业务方传递以下几种价值:当然首先是正常运作的软件,另外还有可维护的、可改变的软件,以及一个快速反应的团队来继续这些工作。前两项的优先次序看业务的需要,而第三项纯粹属于职业素养上的期望,通常也掌握在开发团队的手中。最后一项价值——团队敏捷性——实际上是组织的一项资产,它会比一个个项目存续得更久,它会创造出谋取更大利益的机会,并且加快后续项目的速度。
敏捷团队应该保持组织的相对稳定,应当存续六个月或者更长时间,以便培育出有效的合作。建立这样的团队需要有战略眼光,而且还要一并考虑每次迭代中必须立即满足的业务需求。如果不能维持这种平衡,由于速度和质量都无法预测,再加上过程中无法排除的陷阱,团队很快就会在业务上失败。
为了避免产生出脆弱而不协调的团队,当我们对过程进行反思的时候,应该问自己下面两个问题:
1、“这会对我们下次迭代的速度有什么影响?”
2、“这会对我们的学习过程有什么影响?”(学习又会进一步影响我们在迭代和项目中的速度和响应能力。)
因此,与其问说“结对编程会不会降低我们的速度?”,我们应该问,“结对编程会不会降低我们的学习效率?还是它会提高学习效率?“与其问“我们真的需要每两个星期做一次产品演示吗?虽然产品所有者一个月才能来一次?”,我们应该问,“把产品演示的频率降低到一个月一次会对我们的学习有什么影响?”与其问“为了支持敏捷,我应该安装哪个工具?”,我们应该问“,工具ABC促进了我们的学习吗?还是它让我们交流得更少,因而阻碍了我们的学习?”,或者采取更好的做法,一直等到真的需要跟踪某些信息(以便从中学习)的时候,才选择一件对你来说最省事的工具[7]。
来源:InfoQ中文站 作者:郭晓刚 责编:豆豆技术应用