Files
2025-11-30 08:29:28 +08:00

5.3 KiB
Raw Permalink Blame History

Parallel Opportunity Detection

Purpose: Identify missed parallelization opportunities in task execution.

When: Optional post-execution (controlled by enableEfficiencyAnalysis parameter)

Applies To: Task Orchestration Skill, Planning Specialist

Token Cost: ~400-600 tokens

Parallel Opportunity Types

Type 1: Independent Tasks Not Batched

Opportunity: Tasks with no dependencies can run simultaneously

Detection:

independentTasks = tasks.filter(t =>
  query_dependencies(taskId=t.id).incoming.length == 0 &&
  t.status == "pending"
)

if (independentTasks.length >= 2 && !launchedInParallel) {
  return {
    type: "Independent tasks not batched",
    tasks: independentTasks.map(t => t.title),
    opportunity: `${independentTasks.length} tasks can run simultaneously`,
    impact: "Sequential execution when parallel possible",
    recommendation: "Use Task Orchestration Skill to batch parallel tasks"
  }
}

Type 2: Tasks with Same Dependencies Not Grouped

Opportunity: Tasks blocked by the same tasks can run in parallel after blockers complete

Detection:

// Group tasks by their blockers
tasksByBlockers = groupByBlockers(tasks)

for (blockerKey, taskGroup in tasksByBlockers) {
  if (taskGroup.length >= 2 && !inSameBatch(taskGroup)) {
    return {
      type: "Tasks with same dependencies not grouped",
      tasks: taskGroup.map(t => t.title),
      sharedBlockers: parseBlockers(blockerKey),
      opportunity: `${taskGroup.length} tasks can run parallel after blockers complete`,
      recommendation: "Batch these tasks together"
    }
  }
}

Type 3: Sequential Specialist Launches When Parallel Possible

Opportunity: Multiple specialists launched one-by-one instead of in parallel

Detection:

if (launchedSpecialists.length >= 2 && !launchedInParallel) {
  // Check if they have no dependencies between them
  noDependencies = !hasBlockingRelationships(launchedSpecialists)

  if (noDependencies) {
    return {
      type: "Sequential specialist launches",
      specialists: launchedSpecialists,
      opportunity: "Launch specialists in parallel",
      impact: "Sequential execution increases total time",
      recommendation: "Use Task tool multiple times in single message"
    }
  }
}

Type 4: Domain-Isolated Tasks Not Parallelized

Opportunity: Backend + Frontend + Database tasks can often run in parallel

Detection:

domains = {
  database: tasks.filter(t => t.tags.includes("database")),
  backend: tasks.filter(t => t.tags.includes("backend")),
  frontend: tasks.filter(t => t.tags.includes("frontend"))
}

// Check typical dependency pattern: database → backend → frontend
// BUT: If each domain has multiple tasks, those CAN run in parallel

for (domain, domainTasks in domains) {
  if (domainTasks.length >= 2 && !parallelizedWithinDomain(domainTasks)) {
    return {
      type: "Domain tasks not parallelized",
      domain: domain,
      tasks: domainTasks.map(t => t.title),
      opportunity: `${domainTasks.length} ${domain} tasks can run parallel`,
      recommendation: "Launch domain specialists in parallel"
    }
  }
}

Analysis Workflow

parallelOpportunities = []

// Check each opportunity type
checkIndependentTasks()
checkSameDependencyGroups()
checkSequentialLaunches()
checkDomainParallelization()

// Calculate potential time savings
if (parallelOpportunities.length > 0) {
  estimatedTimeSavings = calculateTimeSavings(parallelOpportunities)

  return {
    opportunitiesFound: parallelOpportunities.length,
    opportunities: parallelOpportunities,
    estimatedSavings: estimatedTimeSavings,
    recommendation: "Use Task Orchestration Skill for parallel batching"
  }
}

Report Template

## ⚡ Parallel Opportunity Detection

**Opportunities Found**: [count]
**Estimated Time Savings**: [X]% (parallel vs sequential)

### Opportunities

** INFO**: Independent tasks not batched
- Tasks: [Task A, Task B, Task C]
- Opportunity: 3 tasks can run simultaneously (no dependencies)
- Impact: Sequential execution taking 3x longer than necessary

** INFO**: Domain tasks not parallelized
- Domain: backend
- Tasks: [Task D, Task E]
- Opportunity: 2 backend tasks can run parallel

### Recommendations
1. Use Task Orchestration Skill for dependency-aware batching
2. Launch specialists in parallel: `Task(Backend Engineer, task1)` + `Task(Backend Engineer, task2)` in single message

When to Report

  • Only if enableEfficiencyAnalysis=true
  • INFO level (optimizations, not violations)
  • Most valuable after task execution workflows

Integration with Task Orchestration Skill

This analysis helps validate that Task Orchestration Skill is identifying all parallel opportunities:

// If Task Orchestration Skill was used
if (usedTaskOrchestrationSkill) {
  // Check if it identified all opportunities
  identifiedOpportunities = extractBatchStructure(output)
  missedOpportunities = parallelOpportunities.filter(o =>
    !identifiedOpportunities.includes(o)
  )

  if (missedOpportunities.length > 0) {
    return {
      severity: "WARN",
      issue: "Task Orchestration Skill missed parallel opportunities",
      missed: missedOpportunities,
      recommendation: "Update task-orchestration skill workflow"
    }
  }
}