基于Gitlab进行开发团队管理的尝试——02.成员负载可视化

What

通过图表直观展示团队成员工作负载、贡献、以及项目进度等信息
核心目的: 细化工作量, 通过可量化、可追踪的方式, 把控项目进度

效果如下:

00

高价值指标包括:

  1. 成员当前issue数量
  2. 当前版本项目issue进度及分布
  3. 成员参与issue数量
  4. bug数量趋势

Why

  1. 通过燃尽图追踪项目进度及任务pipeline分布, 实时掌握项目进度, 降低延期风险
  2. 展示成员负载, 方便high-level协调调度开发资源
  3. 量化成员工作贡献
  4. 分析项目质量趋势及问题分布

How

  1. 定时轮询 gitlab相关项目的issue列表并持久化。
    1. 为了减少工作量, 直接存储json字段, 查询时解析
  2. 通过 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

  1. 显示json字段中的中文, 需要通过 ->>, 如 issue.assignee->>'$.name'
  2. 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

小技巧

  1. 每个issue表示的工作量<2天, 耗时尽量统一
  2. 通过 00.通过issue管理需求 中对board及label的操作, 定义issue生命周期
  3. 未加入milestone的issue可以通过创建时间管理, 也可以加入默认时间milestone中

Welcome to my other publishing channels