[ 生活需要仪式感 ]

0%

MatrixChannel:工作上下文记录的新提案——工作任务记录的心路历程与新思路。

bannerDisplay

TL; DR

简而言之,【MatrixChannel】是一个定时同步 Tapd(来自腾讯的敏捷研发协作平台)到 Notion 的开源工具。

本篇文章主要根据一个软件开发从业人员的个人经历,介绍了工作任务纪录的痛点,并提出、开发、开源了自己的解决方案,也就是本文章分享介绍的工具。

最后,通过这个解决方案,除了能够更统一更高效的管理个人日常事务,同时,还能以更个人、更自由的方式管理自己的 Tapd 需求、任务的数据展示与数据记录,并记录个人关于需求的临时数据与需求分析,提高生产力。

工具 Github 地址:https://github.com/copriwolf/MatrixChannel

效果演示如下:

MatrixChannel 自动同步数据·效果演示

MatrixChannel 自动同步数据·效果演示


1 前言

开篇先来一个烂梗。自从众多互联网公司落实了 985 规定后,生产力他妈妈更早下班了,今天刚回来,就听到有人敲门,打开门一看,嚯,原来是生产力到家了

当然了,这是一个来自互联网码农的自嘲,不过确实越来越有趋势,需要在非办公时间段处理公司业务的需求。(就如同微信也拥有了 QQ 的状态栏功能一样)。而为了应对在家里更快的了解自己的任务进度、需求变更,我个人更迫切的需要一个工具去整合我的工作数据,而这个工具也就应运而生了。

2 为什么要开发这个插件?

2.1 直接用公司的项目管理工具不香嘛?

从本人的工作经历中,使用过的公司指定项目管理工具包括 Redmine/JIRA/Tapd 等,都存在一些让使用者非常不爽的地方。

  • Redmine
    • Web 1.0 界面非常简陋,且操作流程的按钮、提示,都是机翻中文非常变扭。
    • 支持的插件扩展有限(如 Markdown、流程图),需要额外开发。
    • 私有化部署,离开办公网络需要 VPN/IOA 才能浏览。
  • 共性
    • 筛选与排序功能欠佳,针对个人的自定义程度不高
    • 无法,也不应该记录个人对于需求的上下文数据

而针对每一个需求任务的上下文相关数据,亟需一个统一的位置进行维护,且在需要时能够快速根据关键信息(标题、需求目的)检索处理,并有详实的时间线历程与状态扭转记录。

2.2 过往的需求任务相关数据在哪?

在过去的时间段,跨越了我的几段工作经历,为了记录我的工作任务的上下文。我尝试了【Wiz】【印象笔记】【Angenda.】等知识管理类软件服务、【Trello】等看板类工具以及【Typora+github/dropbox】的 Geek 模式等等等的模式。

Evernote 国内版·记录公司的需求任务·截图

Evernote 国内版·记录公司的需求任务·截图

Agenda. 记录公司的需求任务·截图

Agenda. 记录公司的需求任务·截图

我始终觉得,有几个痛点横跨在我的知识管理软件之上,无法解决:

  • 组织方式不明朗:到底以什么为关键词组织我的任务与需求(任务名称?需求迭代日期?需求类型?),在需要的时候,如果快速检索到我需要的上下文对应数据?
  • 灵活度不足:需多维度纪录需求时,无法满足(标识目前进度状态扭转等)
  • 数据储存可靠性:本地 Git/Dropbox 不可靠,在线工具的稳定性(印象笔记的氪金体系)。
  • 模版易用性:通过模版新建一个任务不够便捷,往往需要复制粘贴一个项目条来完成。
  • 手工维护成本:每次有新的需求,或者任务内容有所变更,需要手动录入到自己的管理工具上,并维护扭转的状态。

2.3 为什么要用 Notion?

在一路的尝试历程,发现 Notion 是比较符合选型要求的。其提出横空出世的 All-In-One Workspace 模式,开创了一个崭新的在线文档记录模式。

它在几个方面的特性,能够尝试解决以上提到的痛点:

  1. 高灵活度:其文档本质是一个数据库,可以内嵌多条数据。而每条数据,允许增加无限、不同维度的属性。故,可以对一条数据,增加【需求名称】【需求迭代】【当前状态】等等维度进行细分维护,同时,还能对文档进行有时间戳的评论,用于跟进数据。
  2. 组织方式自由:其文档可以按照列表、看板、时间线、日历等模式进行视图展示,同时允许附加筛选、排序条件,能够按照【当前指向我且状态未完成的状态】【目前迭代处于测试中状态】等等自己需要的条件进行任务筛选与展示。
  3. 模版定义:模版定义简单,新建文档,只需要选中对应模版,即可预生成对应模版已有的属性与展示。
  4. 数据储存:这个目前 Notion 都是处于 AWS,日常使用来说是稳定且图片上下传速度没有明显卡顿感。
  5. 上下文记录格式丰富:文档中允许多种记录格式,如表格、Markdown、语法高亮的代码块、音视频、图片直接拖动上传,在线播放等。

Notion Database 视图

Notion Database 视图

Notion 具体 Page 视图

Notion 具体 Page 视图

如上图所示,通过细分数据的维度,能够非常容易管理任务的进度,同时,附带一些个人用到的需求上下文数据。

2.4 如何让工作任务数据与 Notion 自动联动?

当然了,解决了需求的上下文关联,数据的状态扭转后。

就还有一个比较棘手的问题需要解决:「每次 Tapd 新来了需求都需要手工录入,能不能自动联动起来?」

仍然需要,手工更新、录入数据,这是一个繁琐而且容易疲倦的操作,也会因为落后于 Tapd 的更新速度,最后废弃了 Notion 上下文的维护。

而解决这个自动更新的契机,则是部门的其他同事、领导也同样拥有对新事物探索的热情与无尽的宽容,容许成为我开发自动更新插件的首批试用玩家。

也就有了,今天隆重介绍的「MatrixChannel」—— 一个自动定时同步 Tapd 到 Notion 的工具。

3 这么做有什么好处

解决了个人以及领导的需求:在 Notion 以更自由更个性化的方式,并准实时的情况,管理自己的 Tapd 需求与任务。

4 工作原理

MatrixChannel工作原理

MatrixChannel工作原理

MatrixChannel 作为一个 Notion 与 Tapd 的中介,

  1. 会定时从 Notion Api 拉取现有数据,并以 Tapd 任务/需求ID 进行分组后;
  2. 向 Tapd Api 拉取配置的员工的最新数据,同时以 Tapd 任务/需求ID 进行分组;
  3. 比对 Notion 的分组数据与 Tapd 的分组数据,筛选出需要进行修改/新增的数据;
  4. 通过 Notion Api 对现有数据进行修复/新增。

由于 MatrixChannel 并不会落地任何用户数据,故每次触发时,都会重新获取 Notion/Tapd 的数据。

5 快速上手

首先,我们需要创建一个 Notion 机器人用于后续把 Tapd 数据保存到 Notion 中。同时,我们通过拷贝一个 Tapd Notion 模版(预设了 Tapd 数据相关的字段),用来创建一个用来记载 Tapd 数据的页面。最后,把 Notion 机器人配置到这个插件上,跑起来,即可自动同步数据。

5.1 前期工作

  • 贵公司正在使用 TAPD
  • 你获取了 TAPD 的 Api 账号密码

5.2 创建一个 Notion 机器人

  1. 在官方的开发者页面,点击右上角的 My integrations 按钮.

  1. 登陆后,点击 New integration 新建一个机器人。

  1. 填写机器人的名字, 即可进行提交。

  1. 机器人创建成功后,保存机器人的 **Secrets(密钥)**,这是操作这个机器人的唯一凭证或者说是钥匙。

  1. 机器人类型选择 Internal Integration(自用类型),然后保存即可。

    后续需要制作给多个用户同步 tapd 时,可用到 Public Integration。

5.3 复制 Tapd 需求、任务的 Notion 模版

我为你准备了一份预设的 Tapd Notion 模版,其中包含了【Story 需求表】以及【Task 任务表】。

每个表都预设了 Tapd 数据需要落地的字段(如 Task 表中的关键数据:「标题」「迭代」「任务状态」「需求Url」「TaskUrl」等等)

操作方式如下:

  1. 点击右方链接,拷贝模版到你自己的 Notion 中。 [📍 Tapd 模版]

  1. 授权你的机器人访问与修改该页面数据。(选中刚刚你在上一步创建的机器人名称。)

  1. 获取页面的 PageID

    由于 Notion Api 处于 Beta 版本,未开放处理 Database 级别权限,所以需要你手动复制 DataBase 的 ID。

    分别进去【TapdStory需求表】与【TapdTask任务表】页面中,在右上角的 【Share】-【Copy Link】,在第两个 / 与 ?v=之间的即为 DataBaseID。
    1
    2
    https://www.notion.so/copriwolf/84999c421caf4eeeab8bc66bc044408a?v=9...
    <---------- DataBaseID --------->

5.4 配置一份同步配置

  1. 复制项目中的 config/demo.conf.yaml 为 conf.yaml,并在其中填充自定义的数据。你也可以复制下面的配置数据保存为 conf.yaml 即可。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Service:
    # 数据同步间隔
    refreshInterval: 10m0s
    # 请求失败的睡眠时间
    httpRequestFailSleepTime: 5s
    # 最大请求失败重试次数
    httpRequestAttempts: 5
    # Tapd Api 用户名
    tapdApiUser: vvvvvv
    # Tapd Api 密码
    tapdApiPassword: B8888888-8888-9999-0000
    # Tapd 公司 ID
    tapdCompanyID: "0000700"
    User:
    # 用户 A 的昵称/电邮(任意..)
    copriwolf:
    enable:
    - task
    - story
    # 该用户在 Tapd 中的用户名
    tapdOwner: copriwolf
    # Notion 访问密钥(私有机器人使用 Bot Secret)
    notionBotSecret: secret_xxxxxxxxxxxxxxxxx
    # Notion Database 任务页面的 ID
    notionDbTaskID: 84999c421caf4eeeab8bc66bc
    # Notion Database 需求页面的 ID
    notionDbStoryID: 7777777777777777777777777

5.5 跑起来

具体的插件在 Github Release 页面可以下载,但是我更推荐你使用 Docker 运行。

原因是,你不需要沾污你的系统,把插件轻量化的跑在一个虚拟容器中,更方便省心。

  1. 安装 Docker,官方下载页面

  2. 执行命令,以 docker 形式运行

    1
    2
    3
    $ docker run -it \
    -v "$PWD/conf.yaml:/app/config/conf.yaml"
    ghcr.io/copriwolf/matrixchannel:master

    工具运行展示

    工具运行展示

6 高阶用法

如果你觉得独乐乐不如众乐乐,希望帮助同事也同步他们最新的 Tapd 数据到他们各自的 Notion 中,不要着急,MatrixChannel 也同样支持,去看看源码吧~后期作者完善后会同样分享教程。

同时 MatrixChannel 还为你实现了,官方对于公共机器人的强制要求 OAuth 鉴权与回调功能模块,你只需要稍微配置数据,即可完成公共机器人配置,实现多用户 Tapd 同步能力。

7 后记

📍 简述了我对工作记录的思考,以及对其中的优化方案。这也正是我目前运用到实际工作的解决方案。

🕹 如果你对工具有任何不满意或者改进的地方,欢迎评论或者直接在 Github 中提交 Issues。

👏 如果本文章对你的工作上下文记载有新的思考与启发,那就太好了。如果你觉得有不同的思路,更好的解决方案或者是批评,请留言告诉我,谢谢你。