随着时间临近发布或交付其软件项目的某个版本,很多组织都在挣扎。对于许多人来说,这是一个混乱、救火和沮丧的时期。分析依赖关系对并行工作的任何组织都有好处。依赖关系是相互关联的,将它们建模为图可以快速显示这些关联,从而能够做出减少浪费和更高效交付的决策。
软件项目中的精益原则和浪费
源自日本制造业的精益原则侧重于在不牺牲生产力的情况下系统地减少浪费。它考虑了工作负载过重和不均匀造成的浪费。消除浪费可以提高质量,同时减少生产时间和成本。通常称为 3 M: Muda、Mura 和 Muri 。这些示例包括不增加价值或生产过剩/缺陷 (muda) 的活动或过程;未能顺利进行,对流程和人员提出了不公平的要求(mura);间接成本和超负荷 (muri)。
对于软件工程,行业研究表明,最常见的浪费原因归因于
- 构建错误的功能
- 积压管理不善
- 返工
- 不必要的复杂解决方案
- 等待/多任务处理
- 人员在任务之间快速切换
- 流程开销和管理活动
表格视图
Scrum 是一种敏捷方法,其根源在于精益思想。了解依赖关系对于较大的格式很重要,例如 scrum of scrums 或长期软件交付项目。尽管如此,项目经理经常面对的视图是表格形式的,如下面的 JIRA 屏幕截图所示。
基于列表的方法看不出任务之间的潜在联系。人为从表格任务中脑补生成依赖链会花费大量时间导致没法及时决策,而且,现场的频繁变化使先前的决策失效,从而导致反复的重新规划和重新预测,造成极大的浪费。
将依赖关系建模为图形
当视图从表格切换到图形时,这几乎立即得到改善。在下图中,一条长长的依赖链清晰可见。
此图是通过Neo4j导入jira的csv数据自动生成。我们在这里看到的图制作起来非常简单。其中每个节点代表一个任务,任务通过DEPENDS_ON
关系与其他任务相关。
随着越来越多的任务在图中表示,它会迅速增长并且依赖关系清晰可见。
让我们看一下至少有一个任务打开的依赖链。
MATCH path=(:Task)-[:DEPENDS_ON]->()
WHERE ANY (n IN nodes(path)
WHERE n.status IN ["Open","In Progress"])
RETURN path

我们看到 5个待处理的链条,应该选择哪一个?通常,人们倾向于认为最长的链最重要,并首先选择它。这个 Cypher 查询将向我们展示最长的链:
MATCH path=(t:Task)-[:DEPENDS_ON*0..]->()
WHERE ANY (n IN nodes(path)
WHERE n.status IN ["Open","In Progress"])
RETURN EXTRACT (t IN nodes(path) | t.name) AS tasks, length(path) as pathLength ORDER BY pathlength DESC

也许我们应该把精力集中在长度为 4 的链条上?
链条的长度或复杂性与商业价值没有很强的相关性
我们必须抓住这个商业价值才能决定优先考虑什么。这可以通过value
每个Task
节点上的数字属性非常简单地实现。

现在让我们看看业务价值的总和,而不是路径的长度:

事实上,长度为 3 的路径在完成时会产生最高的商业价值,这也是应该重点关注的地方。这解决了 Muda——不增加价值的活动所产生的浪费。
评估影响
让我们扩展模型以包含组件。任务BELONG_TO
组件和组件RELATE_TO
其他组件。一个非常简单的示例是查看如果在项目晚期才引入更改会产生什么影响。在这里,我们看到即将发生的变化严重影响了黄色的任务节点。
首先,所有依赖于该任务的任务都会受到影响。这些以橙色表示。
此外,这些任务所属的组件与其他组件相关,可能导致其他区域也受到影响
当黄色的原始任务及其某些从属任务已经完成时,情况会变得更糟。现在影响还包括返工。
优先级决策
随着时间的推移,各种版本都会出现缺陷。在构建新功能时会发生这种情况。在许多情况下,浪费是通过优先考虑新的、价值较低的功能而不是重构来解决技术债务而产生的。我们扩展模型以添加表示 Bug 的节点和发现 Bug 的版本。
这里橙色的 Task 节点是新特性,值分别为 2 和 4。很多时候,我们看到做出的决策都是短视的,在这些决策中我们提供了一些小功能,而这些功能无论如何都没有多大价值(通常被称为“唾手可得的果实”)。当数据被建模为图形时,它为我们提供了非常快速查询的能力,并且我们能够尽可能地延迟决策,直到它们是根据事实而非假设做出的。现在有了上图的数据,我们可以看到这里的优先级应该是稳定红色的任务(具有更高的商业价值,对客户影响大),从而解决救火和返工的浪费。
尾记
在上文介绍的软件交付中,我们只触及了图结构可以做什么的皮毛。想象一下增加人员、团队和技能;分析任务分配和技能匹配,并将人员组织成小队。或者使用图来帮助分析延迟和风险的影响。同样的原则很容易应用于政府、供应链管理和库存控制中的其他应用。图无处不在!使用它们来提高效率并减少浪费。