Parallel Approval
Multiple approvers working simultaneously with different consensus strategies
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.
📋 Overview
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.
✅ Any One Approval Strategy
The fastest parallel strategy: workflow continues when any single approver approves the request.
Implementation
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👥 All Must Approve Strategy
The most stringent strategy: all approvers must approve before workflow continues.
High-Security Implementation
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🗳️ Majority Approval Strategy
Democratic approach: workflow continues when more than half of the approvers approve.
Board Approval Implementation
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"
minimum_responses: 3 # At least 3 must respond
timeout: "7_days"
on_approve:
continue_to: "executive_implementation"
on_reject:
continue_to: "revision_required"📊 Weighted Approval Strategy
Advanced strategy where different approvers have different voting weights.
weighted_approval:
name: "weighted_approval"
type: "parallel_approval"
description: "Weighted Committee Decision"
approvers:
- role: "ceo"
weight: 3
- role: "cfo"
weight: 2
- role: "cto"
weight: 2
- role: "department_head"
weight: 1
approval_strategy: "weighted"
required_weight: 5 # Need at least 5 points to approve
on_approve:
continue_to: "execution"
on_reject:
continue_to: "reconsideration"🔄 Mixed Approval Strategies
Quorum-Based Approval
quorum_approval:
name: "quorum_approval"
type: "parallel_approval"
description: "Committee with Quorum Requirement"
approvers:
- role: "committee_chair"
- role: "committee_member_1"
- role: "committee_member_2"
- role: "committee_member_3"
- role: "committee_member_4"
approval_strategy: "quorum"
quorum_size: 3 # At least 3 must participate
approval_threshold: 2 # Of those participating, 2 must approve
timeout: "5_days"
on_approve:
continue_to: "implementation"
on_reject:
continue_to: "revision_cycle"Hierarchical Parallel Approval
hierarchical_approval:
name: "hierarchical_approval"
type: "parallel_approval"
description: "Hierarchical Team Review"
approvers:
- role: "senior_manager"
required: true # Must approve
- role: "team_lead_1"
- role: "team_lead_2"
- role: "team_lead_3"
approval_strategy: "hierarchical"
required_approvers: ["senior_manager"] # Must have these
additional_required: 1 # Plus at least 1 team lead
on_approve:
continue_to: "project_kickoff"🎯 Real-World Scenarios
IT Change Management
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 Approval Committee
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 Approval Process
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"⚙️ Advanced Features
Dynamic Approver Assignment
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"Conditional Approval Requirements
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"Escalation Handling
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"📊 Performance & Analytics
Approval Metrics
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"Workload Balancing
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"📋 Best Practices
Design Principles
- Clear Strategy: Choose the right approval strategy for your use case
- Reasonable Timeouts: Set realistic deadlines for group decisions
- Backup Plans: Define escalation paths for non-responsive approvers
- Workload Management: Balance approval requests across team members
Performance Optimization
- Minimize Approver Count: Only include necessary stakeholders
- Smart Notifications: Avoid overwhelming approvers with notifications
- Batch Processing: Group similar requests for efficient review
- Clear Context: Provide sufficient information for quick decisions
User Experience
- Mobile Accessibility: Ensure approvers can respond from any device
- Consolidated Views: Show progress across all parallel approvers
- Discussion Features: Enable communication between approvers
- Delegation Support: Allow temporary delegation during absences
Next Steps:
- Learn about Automatic Processing for system integrations
- Explore SLA Management for timeout handling
- See Real Examples of parallel approval in action