Scrum 沉思录
2024-08-19
最近对软件工程很感兴趣。
一方面,软件工程让编程这种“手工”技艺规范化,变得专业,另一方面,标准的流程和机制,很大程度上保证了开发质量。
之前经历过几次,因为单测不完备,导致线上出问题,进而返工的情况。于是之后每次写新的需求,都会写单测,这样上线的时候心里有底。同时,代码的可测试性(Software testability),也是设计良好的体现。
不过今天不打算讲具体的工作流,讲讲更高层的问题,项目管理。
Scrum 是目前使用比较广泛的模型。
1. 历史演进
Scrum 最初是用在橄榄球运动。
在 1986 年,竹内弘高和野中郁次郎发表文章,首次提到将 Scrum 与产品开发结合。提出传统的“接力式”开发,已经不能满足日益灵活的市场变化,团队应作为一个整体前进。
1993 年,Jeff Sutherland 首次将 Scrum 用于软件开发,在 Easel 公司定义并实施该流程。
越说越抽象了。那么 Scrum 到底是什么?能解决什么问题?
软件开发流程的发展,大致有四个阶段:混沌时期;瀑布模型;敏捷开发(Agile Development);DevOps。
在软件开发早期,无论技术还是管理方法都不成熟,不存在规范的流程。开发者和使用者都不多,对软件质量要求不高。这是混沌时期的状态。
后来伴随项目规模扩大,需要对复杂性进行管理,瀑布模型(Waterfall)应运而生。这是一个线性模型,将开发分为:需求分析、设计、开发、测试、部署和维护。思路清楚,和现在个体开发流程基本一致。缺点是不够灵活,因为下一个阶段必须在前一个阶段完成后才能继续推进。阶段间也不能重叠,开发周期较长,返工成本很高。
于是敏捷开发兴起。强调迭代开发、小批量发布、团队合作和用户反馈。这是一种能高度适应变化的模型,我个人一般理解为“放松”了的瀑布模型。
再到现在(2024),普遍推崇 DevOps,开发即发布,发布即部署。借助自动化的 CI/CD 工具,迭代频率更快,交付周期更短了。
Scrum 扮演的是一种敏捷开发框架。
敏捷开发的框架有很多,之所以单拎出 Scrum 讲,是因为这套框架使用广泛,国内互联网大厂基本都在使用。
2. Scrum 的内涵
Scrum 执行的基本单元是团队。
团队通常较小,10 人以内。
角色主要有三个:负责人(Master)、产品负责人(Product Manager)和开发者(Developers)。
每个团队都有一个待办事项(Backlog),其中记录了改进产品所需要的工作内容,自然也会标记优先级。Backlog 可以被拆解,比方说,一个新功能特别大,那就可以将其拆分成几个子功能分别完成。
在一个迭代周期内,Scrum 里的术语是 Sprint,时间通常为两周或团队自行调整,整个团队聚焦在一份任务上。在迭代周期内,完成任务交付。
进度管理用一种叫做燃尽图(Burn-down Chart)的工具,记录 Sprint 中剩余的工作量。
日常实践中,还会有每日站会(Stand-up),定期同步团队各成员进展,确保在 Sprint 内,交付不会被推迟。
只要产品不死,Sprint 不会间断。
我们手机里如此多形形色色,功能强大,简单易用的 App,背后正是由一个个密密麻麻的 Sprint 构建出来的。
3. 启示
Scrum 并不难理解,角色,任务,目标,很清晰。
执行中的难点,主要在于理论和现实的落差。因为实际开发中有太多不可控因素,比如,对于外部的依赖,成员生病,低估复杂度,等等。
但这并不意味着这个模型是无效的。软件工程从不追求完美,能做的,就是尽最大努力交付(Best-effort delivery)。
我认为,Scrum 给我的启示主要有两个:
- 清晰的定义
- 小
我是一个比较喜欢抽象的人,在我看来抽象里蕴藏着某种弹性。到后来工作中才发现,在与人沟通这件事情上,具体的才是好的。
这也是我老板平时教导的,只有那些明确的、具体的目标,才是最有可能被完成的。
Scrum 里对于角色、行为、目标的定义,都是明确的,这样团队中大家容易达成共识。
小,意味着敏捷。越小,越灵活,越强大。团队小,所以容易协调;Sprint 小,所以目标不会太大,也不会太远,可达性高。
无论多大的产品还是系统,其实都来自一次次微小的增量迭代。
有方向,可实践,就容易拿到结果。
4. 总结
Scrum 是个有用的框架,不仅在软件开发上,在生活中遇到大的问题时,也可以借鉴 Sprint 的思想。
我将其视为一种,目标拆解,分阶段达成的方法论。
形式,倒不一定非得严格遵循。
将大的目标分解成一个个小的目标,然后渐进地完成。
有人说,这不就是 Map/Reduce 吗?
(完)
参考
- 本文作者:Plantree
- 本文链接:https://plantree.me/blog/2024/srcum/
- 版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
最后更新于: 2024-11-20T09:44:17+08:00