返工那天,老陈把需求文档摊在了会议桌上
陈立衡是开云的一名数据工程师,做统计报表开发已经有些年头。前一阵子,他接手了一家连锁零售企业的月度经营报表项目。业务方在需求会上提得很简单:要一张能看各门店销售、库存和毛利的管理报表。老陈按惯例出了原型,开发、联调、上线,结果第一轮验收就被打了回来。业务负责人指着屏幕说,这个“销售”和他们理解的不是一回事,门店调拨算不算销售、退货冲减放在哪一天,双方各有一套说法。返工不可避免,老陈也由此重新审视了自己接需求的方式。
这类场景在开云的服务记录里并不少见。报表本身不难,难的是把业务语言翻译成数据语言。老陈后来总结,问题往往不在开发阶段,而在动手之前少做了几步确认。
第一张草图:把指标写到不能再拆
返工之后,老陈没有急着改代码,而是先画了一张指标草图。他把报表上出现的每个字段都列出来,逐个追问:这个指标的业务定义是什么、由哪几个原始字段计算得出、统计周期按什么时间口径、是否包含退货和赠品。比如“销售额”一栏,最终被拆成含税与不含税两个口径,并明确调拨不计入销售。
- 指标名称与业务叫法保持一致,避免同义词混用;
- 每个指标标注计算公式和数据来源表;
- 明确时间归属规则,比如按订单创建时间还是发货时间;
- 标注异常处理方式,比如负数金额和跨期退货如何归集。
这张草图后来成了开云项目组的标准动作。指标写到不能再拆,业务方签字确认,开发阶段就少了很多来回拉扯。
第二张草图:把使用场景画成流程
光有指标还不够。老陈发现,业务方说的“看报表”,实际包含好几种动作:店长每天早上看昨日销售排名,区域经理每周看库存周转,财务月底核对毛利。不同角色关注的粒度和频率完全不同。他把这些场景画成一张简单的流程草图,标出谁在什么节点打开报表、看完之后要做什么决策。
这张图帮项目组定下了报表的筛选维度和默认视图。开云在后续的报表开发中延续了这个做法:先确认使用场景,再决定页面布局和交互方式,而不是把所有字段堆在一张表上。业务方看到流程图后也更容易提出具体意见,而不是笼统地说“再改改”。
第三张草图:把验收标准提前写出来
第三张草图是验收清单。老陈和业务方一起,把“什么样算做完了”写成可核对的条目:某门店某月的销售额能否与财务账对上、库存数量能否与系统导出结果一致、筛选条件切换后汇总数是否同步变化。清单不追求面面俱到,但每一条都能实际验证。
这份清单在开发前就发给了双方,开发过程中按条目自测,验收时逐条勾选。老陈说,返工那次最大的教训就是验收标准来得太晚。如今在开云的统计报表项目里,验收清单和指标草图、场景流程图一起,构成了交付前的三道确认。报表开发终究是件细活,把边界谈清楚,后面的路才好走。
我们公司上报表系统也是这样,业务说“要个销售报表”,结果做了三版才对上,早看到这个思路能省不少事。
指标拆到不能再拆这句太真实了,含税不含税不写清楚,后面全是坑。
第二张草图那个思路不错,按角色分视图,比一张大表塞满字段强多了。
验收清单提前写,这个我们项目组准备借鉴一下,每次验收都在扯皮。
做过类似项目,调拨算不算销售这个问题真的能吵一下午,深有同感。