What
通过图表直观展示团队成员工作负载、贡献、以及项目进度等信息
核心目的: 细化工作量, 通过可量化、可追踪的方式, 把控项目进度
效果如下:
高价值指标包括:
- 成员当前issue数量
- 当前版本项目issue进度及分布
- 成员参与issue数量
- bug数量趋势
Why
- 通过燃尽图追踪项目进度及任务pipeline分布, 实时掌握项目进度, 降低延期风险
- 展示成员负载, 方便high-level协调调度开发资源
- 量化成员工作贡献
- 分析项目质量趋势及问题分布
How
- 定时轮询
gitlab
相关项目的issue
列表并持久化。- 为了减少工作量, 直接存储json字段, 查询时解析
- 通过
metabase
展示数据指标图表
问题1: 一个issue经过多人开发(前端+后端), 工作量如何计算?
通过成员参与过的issue进行计算, 可以做到相对准确
DB结构定义
CREATE TABLE if not exists `issue`
(
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '标识',
`issue_iid` int(10) NOT NULL COMMENT 'issue标识',
`group_id` int(10) NOT NULL COMMENT '组标识',
`group_name` varchar(128) NOT NULL COMMENT '组名',
`project_id` int(10) NOT NULL COMMENT '项目标识',
`project_name` varchar(128) NOT NULL COMMENT '项目名',
`state` varchar(128) NOT NULL COMMENT '状态',
`title` varchar(256) NOT NULL COMMENT '标题',
`labels` varchar(128) COMMENT '标签',
`description` text COMMENT '描述',
`author` json not null COMMENT '创建人',
`assignee` json COMMENT '指派人',
`milestone` json COMMENT '里程碑',
`due_date` date COMMENT '到期日',
`created_at` datetime NOT NULL COMMENT '创建时间',
`updated_at` datetime COMMENT '修改时间',
`closed_at` datetime COMMENT '关闭时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
ROW_FORMAT = DYNAMIC COMMENT ='任务';
CREATE TABLE if not exists `participant`
(
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '标识',
`issue_iid` int(10) NOT NULL COMMENT 'issue标识',
`group_id` int(10) NOT NULL COMMENT '组标识',
`group_name` varchar(128) NOT NULL COMMENT '组名',
`project_id` int(10) NOT NULL COMMENT '项目标识',
`project_name` varchar(128) NOT NULL COMMENT '项目名',
`title` varchar(256) NOT NULL COMMENT '标题',
`name` varchar(128) NOT NULL COMMENT '姓名',
`username` varchar(128) NOT NULL COMMENT '用户名',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
ROW_FORMAT = DYNAMIC COMMENT ='参与者';
参考指标SQL
- 显示json字段中的中文, 需要通过
->>
, 如issue.assignee->>'$.name'
- metabase 可以通过
指定参数变量, 如
milestone->> '$.title'=
1. 成员参与工作量
SELECT `participant`.`name` AS `name`, count(*) AS `count`
FROM `participant`
GROUP BY `participant`.`name`
ORDER BY `count` DESC
2. 成员当前工作量
SELECT `issue`.`assignee`->>'$.name' as `owner`, count(*) AS `count`
FROM `issue`
GROUP BY `issue`.`assignee`
order by `count`
3. 当前版本进度
SELECT case
when `issue`.labels like '%To Do%' then "To Do"
when labels like '%Doing%' then "Doing"
when labels like '%verify%' then "Verify"
ELSE "BACKLOG"
END as 'progress', count(*) AS `count`
FROM `issue`
where state='opened' and project_name='keeper' and milestone->> '$.title'= {{milestone}}
GROUP BY progress
小技巧
- 每个issue表示的工作量<2天, 耗时尽量统一
- 通过 00.通过issue管理需求 中对board及label的操作, 定义issue生命周期
- 未加入milestone的issue可以通过创建时间管理, 也可以加入默认时间milestone中