相关代码提交至 GitHub -> https://github.com/wangyuheng/keeper 欢迎提交 issue
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 可以通过
{{param}}
指定参数变量, 如milestone->> '$.title'= {{milestone}}
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 中
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于