DependencyTracking dependency-tracking

依赖跟踪是一种项目管理技能,用于映射、跟踪和管理项目中的依赖关系,识别关键路径项目,预防阻塞问题,优化资源规划和风险缓解。

项目管理 0 次安装 0 次浏览 更新于 3/3/2026

依赖跟踪

依赖跟踪确保任务关系可见性,及早识别阻塞问题,并实现更好的资源规划和风险缓解。

何时使用

  • 多团队项目和程序
  • 复杂的技术集成
  • 跨组织倡议
  • 识别关键路径项目
  • 资源分配计划
  • 防止进度延迟
  • 新团队成员入职

指令

1. 依赖映射

# 依赖映射和跟踪

class DependencyTracker:
    DEPENDENCY_TYPES = {
        'Finish-to-Start': '任务B不能开始,直到任务A完成',
        'Start-to-Start': '任务B不能开始,直到任务A开始',
        'Finish-to-Finish': '任务B不能完成,直到任务A完成',
        'Start-to-Finish': '任务B不能完成,直到任务A开始'
    }

    def __init__(self):
        self.tasks = []
        self.dependencies = []
        self.critical_path = []

    def create_dependency_map(self, tasks):
        """创建视觉依赖网络"""
        dependency_graph = {
            'nodes': [],
            'edges': [],
            'critical_items': []
        }

        for task in tasks:
            dependency_graph['nodes'].append({
                'id': task.id,
                'name': task.name,
                'duration': task.duration,
                'owner': task.owner,
                'status': task.status
            })

            for blocker in task.blocked_by:
                dependency_graph['edges'].append({
                    'from': blocker,
                    'to': task.id,
                    'type': 'Finish-to-Start',
                    'lag': 0  # 天数任务间
                })

        return dependency_graph

    def analyze_critical_path(self, tasks):
        """识别最长链的依赖任务"""
        paths = self.find_all_paths(tasks)
        critical_path = max(paths, key=len)

        return {
            'critical_items': critical_path,
            'total_duration': sum(t.duration for t in critical_path),
            'slack_available': 0,
            'any_delay_impacts_schedule': True,
            'monitoring_frequency': 'Daily'
        }

    def identify_blocking_dependencies(self, tasks):
        """找到阻碍其他工作的项目"""
        blocking_tasks = {}

        for task in tasks:
            blocked_count = sum(1 for t in tasks if task.id in t.blocked_by)
            if blocked_count > 0:
                blocking_tasks[task.id] = {
                    'task': task.name,
                    'blocking_count': blocked_count,
                    'blocked_tasks': [t.id for t in tasks if task.id in t.blocked_by],
                    'status': task.status,
                    'due_date': task.due_date,
                    'risk_level': 'High' if blocked_count > 3 else 'Medium'
                }

        return blocking_tasks

    def find_circular_dependencies(self, tasks):
        """检测循环依赖链"""
        cycles = []

        for task in tasks:
            visited = set()
            if self.has_cycle(task, visited, tasks):
                cycles.append({
                    'cycle': visited,
                    'severity': 'Critical',
                    'action': '立即解决'
                })

        return cycles

    def has_cycle(self, task, visited, tasks):
        visited.add(task.id)

        for blocker_id in task.blocked_by:
            blocker = next(t for t in tasks if t.id == blocker_id)

            if blocker.id in visited:
                return True
            if self.has_cycle(blocker, visited, tasks):
                return True

        visited.remove(task.id)
        return False

2. 依赖管理看板

依赖跟踪仪表板:

项目:平台迁移Q1 2025

---

关键路径(阻塞进度):

任务:数据库迁移
  ID: TASK-101
  负责人:数据团队
  持续时间:20天
  状态:进行中(50%)
  截止日期:2025年2月28日
  被阻塞:模式验证(TASK-95)- 今天到期
  阻塞:6个下游任务
  风险等级:高
  行动项目:
    - 与数据团队每日站立会议
    - 模式验证必须在EOD之前完成
    - 准备回滚计划

---

任务:API合同最终确定
  ID: TASK-102
  负责人:后端团队
  持续时间:10天
  状态:待定(阻塞)
  依赖于:数据库迁移(TASK-101)
  阻塞:前端实现(TASK-103)、测试(TASK-104)
  松弛时间:0天(关键)
  早期开始:2025年3月1日
  行动项目:
    - 现在开始起草规范
    - 与前端团队审查
    - 准备替代方案

---


高风险依赖:

依赖:第三方集成
  从:支付服务API(供应商)
  到:结账系统(TASK-150)
  类型:外部/不可控
  状态:风险(供应商报告延迟)
  缓解:模拟服务实现,确定替代供应商
  升级负责人:产品经理

---

按团队依赖:

后端团队:
  - 数据库迁移 → API开发
  - 模式设计 → 数据层实现
  外部:等待支付网关API文档

前端团队:
  - API合同 → UI实现
  - 设计系统 → 组件开发
  依赖于后端:API合同规范(计划2月20日)

DevOps团队:
  - 基础设施配置 → 测试环境
  - Kubernetes设置 → 暂存部署
  外部:云提供商配额批准

3. 依赖解决

// 处理和解决依赖问题

class DependencyResolution {
  resolveDependencyConflict(blocker, blocked) {
    return {
      conflict: {
        blocking_task: blocker.name,
        blocked_task: blocked.name,
        reason: '检测到循环依赖'
      },
      resolution_options: [
        {
          option: '并行工作',
          description: '确定可以进行的独立部分',
          effort: '中等',
          timeline: '可以节省5天'
        },
        {
          option: '移除/推迟阻塞者',
          description: '推迟非关键需求',
          effort: '低',
          timeline: '立即'
        },
        {
          option: '创建临时交付物',
          description: '提供部分结果以解锁下游',
          effort: '高',
          timeline: '可以节省8天'
        }
      ]
    };
  }

  breakDependency(dependency) {
    return {
      current_state: dependency,
      break_strategies: [
        {
          strategy: '移除不必要的依赖',
          action: '重构以消除需求',
          risk: '如果验证,风险低'
        },
        {
          strategy: '模拟/桩外部依赖',
          action: '创建临时实现',
          risk: '中等 - 确保兼容性'
        },
        {
          strategy: '并行开发',
          action: '做出假设,稍后验证',
          risk: '中等 - 可能需要重做'
        },
        {
          strategy: '增加资源',
          action: '并行工作流',
          risk: '风险低但成本高'
        }
      ]
    };
  }

  handleBlockedTask(task) {
    return {
      task_id: task.id,
      status: 'Blocked',
      blocker: task.blocked_by[0],
      time_blocked: task.calculateBlockedDuration(),
      actions: [
        '通知团队阻塞',
        '如果关键路径则升级',
        '确定替代工作',
        '安排解决会议',
        '跟踪阻塞关闭日期'
      ],
      escalation: {
        immediate: task.is_critical_path,
        owner: task.program_manager,
        frequency: '直到解决的每日站立'
      }
    };
  }
}

4. 依赖仪表板指标

关键指标:

关键路径健康:
  - 关键路径上的项目:12
  - 风险项目:2(17%)
  - 已完成:4(33%)
  - 进度正常:6(50%)
  - 落后:2(17%)

依赖状态:
  - 总依赖:28
  - 已解决:18
  - 活跃:8
  - 风险:2
  - 循环:0(好!)

阻塞影响:
  - 当前被阻塞的任务:3
  - 团队成员空闲:2
  - 被阻塞的工作量(人小时):24
  - 阻塞估计成本:$2,400

升级:
  - 打开:1(数据库迁移依赖)
  - 本周已解决:0
  - 平均解决时间:2.3天

最佳实践

✅ 要做

  • 规划初期映射依赖
  • 每周更新依赖跟踪
  • 识别和监控关键路径项目
  • 主动沟通阻塞者
  • 为关键依赖制定应急计划
  • 将复杂依赖分解为小块
  • 分开跟踪外部依赖
  • 立即升级被阻塞的关键路径项目
  • 移除不必要的依赖
  • 为风险依赖建立缓冲时间

❌ 不要做

  • 忽视外部依赖
  • 未解决循环依赖
  • 假设依赖会“解决”
  • 跳过关键路径的日常监控
  • 仅在状态会议中沟通问题
  • 创建太多依赖(耦合系统)
  • 忘记记录依赖理由
  • 避免升级被阻塞的关键工作
  • 计划100%利用率(无依赖缓冲)
  • 将所有依赖视为同等优先级

依赖管理提示

  • 在跟踪工具中按风险等级颜色编码
  • 每周审查被阻塞/风险项目
  • 保持更新的依赖图
  • 阻塞后1天内升级
  • 为风险依赖建立15-20%的缓冲