1 of 19

Tech Talk

2 of 19

envd的敏捷实践

3 of 19

自我介绍

  • Github: https://github.com/VoVAllen
  • @TensorChord

4 of 19

研发管理的不可能三角

范围

成本(人力资源)

时间

5 of 19

版本迭代模型

特点:

  • 面向需求制定研发计划(固定需求)
  • 按季度或者更长实践规划

常见问题

  • 时间预估不准
    • 需求会和时间不匹配
  • 中途需求插入影响计划(用户发现新bug需要及时修复)
  • 做不完
    • 加班加人(人月神话)
    • 延期

开发范围固定,成本和时间为开发范围服务

6 of 19

研发管理的常见问题

7 of 19

敏捷开发对这些问题的解答

8 of 19

可运行的软件 Minimal Viable Product

敏捷开发不仅仅是研发管理的方式,更重要的是如何安排研发任务和识别重要的需求

9 of 19

敏捷开发(面向时间计划)

特点:

  • 面向时间制定研发计划
  • 按2-3周时间制定实践规划
  • 以团队整体作为计划对象
  • 尽量精确的估计任务时间

常见问题

  • 错误实践
  • 代码架构腐化速度快
  • 功能实现不完全
  • 故事点估计错误

敏捷开发,永不延期

10 of 19

Scrum与敏捷开发(Agile)

  • 敏捷开发代表的是一种研发管理的理念
  • Scrum是目前最常见的敏捷的实践方式
    • Scrum 一词源于英式橄榄球运动,是指双方球员对阵争球。双方前锋肩靠肩站成一横排,面对面躬身,肩膀互相抵在一起,形成一个通道。犯规队的球员低手将球抛入通道,此时通道两边的球员们互相抗挤,争取踢球给本方前锋。
    • 与橄榄球比赛对应,在Scrum组织中没有传统组织所强调的岗位、上下级关系、汇报等元素,每个人只有“一起赢得比赛”的目标,而且每个人的工作会有较大的重合覆盖度,角色可因势而变,提高效率的同时,有效避免传统组织可能存在的推诿和不作为。

11 of 19

Scrum敏捷开发

  • Sprint冲刺指的是一个迭代周期
  • Sprint结束之后的项目必须是可交付状态
  • Sprint中间不改变计划
  • 目标就是完成所有任务

12 of 19

什么不是敏捷开发

  • 需求频繁变更
  • 频繁加班
  • 不写测试
  • 没有CI/CD
  • 代码屎山

这些问题都可以在敏捷开发中避免。如果频繁出现这些问题,没有敏捷开发也会遇到相同的问题

13 of 19

怎样保证制定的计划能做完?

  • 时间跨度较短,相对可控
    • 一般一个sprint持续2-3周
  • 恰当的分解需求,明确范围
    • 史诗epic,功能feature,任务task
    • 保证规划任务范围明确,且时间可以较准确的度量
  • 及时的跟踪机制
    • 议题版issue board
    • 燃尽图burndown chart
    • 每日站会daily standup
  • 合理的工作量估计
    • 故事点Storypoint(用斐波那契数列估计任务量)

14 of 19

怎样制定每个sprint的计划

15 of 19

envd的retro文档

不断迭代磨合团队的节奏

16 of 19

敏捷开发的优点

  • 在更短的时间尺度上,更容易识别任务的优先级和紧急程度
    • 需求永远是做不完的,资源永远是不足的。在更强的时间约束下对优先级的识别会更加敏感
    • 只有两周的时间,强迫计划时分解任务,以及强迫思考最小的可交付里程碑
  • 及时交付
    • 能够及时对用户需求做出响应
  • 面向变化
    • 在短迭代周期中持续进步
  • 避免过度设计

17 of 19

敏捷开发的缺点

  • 代码架构腐化,技术债积累
    • 肯定不如从头设计的架构规整
    • 有的sprint中会有比测试优先级更高的任务,导致测试覆盖不足
    • 注:设计的再好的代码,在变更的需求面前都是徒劳的,只是腐化速度较慢。只有不断重构才能解决
  • 对开发人员技术要求高
    • 开发过程中需要设计预留未来接口,同时也要避免过度设计
    • 过于随意的实现可能导致架构快速腐化
  • 对开发人员自我驱动要求高
    • 任务的完成程度,测试的覆盖程度可能会面向时间约束调整,容易出现“又不是不能跑”的情况

解决方法:需要强有力、技术强的工程团队主导敏捷开发的实践

18 of 19

敏捷开发和开源的契合点

  • Just works
    • 用户需要的东西是恰好解决他的需求,大而全的东西用户并不一定喜欢
    • 例如MySQL vs Postgres,虽然前者代码质量不如后者,但是在早期时候针对最基本的查询操作更容易优化而快速流行。Postgres目前采用率更高,但是绝大部分项目没有那么多资源能够十年磨一剑
    • Rethink DB vs MongoDB
  • 及时交付
    • 较短的时间周期使得团队能够及时响应用户需求,给用户更好的体验
  • 开源项目很多是探索性的工作,用户和场景都不甚清晰,需要在开发过程中迭代磨合
    • 一开始的需求可能并不明确
    • 需求是迭代中产生的
    • 在需求实现之前无法准确知道用户的使用方式
    • 需求实现之后可能会涌现出之前没有意识到的更有价值的需求

19 of 19

Thanks 🎉

  • Follow @TensorChord on Twitter
  • Join our Discord community!

We are hiring 👀 !

  • buildkit / nerdctl / buildah / podman / kubernetes / …
  • kubeflow / mlflow / flyte / weights&biases / …

Send a mail to hr@tensorchord.ai!