Skip to content

Parallel Approval

Parallel approval enables multiple approvers to review requests simultaneously, with configurable strategies for reaching consensus. This pattern is essential for committee-based decisions, peer reviews, and scenarios requiring input from multiple stakeholders.

Parallel approval steps (parallel_approval) send approval requests to multiple people at the same time, then continue the workflow based on a defined approval strategy. This significantly reduces approval time compared to sequential approval chains.

The fastest parallel strategy: workflow continues when any single approver approves the request.

purchasing_approval:
name: "purchasing_approval"
type: "parallel_approval"
description: "Purchasing Team Review"
approvers:
- role: "purchasing_officer_1"
- role: "purchasing_officer_2"
- role: "purchasing_officer_3"
approval_strategy: "any_one"
on_approve:
continue_to: "procurement_processing"
on_reject:
notify_requestor: "Purchase request denied by purchasing team"
end_workflow: true

The most stringent strategy: all approvers must approve before workflow continues.

security_approval:
name: "security_approval"
type: "parallel_approval"
description: "Security Committee Review"
approvers:
- role: "security_officer"
- role: "compliance_manager"
- role: "legal_counsel"
- role: "it_director"
approval_strategy: "all"
timeout: "72_hours"
on_approve:
continue_to: "implementation"
on_reject:
notify_requestor: "Security review failed - all approvers must approve"
end_workflow: true

Democratic approach: workflow continues when more than half of the approvers approve.

board_approval:
name: "board_approval"
type: "parallel_approval"
description: "Board of Directors Review"
approvers:
- role: "board_chair"
- role: "board_member_finance"
- role: "board_member_operations"
- role: "board_member_technology"
- role: "independent_director"
approval_strategy: "majority"
required_count: 3 # At least 3 must approve
timeout: "7_days"
on_approve:
continue_to: "executive_implementation"
on_reject:
continue_to: "revision_required"

The following strategies are planned for future releases.

change_approval_board:
name: "change_approval_board"
type: "parallel_approval"
description: "IT Change Approval Board"
approvers:
- role: "it_operations_manager"
- role: "security_specialist"
- role: "application_owner"
- role: "business_stakeholder"
approval_strategy: "majority"
# Risk-based timeout
timeout: |
{% if risk_level == 'high' %}
24_hours
{% elif risk_level == 'medium' %}
48_hours
{% else %}
72_hours
{% endif %}
on_approve:
continue_to: "change_implementation"
on_reject:
continue_to: "change_revision"
budget_committee:
name: "budget_committee"
type: "parallel_approval"
description: "Annual Budget Review Committee"
approvers:
- role: "cfo"
weight: 3
required: true
- role: "department_head_engineering"
weight: 2
- role: "department_head_sales"
weight: 2
- role: "department_head_operations"
weight: 1
- role: "hr_director"
weight: 1
approval_strategy: "weighted"
required_weight: 6
minimum_approvers: 3
# Extended timeline for budget reviews
timeout: "2_weeks"
reminder_intervals: ["3_days", "1_day"]
on_approve:
continue_to: "budget_implementation"
on_reject:
continue_to: "budget_revision"
vendor_evaluation:
name: "vendor_evaluation"
type: "parallel_approval"
description: "New Vendor Evaluation"
approvers:
- role: "procurement_manager"
- role: "legal_counsel"
- role: "finance_controller"
- role: "technical_lead"
- role: "security_officer"
approval_strategy: "custom"
custom_logic: |
# Procurement and Legal must approve
required_roles = ["procurement_manager", "legal_counsel"]
# Plus majority of remaining roles
remaining_approvals = total_approvals - required_role_approvals
required_remaining = ceil(remaining_roles.length / 2)
return required_role_approvals == 2 and remaining_approvals >= required_remaining
on_approve:
continue_to: "vendor_onboarding"
on_reject:
continue_to: "vendor_reevaluation"
dynamic_committee:
name: "dynamic_committee"
type: "parallel_approval"
description: "Dynamic Committee Based on Request"
# Dynamic approver selection
approvers: |
{% set committee = ["department_head"] %}
{% if amount > 50000 %}
{% set committee = committee + ["cfo"] %}
{% endif %}
{% if category == "technology" %}
{% set committee = committee + ["cto"] %}
{% endif %}
{% if involves_external_parties %}
{% set committee = committee + ["legal_counsel"] %}
{% endif %}
{{ committee }}
approval_strategy: "all"
on_approve:
continue_to: "execution"
risk_based_approval:
name: "risk_based_approval"
type: "parallel_approval"
description: "Risk-Based Approval Requirements"
approvers:
- role: "risk_manager"
- role: "compliance_officer"
- role: "business_owner"
- role: "technical_lead"
# Strategy changes based on risk level
approval_strategy: |
{% if risk_level == "high" %}
all
{% elif risk_level == "medium" %}
majority
{% else %}
any_one
{% endif %}
on_approve:
continue_to: "risk_mitigation_planning"
escalated_approval:
name: "escalated_approval"
type: "parallel_approval"
description: "Approval with Escalation"
approvers:
- role: "primary_approver_1"
- role: "primary_approver_2"
- role: "primary_approver_3"
approval_strategy: "majority"
timeout: "48_hours"
# Escalation if timeout
on_timeout:
escalate_to:
approvers:
- role: "senior_director"
- role: "vp_operations"
approval_strategy: "any_one"
timeout: "24_hours"
on_approve:
continue_to: "implementation"
approval_with_metrics:
name: "approval_with_metrics"
type: "parallel_approval"
description: "Tracked Parallel Approval"
approvers:
- role: "approver_1"
- role: "approver_2"
- role: "approver_3"
approval_strategy: "majority"
# Track performance metrics
metrics:
track_response_time: true
track_approval_patterns: true
measure_bottlenecks: true
# Performance targets
sla:
target_response_time: "24_hours"
escalation_threshold: "48_hours"
on_approve:
continue_to: "next_step"
balanced_approval:
name: "balanced_approval"
type: "parallel_approval"
description: "Workload-Balanced Approval"
# Intelligent approver selection
approver_selection: "balanced"
approver_pool:
- role: "senior_analyst_1"
- role: "senior_analyst_2"
- role: "senior_analyst_3"
- role: "senior_analyst_4"
# Select 2 with least current workload
selected_approvers: 2
selection_strategy: "least_busy"
approval_strategy: "any_one"
on_approve:
continue_to: "processing"
  1. Clear Strategy: Choose the right approval strategy for your use case
  2. Reasonable Timeouts: Set realistic deadlines for group decisions
  3. Backup Plans: Define escalation paths for non-responsive approvers
  4. Workload Management: Balance approval requests across team members
  1. Minimize Approver Count: Only include necessary stakeholders
  2. Smart Notifications: Avoid overwhelming approvers with notifications
  3. Batch Processing: Group similar requests for efficient review
  4. Clear Context: Provide sufficient information for quick decisions
  1. Mobile Accessibility: Ensure approvers can respond from any device
  2. Consolidated Views: Show progress across all parallel approvers
  3. Discussion Features: Enable communication between approvers
  4. Delegation Support: Allow temporary delegation during absences

Next Steps: