写在前面
ThoughtWorks作为一家有着23年历史的全球化IT咨询公司,可以称得上是敏捷开发(AgileDevelopment)的最早实践者,在敏捷开发的道路上积累了丰富的行业经验。这个假期我有幸参加了ThoughtWorks在墨尔本举办的LevelUpProgram,进行了为期八周的敏捷开发上手体验。作为一个初出茅庐的UX新人,我此前从未了解过敏捷开发。这次项目提供了绝佳的敏捷开发入门,希望我能通过把这些珍贵的知识碎片归纳清楚,为各位希望了解敏捷开发的朋友提供小小的入门帮助。
什么是敏捷开发?
一句话描述:敏捷开发是一种软件开发的方法,关键词是快速迭代、紧密协作、自适应。
对于初接触开发流程的人一定觉得蒙圈,或者我们可以从“什么不是敏捷开发”来尝试理解。
与敏捷开发相对应的流程方法就是瀑布式开发(WaterfallModel)了。与敏捷开发相反,瀑布式开发是一种预见性(Predictive)的方法,换句话说就是先为项目制定尽可能详细、面面俱到的计划,再遵循计划好的需求、分析、设计等按部就班地进行开发,最终的产出质量由一开始制定的计划文档来衡量。瀑布式开发因为严格的分级与流程,在项目后期如不幸有需求变化,调整的代价将会十分巨大。
理解瀑布式开发后,我们发现瀑布式开发在这些情况下并不是十分适用:如果客户不能在一开始就提出清晰明确的需求?如果市场竞争十分激烈?如果市场变化速度太快?
所以,敏捷开发就是直面“需求不断变更”这个人人头疼的问题,并尝试用快速迭代,紧密协作、自适应理念去提高开发效率。
敏捷关键词一:快速迭代
敏捷开发将项目分割成足够小的独立单元,每几周便有可工作的软件交付客户,并尽早获取用户反馈,及时对需求进行改进和更新。
即使遇上庞大的项目,敏捷开发也会把项目拆分成可独立交付的小单元,由客户根据需求的重要性来决定交付优先级。
敏捷关键词二:紧密协作
敏捷开发也将团队分成足够小的有独立交付能力的小组,通常为5-9人,由每小组独立负责一个交付单元。小组内有负责不同方面的成员如程序、商业分析、设计等,具体的方向和数量搭配由项目性质决定。这次ThoughtWorks的模拟练习里的人员搭配是5位程序、2位商业分析和1位设计。因为团队精干,又坚持面对面交流互动,所以沟通才能顺畅无碍。
紧密协作的另一要点是客户的合作。来自客户方的产品负责人(ProductOwner)应该在整个项目过程中都与开发小组一起工作和沟通。在ThoughtWorks的模拟练习里,产品负责人是要达到“转过头就能向他询问问题”这种程度的。
另外,由敏捷开发的理念衍生出来的各种工具也为紧密协作助益,例如站会(StandUp)和看板(Boards/Kanban)能够令团队成员都清楚其他人做了什么、正在做什么并及时给组员提出意见和帮助。各种工具的具体步骤请容我在下篇文章里再作详细介绍。
敏捷关键词三:自适应
快速迭代和团队的紧密协作都是为了能迅速地调整团队自身和前进方向,以响应瞬息万变的客观条件。也因为如此高的目标,敏捷开发对团队自身也有不低的要求。团队需要能够高效地自我组织起来,例如团队成员的任务不再是由上司布置,而是根据自己的兴趣和能力主动领取任务,以最大限度激发成员的自主能动性。
团队成员亦需要有优秀的自我管理能力以在近乎无监管的环境下高效工作。另外,团队也要尽可能频繁地反思自身,在ThoughtWorks的模拟练习里,每天结束前都有一个总结会议(Retro),就是为了鼓励团队自我反思,每位成员都要思考问题如:今天我们有什么做得好的应该继续保持?今天我们有什么做得不好的应该改进?怎么改进?我们面临什么问题?大家一起思考提出建议。
敏捷开发的基本信息就整理到这里,请期待下一篇文章对敏捷开发的具体工具的介绍!
(非常不严肃的)参考资料,衷心感谢写下这些文字的前辈们: