我们团队目前已经可以做到:
-
bug很少,大约只有同水平技术团队1/3的bug率;
-
沟通很少,几乎只有同级技术团队的1/4;
-
加班很少,因为可以随时准确掌控项目进度,大多数情况下都可以协商解决,避免加班;
-
在家办公。
下面,我就通过一个真实的页面开发的例子,给大家毫无保留的展示我们团队的项目管理过程。
00. 例子
本文中使用的例子页面的原型如下图所示:
这个页面的功能主要是,允许企业自己的管理员添加、删除其他管理员。
01. 编写API文档
这个原型对应的前端页面总共需要调用3个API,分别是:获取全部企业管理员、添加管理员、移除管理员。
在我们团队,API文档都是由项目经理编写的。
首先让我们看一下第1个API编写完成后的效果,如下图:
第1个API文档的源码如下图所示:
可以看到这个API的源码非常简单,并且在intellij idea中编辑,可以复制粘贴+智能提示,编写速度超快。
请注意上方的API源码截图中画红线的地方,我们项目经理在编写API文档的时候,就会把一些注意事项(包括特殊的算法)写到API文档中,并随API文档一直维护下去。这个动作,几乎不会增加项目经理的时间,但却非常可观的帮助后端开发人员避免写出bug。
我们项目经理甚至在API文档中把参考代码都写出来了,目的就是为了避免被问问题。为什么我们团队沟通这么少呢?因为项目经理把大家可能遇到的问题都提前想到了,并且写到文档里面了。
我们团队会去刻意训练每一个项目经理的思维习惯,在写文档的时候,一定要站在阅读者/开发者的角度去尽可能多的提前考虑到可能出现的问题,然后把答案写到文档里面,从而避免沟通减少bug。
下面,我再贴一下第2个API的呈现效果截图:
第2个API的源码截图如下:
第3个API我就不放呈现效果图了,贴一下源码吧,如下图:
02. 编写需求
在我们团队,项目经理会按照产品原型中的页面结构,1:1录入需求。我们团队多年总结的经验是:原型只承载界面,以及颗粒较大的且改动可能性较低的文字需求,而在线需求文档负责承载细粒度需求以及改动可能性较大的需求,以及开发需要的一切资源(不仅限于API文档)。
在这个指导思想下,项目经理最终完成的本文中的这个例子的需求文档如下图所示:
从上图中可以看出,本文中的例子页面的需求文档包括了四个部分:
-
本页面需要调用的API(点击链接直接跳转API详情),开发人员再也不用问更不用猜调哪个API了;
-
开发需求,包括前端和后端需求;
-
重点中的重点:测试用例。测试人员将通过这个需求下面的测试用例来验收本需求衍生出的所有任务和bug。
请大家再次仔细看看我们这个页面的测试用例:
总共写了4个用例,每一个用例都是特别容易出bug的。可以想象,如果我们项目经理没有写这4个用例,那很有可能到时就是4个bug,大大拖垮了整个团队的工作效率。
现在,我们项目经理写出了这4个测试用例,这个页面开发后很有可能前后端加起来一个bug都没有,在我们团队这都是常事。“一个bug都没有”,这会给项目经理、前后端开发人员极大的信心和极佳的工作体验,大家都会感觉自己是在跟一群聪明的人一起工作。
03. 创建开发任务
我们项目经理将这个页面拆分成了4个开发任务,一个前端开发任务,3个API开发任务(当然也可以将3个API任务合并到一个任务)。
先看看前端开发任务的创建界面:
注意上图中画红框框的地方:只有第2个测试用例是需要前端开发人员完成的;任务并无具体指派人,但评估的标准产出是2.5小时,这个2.5小时就是一个行业中等偏上的程序员完成这个页面开发所需要的时间。
接下来我们以开发人员视角看看这个任务详情,如下图所示:
我们再来看看后端开发任务的创建,如下图所示:
开发人员视角:
4个开发任务都创建完成之后,我们再回到该页面的需求文档,可以看到这个需求下面已经有关联4个开发任务了,如下图:
以后不管过了多久,我们想要知道曾经有哪些人参与过这个页面的开发,都可以在需求文档里面找到历史记录。
至此,你便可以发现,我们团队每个开发人员在开发功能的时候,几乎是不需要问问题的,更不需要跟谁讨论。所以我们团队的工作沟通很少很少,大家上班期间几乎都是一边写代码一边聊八卦。
04. 指派开发任务
项目经理通常会将一个版本的全部需求一次性录入系统,同时将所有开发任务创建好,然后每周末指派下一周的任务。
当项目经理把一个版本的任务全部创建之后,就可以从唐虞阁系统中看到这个版本总的工作量分布,如下图所示:
这也是我们团队加班很少的主要原因之一:因为项目进度能够准确控制,确实资源不足的时候我们大多数时间都可以延期。
在我看来,几乎所有的开发团队都是宁愿加班也不愿意延期的,我认为最根本的原因并非老板想要压榨大家,而是管理者拿不出一个可信的数据给老板看,老板自然觉得大家的工作量还可以挤一挤。
有时,我们也无法做到延期,但这个时候我们基本上都能砍掉一小部分需求移到下一次迭代里面去,尽量把没有安排的加班时间留足,这样项目进度质量的风险就会更小一些。
回到正题。
项目经理创建完一个版本(迭代)的所有开发任务后,下一步就是指派任务。注意哦,我们每个任务的标准产出是在指派任务之前就评估的哦,所有这才是一个标准的数字。
指派操作我就不截图了。
任务指派后,开发人员登录唐虞阁系统,只需要关心项目经理指派给自己的当前这一周的任务,其他的任务都不必关心,如下图所示:
开发人员只需要按照这个任务列表,一个一个完成任务即可。
所以我们团队经常在家办公。
写到这里,我想给大家分享一个我们团队很有价值的经验。
就是项目经理每周末整理任务状态的时候,会把未完成未验收的任务全部挪到下一周,只有已完成且已验收的任务才会放到当周。这样做是为了让开发人员永远不需要关心上一周及之前的任务,永远只需要关心当前这一周的任务即可。
除此之外,项目经理在安排每一周的任务的时候,会稍微给员工多安排一点任务。比如,某个初级员工一周大概只能完成15小时标准产出的任务,那么项目经理在安排任务的时候,可能就会安排到20小时产出的任务。员工只需要尽力去完成就好,不必非要做完安排的所有任务,未完成的挪到下一周即可。管理层会看到长期的任务数据并自有评价,员工只需要尽力而为即可,不需要全力以赴。我们鼓励员工轻松、快乐的工作。
05. 提交开发任务
我们团队要求开发人员每天下班前必须添加工时并更新任务状态。
任务进度更新为100%后,便可以【提交任务】,如下图:
可以看到,提交任务的时候,需要开发人员再次确认该任务包含的测试用例已经自测通过,然后才能提交给测试。
06. 测试
测试人员登录唐虞阁之后,会把待测试的任务过滤出来,如下图:
然后按照需求和测试用例去测试,并提bug。
提bug的流程本文就不展开了,与任务流程类似。
07. 验收
测试人员把开发任务测试完成之后,不管有没有bug,都会标记任务已测试完成。
项目经理每天会看一下待验收的任务,如下图所示:
然后会对任务进行验收:
验收操作主要是标记该任务已经开发完成(可能还有bug),确认和核对该任务评估的标准产出和难度值是否准确,是否需要调整。
因为有些复杂的任务,一开始评估的时候,可能无法考虑到过程中遇到的困难,或者一些调研类的任务,一开始评估的时候感觉很难,结果做下来非常容易,这时都需要在验收的时候去调整标准产出和难度值。
结语
一不小心本文又写的有点长了。文章穿插着我们团队的好几个最佳实践,我在最后再整理一遍这些重点分享。
1、需求文档和API文档的编写要以“开发者问不出问题”为目的,这样可以大幅避免bug并减少沟通必要。
2、把在线需求文档做的越肥越好。把开发一个页面所需的所有资源都尽可能维护到这个在线的需求文档里面,包括但不限于API文档链接、测试用例、历史任务/bug、原始需求、需求变更记录、其他文件资源、外部资源、联系人信息等等等等。
3、我们团队自创的API编写和渲染框架,值得一试。
4、每个任务的标准产出是在任务指派前评估的。
5、每周结束后,项目经理把未完成的任务全部挪到下一周,开发人员永远只需要关心自己当前这一周的任务即可。
6、要求员工每天如实填写工时,并更新任务进展。
在唐虞阁的管理体系中,项目经理是整个团队的核心,拥有对整个项目进度和质量的绝对掌控,这才是一个真正的技术型管理人才。