如何定义开发完成?(Definition of Done)

最近在拜读晔的10x程序员工作法,收益良多,文中提出一个概念叫DoD(Definition of Done)给我的感触颇深。这让我联想到实际工作过程中,经常遇到的扯皮、争吵等各种场景,其实就和这个DoD分不开。

一、场景描述

  郑晔在文中描述了这样一种现象,相信有开发经历的人多少有同感:

老张:这有一个任务需要完成,你看一下。

小李:这个不难,两天就能做完,两天以后就能上线。

  两天以后,老张又来到小李的身边验收工作:

老张:怎么样,做完了吗?今天能上线吗?

小李:我的代码写完了。

老张:测试人员测过了吗?

小李:还没有。

老张:那今天能测完吗?

小李:那我就不知道了。

老张:什么?我可是答应了业务的人,今天一定要上线的!

  两天以后,老张又来检查工作。

老张:这个功能开发完了吗?

小李:写完了,你看我给你演示一下。

  小李熟练地演示了这个新写好的功能,这次老张很满意:

老张:做得不错。单元测试都写了吧?

小李:啊?还要写单元测试吗?

老张:要不为啥给你两天的时间?

  很明显,老张有些愤怒,貌似总在挑刺,而小李也没有偷懒、有些委屈。于是,老张、小李和测试人员一起度过了一个不眠之夜。

二、理解的代沟

  根据上面的场景,我画了两幅小李和老张的思考图,看下两者的代沟在哪儿,如下图所示。

640?wx_fmt=png

  很显然两者对完成的定义各不相同。对开发人员小李来说,完成容易理解为编码完成;而不去考虑代码测试和线上测试;对技术主管老张来说,完成的理解可能会更多一些,包括编码,测试,代码规范,审查,上线等等,有些老张脑子里的东西更多,比如下图所示:

640?wx_fmt=png

  为什么会有上面的差异?从立场来看,小李汇报的对象只有老张,而老张要协作的对象可能有产品经理、老板、总监、小李们。小李是从个人层面,关注的是一个点,老张是从团队层面,关注的是一个面。

  各自定义差可能反应了一个信号,就是团队成员整体上缺乏职业素养,那么这个团队就危险了。从小李的角度无论怎么努力,都不可能满足老张的需求,从老张的角度总觉得小李偷懒,导致团队之间老是摩擦、挑刺,最后小李干的不爽了,老张也觉得小李孺子不可教,最后事没有做好,人跑了。

  接下来就要回到作者提出的DoD概念(完成的定义),从这个概念的名字便不难看出,它就是为了解决软件开发中常见的“完成”问题而生的。

三、完成的定义

  这里的DoD在郑晔看来包含三个层次的含义:

  • DoD 是一个清单,清单是由一个个的检查项组成的。

  • DoD 的检查项应该是实际可检查的。

  • DoD 是团队成员间彼此汇报的一种机制。

  借助这三个含义,我模拟登录功能列了表格:

 640?wx_fmt=png

  以上是站在测试用例的角度来写,一个简单的登录就可以包含18个开发功能点,做好登录并没有那么简单,这也就难怪小李和老张总是意见不一致。如果摊开这份清单用来验收登录功能的完整性,我相信小李和老张彼此都不会有什么意见。

  但是这里有一个问题,就是老张根本不会去做这份清单!小李也没有这种意识,那谁来拟定?也许你会说引入中间层,就是测试人员来拟定,假设你们团队没有测试人员呢?

  事情总是没有表面看起来的那么简单。这里再设计一份简化的验收清单

 640?wx_fmt=png

  如此简化的功能也能多少避免小李和老张的鸿沟了吧?那么又回到前面的问题,谁来制作这份清单?

  我个人的意见是小李来做,因为小李的势能没有老张高,那就多增加自己的动能了,显示自己做事的能力,同时也做一个同事眼中的好伙伴,领导眼中的好同事。等小李变成老李了,遇到小张也是小张来做这事。

四、DoD是一种思维方式

  郑晔在最后又补充道:

至此,我们只是从软件开发团队内部协作的角度来谈 DoD。但实际上,它不仅局限在团队内部协作上,如果你可以放开思路,会发现 DoD 的思维在工作中用途非常广泛。比如,当我们需要和其他团队合作开发一个接口时,我们都知道第一步就是要把接口定义下来。

  这里的DoD看起来很完美,定义了验收清单,罗列了一系列验收项目,并固化成文档。但是,过程中有几个焦油坑需要去思考:

  • 如何才能符合“可验收”?

  • 彼此都无法想到的风险如何管理?

  也许这需要团队的磨合了,从老张角度如果这事不会死人,其实没有必要去咄咄逼人,大不了后续进行迭代改进,否则逼得紧其实只会引起反弹,养成小李习惯性的逃避责任,形成团队推卸责任的文化就得不偿失了。

  当我们有了DoD的思维方式,后面的事情也许会变得简单很多,郑晔举了个小例子让人折服:

1.经常会有人过来,让我帮忙做些事。运用 DoD 的思维,我首先会问他我具体要做哪些事,确认好细节(相当于定义好“检查项”),然后我就知道,这个忙我能帮到什么程度。

2.我请别人帮忙的时候,也会很清楚告诉他,哪些事是需要他做的,尽量减少不必要的误解。

五、总结

  人与人的协作,总会存在理解上的偏差,如何去解决信息不同步的问题呢?DoD是一种最佳实践,它是包含了检查项的验收清单,而如何做到“可检查”需要双方重点沟通。DoD从大了看是一种思维模式,是一种尽可能消除不确定性,达成共识的方式。

借用郑晔的一句话:“如果今天的内容你只能记住一件事,那请记住:在做任何事之前,先定义完成的标准。”

原文地址:https://www.cnblogs.com/jackyfei/p/10244806.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【正睿2021寒假省选第二轮集训 day 1】串 (后缀自动机+记忆化)

description 定义一个字符串的子串是这个字符串的某个连续区间的字符组成的串。比如,“djq"的子串是"d”,“j”,“q”,“dj”,“jq”,和"djq"。 定义F(a,b)为最长在字符串bb中至少出现一次的字符串a的子串,例如: F(“d…

YbtOJ-序列计数【组合数学,莫队】

正题 题目大意 求有多少个长度在l,rl,rl,r之间,值域是[1,n][1,n][1,n]的严格上升子序列 1≤T,n≤105,1≤l≤r≤1051\leq T,n\leq 10^5,1\leq l\leq r\leq 10^51≤T,n≤105,1≤l≤r≤105 解题思路 先转换成两个前缀和的差,那么相当于我们要快速求 ∑i0m…

欧拉筛法的应用

[数论]-----欧拉筛法的应用 文章目录1.求1~n之间的所有质数2.求1~n之间所有自然数的欧拉函数φ(x)3.求1~n之间的每个数的因子个数详细推导:代码:4.求1~n之间每个数的因数和详细的推导:代码:筛法求莫比乌斯函…

P5787 二分图 /【模板】线段树分治(线段树分治、并查集)

关于什么是合理的实现 解析 本题把并查集写在了题面上 然而,我却一直沉浸在一个及其通用的判断二分图的方法中: 一个图是二分图的充要条件是它没有奇环 怎么维护这个玩意?带权并查集! 怎么套线段树分治?可持久化&…

全新尝试|ComponentOne WinForm和.NET Core 3.0

在微软 Build 2018 开发者大会上,.NET 团队公布了 .NET Core 的下一个主要版本 .NET Core 3.0 的规划蓝图:.NET Core 3将开始支持 Windows 桌面应用程序,包括 Windows Form、Windows Presentation Framework(WPF)和UWP…

[bzoj3625][Codeforces Round #250]小朋友和二叉树 (生成函数)

description 我们的小朋友很喜欢计算机科学,而且尤其喜欢二叉树。 考虑一个含有n个互异正整数的序列c[1],c[2],…,c[n]。如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合{c[1],c[2],…,c[n]}中,我们的小朋友就会将其称作神犇的。并且他认为&am…

11.9模拟:总结

140pts 30100100 qwq 昨天有点被“写完这题就睡”坑到 所以今天状态不太好? 努力给自己找理由.jpg 最大的损失应该就是T1被降智了吧 那其实才是本场最水的一题 看到1e18的数据范围应该刻意往矩乘上想一想的 但我出门就走错了路 利用杨辉三角推了个大式子 从推出那个…

H - Tunnel Warfare HDU - 1540

H - Tunnel Warfare HDU - 1540 题意: n个数顺序排列,左右数相连, 现在有三个操作: 1.摧毁一个位置上的数 2.回复上一次摧毁的数 3.查询包含该位置的最长连续区间长度 题解: 有两个方法,第一个是区间的…

CF802C-Heidi and Library(hard)【费用流】

正题 题目链接:https://www.luogu.com.cn/problem/CF802C 题目大意 你有一个可以放kkk本书的书架,第iii天要求书架上有第aia_iai​种书,购买第iii种书的价格为cic_ici​。 求满足nnn天要求的最小花费。 1≤n,k≤80,1≤ci≤1061\leq n,k\leq 80,1\leq …

2019年1月已到,Java 8 要收费了吗?

根据此前开源中国发起的 Java 版本使用调查,国内的 Java 主力版本仍是 Java 8,有近 70% 的用户表示仍在使用 Java 8。所以对于「Java 8 是否要收费」这个问题,十分有必要阐述清楚,以消除不必要的恐慌。首先要明确一点,…

[NOI2007] 货币兑换 (dp+李超树维护凸包)

description 小Y最近在一家金券交易所工作。该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券)。每个持有金券的顾客都有一个自己的帐户。金券的数目可以是一个实数。每天随着市场的起伏波…

CF1379F1 Chess Strikes Back (easy version)(鸽笼原理、线段树)

解析 很神奇的一道题 关键在于把22的正方形看成一个单位的转化 由于每个22最多有一个国王 因此每个2*2都一定有一个国王 这是本题的关键 个人感觉这个思想很像鸽笼原理 至于后面的线段树就水到渠成了 代码 #include<bits/stdc.h> using namespace std; #define ll l…

[ZJOI2008]树的统计

[ZJOI2008]树的统计 题意&#xff1a; 题解&#xff1a; 树链剖分模板题&#xff0c;好久没打都忘了 代码&#xff1a; #include <algorithm> #include <cstdio> #include <cstring> #define lc o << 1 #define rc o << 1 | 1 const int max…

AT3860-[AGC020F]Arcs on a Circle【dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT3860 题目大意 有一个周长为mmm的圆&#xff0c;nnn条线段&#xff0c;第iii条长度为aia_iai​&#xff0c;将线段贴在圆的随机位置上&#xff0c;求整个圆都被覆盖的概率。 1≤n≤6,1≤m≤501\leq n\leq 6,1\leq m\le 501…

带你学习AOP框架之Aspect.Core[1]

在软件业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;是函数式编程的一种衍生…

「雅礼集训 2017 Day7」事情的相似度(后缀自动机+LCT+树状数组)

description 点击查看题目内容 solution Step1 无脑建SAMSAMSAM 两个前缀的最长公共后缀就是parent−treeparent-treeparent−tree上两点的lcalcalca&#xff0c;定义知显然 Step2 离线询问&#xff0c;按右端点从小到大排序 Step3 每加入一个字母&#xff0c;就将tatata在p…

CF1396B Stoned Game(博弈论)

解析 上午模拟被博弈论虐&#xff0c;下午被黄色的博弈论虐 qwq 首先的一个结论是&#xff1a; 如果有一堆超过总体的一半&#xff0c;那么先手只需要守住这堆就稳赢了 如果没有这样的一堆&#xff0c;可以证明&#xff0c;最后一定可以全部拿完 假设最后有一堆k没拿完&…

主席树

大一寒假的时候学了主席树&#xff0c;当时还录了视频发b站上&#xff0c;过了好久没用都忘了差不多 这篇文章讲的非常详细&#xff0c;我就直接借用过来 静态主席树 总结一下就是&#xff1a; 代码&#xff1a; 对于每一种状态建立一个线段树&#xff0c;为了防止mle&#xf…

P7735-[NOI2021]轻重边【树链剖分,线段树】

前言 之前线上赛就A的题现在才写博客 正题 题目链接:https://www.luogu.com.cn/problem/P7735 题目大意 有nnn个点的一棵树&#xff0c;开始所有边都是轻边&#xff0c;mmm次操作。 把x→yx\rightarrow yx→y路径上所有点连接的重边都变为轻边&#xff0c;然后再把路径上的…

.NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现

前面为了方便我们只是简单实现了基本业务功能的增删改查&#xff0c;但是登录功能还没有实现&#xff0c;而登录又是系统所必须的&#xff0c;得益于 ASP.NET Core的可扩展性因此我们很容易实现我们的登录功能。今天我将带着大家一起来实现下我们的ASP.NET Core2.2开发的CMS系统…