delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

24 Sep 2024

个人票务系统

今年二月的时候,我发过一个段子

「你是什么时候意识到自己可能需要休假了?」

「有一天我临睡前在家里的票务系统里给自己开了票,要求在家里的DNS域上添加 staging,preprod 等几个子域来符合最佳实践,然后在第二天醒来以后看到系统发出的今日待办事宜邮件的时候。」

段子归段子,我认为搭起票务系统是我在疫情期间干的最改善生活品质的一件事了。这里分享一下我的一些个人经验。

为什么你有可能会需要一套票务系统?或者说,票务系统能帮我干什么?

事务追踪系统,或者,由于其中的事务往往也被称作「票」(ticket),我个人也常戏称为票务系统, 在成规模的团队软件开发中是经常使用的一种工具。票务系统可以记录开发期间的各类任务, 将任务分解成多个可操作的子任务、为这些任务排列优先级,并将其分配给具体的人。 对任何工作而言,将工作拆解到较为具体的、可以由一个人完成,并且具有优先级和依赖关系属性的子任务, 都有助于帮助人们迅速、高效地完成工作。

在工作中我个人也很喜欢使用事务追踪系统来跟踪一些开发以外的事务性活动,并且将事务追踪系统作为一种类似笔记的工具使用, 在「票」中关联一系列相关文档,这有助于在事后总结经验或将重复性的事务性工作整理成更容易使用的形式(例如作弊条文档, 或是将常用的重复部分变成程序等等)。

这一系统的逻辑同样适用于生活中的琐事管理,例如旅行安排、家庭计划等。

以旅行计划为例,通常可能会涉及预订酒店、机票,获得签证,和当地人提前联络, 在特定日期之前设置邮局暂停投递、通知银行,乃至在出门之前关闭水闸和煤气总闸等等一系列事务。 如果将此类活动当作一个产品或里程碑,则事务追踪系统可以提供相当多的价值:

  • 在做这个项目时需要考虑哪些事。这可以在未来做类似的事情时作为参考。
  • 为具体的任务设置最后期限或死限(deadline),系统能够自动敦促相关的责任人在这些期限完成这些任务。除此之外,它也可以记录那些不受我们控制的外界系统的进度情况,在需要和对方吵架或投诉时可以让你轻松地找到某年月日自己联系过某某某/支付过某某款项这样的小事,从而在吵架中立于不败之地。
  • 了解某些具体事务的状态,形成检查单。例如,相关人员可以自信地根据系统中的票的状态表示「我绝对是把水闸关了」而不是在机场尴尬地回忆出门前是不是做过这些事情。

我认为票务系统适用于所有人,特别是有工程师背景的人。

如何高效地使用票务系统?

尽管票务系统的使用是一件比较个人化的事情,并没有一定之规,不过我个人认为以下几点有助于提高使用票务系统的效率:

  1. 对于需要一段时间才能完成,或是打算做但暂时没有时间做的事情,都应录入到票务系统中。养成记录的习惯,不仅可以帮助我们理清做了什么,要做什么,也可以帮助我们及时了解在哪些事情上花费了不必要的时间,或是是否积累了太多待办事宜需要及时改变一下现有的生活节奏,等等。
  2. 为每个任务起一个简短且清晰的标题。这可以让类似于「全部待办事宜」这类查询产生的结果(大部分事务追踪系统中这类查询只会显示标题,因此点进去一个一个查看会花费不少时间)。
  3. 给每个任务指定一个具体的负责人。负责人未必真的要去从头到尾地完成一项任务,但有负责人意味着这个人会收到事务追踪系统发来的督办邮件,从而确保任务有具体的人去做(或者向适当的人去抱怨)。
  4. 给所有任务指定适当的优先级(通常是任务的重要性)和最后期限。优先级可以帮助事务追踪系统有效地排列任务从而让我们优先处理高优先级的事务,而最后期限则可以作为一系列自动化流程的输入,例如票务系统可以每天早晚各发一封督办邮件,等等。
  5. 对于大部分有依赖关系的任务来说,为其设置依赖关系,例如 blocking,等等。对于任务较多的情况,这可以帮助做出更好的任务顺序决策。
  6. 完成任务之后及时关闭「票」并进行记录。
  7. 不定期地对此前的项目进行总结。这有助于对于大型项目进行持续的改进。

个人推荐的工具

我认为一个好的票务系统应该具备以下这些比较基本的功能。现实中,常见的开源和商业产品大部分都具备这些功能:

  1. 发送任务进展状态(某某任务有了新进展,或是分配给了具体的人)和督办(某某任务即将到期)邮件。
  2. 可以创建不同的任务类别、项目,并将任务进行分组。
  3. 生成各类报表、甘特图等的查询能力,方便掌握项目进度,也有助于为自己或其他参与者增加完成项目的成就感。
  4. 在「票」中支持使用 Markdown 或类似的语言。通常来说,「票」并不是文档,出于简洁和安全考虑,通常也不应在票务系统中长篇大论地写文字或增加附件,但支持 Markdown 为进行比较复杂的文字描述提供了可能性。
  5. 搜索。

我个人最近几年使用的票务系统是 Redmine,这是一套用 Ruby 语言写的开源事务追踪系统,它提供了很好的灵活性,便于定制,并且由于可以放在访问控制系统后面, 也能满足保护隐私方面的要求。当然,如果你不想自建系统,Jira、Asana 等商业软件也是不错的选择。

个人建议将包含 PII 的信息放在票务系统以外的地方,并进行适当的加密处理(即:即使有权限也只能获得加密后的文档), 只在票务系统中保存那些需要经常查询,并且不涉及个人隐私的信息。

总结

对于工程师,其实也包括其他任何来说,票务系统不仅是工作中的得力工具,也可以帮助我们在生活中理清事务、提高效率。 无论是管理复杂的旅行计划,还是处理日常琐事,票务系统都能让我们更高效、更有条理地完成任务。