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

本贴最后更新于 1784 天前,其中的信息可能已经斗转星移

相关代码提交至 GitHub -> https://github.com/wangyuheng/keeper 欢迎提交 issue

What

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

效果如下:

00.png

高价值指标包括:

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

Why

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

How

01.png

  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 可以通过 {{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

小技巧

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

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • 团队
    4 引用 • 25 回帖
3 操作
crick77 在 2020-02-02 20:09:25 更新了该帖
crick77 在 2020-02-02 20:08:47 更新了该帖
crick77 在 2019-11-28 11:39:17 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • crick77 6 评论
    作者

    @88250 上传图片失败

    重试几次试试,多半是网络原因。
    88250
    @88250 更换了网络环境了,还是不可以。。
    crick77
    @crick77 咦,不应该啊,我这里上传正常的……
    88250
    你到聊天室的编辑器帖一个试试?或者用回帖的试试。
    88250
    @88250 奇怪了。。还是不可以
    crick77
    @crick77 服务器上我没找到异常请求日志,你在客户端 F12 看下网络?
    88250
  • ZephyrJung

    这个项目一定深得领导喜欢

    1 回复
  • yangyujiao

    我们用 jira,我每天通过多个面板,过滤器看每个人手上工单数,
    然后看来的工单分配给谁。

    好的是基本人手都有工单处理,不好的事,因为很多人不会及时更新状态,不知道一般一个工单处理时间。因为大家都不会真实的更新实际开发用时。

    1 回复
  • crick77
    作者

    @participants 图片已添加

  • crick77
    作者

    面向领导编程?

  • crick77
    作者

    饺子你现在是啥职位啊?

    我的解决方案是尽量细化每个任务的时间,默认认为一个任务是 1 天。定时提醒开始 2 天未更新的任务。

    实际开发用时?? 别想了,你又不是没做过开发

    1 回复
  • yangyujiao

    项目经理

    我们如果不是在做需求,那一天每个人要修复很多的运维工单。本身要求运维工单是需要写上实际开发时间,结束时间,因为客户会根据这个时间来看我们的工作用时。所以之前我要求不用完全按照实际情况,但是尽量要写的合理。但是大家还是不好好写。

    我弄了好几个 jira 面板、过滤器会统计每个人手上的工单,以及各种工单状态,jira 在这一点还是挺强的。而且还有好多别的功能我还没好好研究呢。

  • Pingu

    老哥,GitHub 地址 404 了 😭

    1 回复
  • crick77
    作者

    恢复了

    1 回复
  • Pingu

    感谢!

请输入回帖内容 ...