Business Process Execution Language
The Web Services Business Process Execution Language (WS-BPEL), commonly known as BPEL, is an OASIS standard XML-based language for specifying the behavior of both executable and abstract business processes that interact exclusively through Web service interfaces.[1] It enables the orchestration of stateful, long-running interactions among multiple Web services, supporting structured programming constructs for sequencing activities, parallelism, fault handling, and compensation to model complex business logic.[1] WS-BPEL extends the basic Web services interaction model by providing a means to define process state and manage conversations between services, facilitating interoperable integration for intra- and inter-organizational applications.[1]
Developed initially as BPEL4WS 1.0 in July 2002 by IBM, Microsoft, and BEA Systems—drawing from IBM's Web Services Flow Language (WSFL) and Microsoft's XLANG—BPEL evolved to address the need for a standardized approach to composing Web services into higher-level business processes.[2] Version 1.1, released in May 2003 with contributions from SAP and Siebel Systems, was submitted to OASIS for standardization, leading to the formation of the WS-BPEL Technical Committee co-chaired by Diane Jordan of IBM and John Evdemon of Microsoft.[2] This committee, involving over 37 organizations, refined the specification, culminating in WS-BPEL 2.0 being approved as an OASIS Standard on April 11, 2007.[2][3]
Key features of WS-BPEL include support for executable processes, which provide complete behavioral specifications for automation, and abstract processes, which offer partial descriptions for design or analysis without full implementation details.[1] The language relies on WSDL 1.1 for service interfaces, XML Schema 1.0 for data types, XPath 1.0 for expressions, and XSLT 1.0 for transformations, ensuring compatibility with broader Web services standards.[1] It uses a block-structured syntax to define activities such as invoking partner services, receiving messages, assigning variables, and handling exceptions, promoting reusability and maintainability in service-oriented architectures.[1]
Since its standardization, WS-BPEL has influenced extensions like BPEL4People (2005), which integrates human tasks into processes, and remains a foundational technology for business process management in enterprise environments, though its adoption has been complemented by newer orchestration standards.
Fundamentals
Overview
Business Process Execution Language (BPEL), also known as Web Services Business Process Execution Language (WS-BPEL), is an XML-based standard language for specifying executable and abstract business processes that orchestrate interactions among web services.[1] It defines the behavior of processes in terms of structured activities that coordinate the invocation and response of web services, enabling the composition of loosely coupled services into higher-level applications.[4]
The core purpose of BPEL is to facilitate the automation of complex, long-running transactions across distributed systems within service-oriented architecture (SOA) environments, extending the basic web services interaction model to handle business-level collaborations and fault management.[1] BPEL distinguishes between executable processes, which provide detailed implementation specifications that can be directly run by a process engine, and abstract processes, which offer high-level descriptions of behavior suitable for defining public contracts or templates without exposing internal details.[1] BPEL processes are typically deployed and executed on specialized engines, such as Oracle BPEL Process Manager, which supports design, deployment, and monitoring of BPEL-based SOA applications.[5]
Key benefits of BPEL include its role in promoting standardization through an open OASIS specification, ensuring interoperability across diverse platforms and vendors, and enhancing reusability via modular process designs that reduce vendor lock-in.[4] BPEL evolved from earlier standards like Microsoft's XLANG and IBM's WSFL to provide a unified approach for web service orchestration.[4]
Historical Development
The Business Process Execution Language for Web Services (BPEL4WS) originated in July 2002 with the release of version 1.0 by IBM and Microsoft. This specification emerged as a convergence of two prior workflow languages: Microsoft's XLANG, which focused on block-structured process orchestration, and IBM's Web Services Flow Language (WSFL), which emphasized graph-based flows and abstract process definitions. By merging these approaches, BPEL4WS aimed to standardize the specification of executable business processes using web services, providing a unified notation for both private and public process interactions.[2][6]
In May 2003, BPEL4WS 1.1 was published as an updated joint specification by BEA Systems, IBM, Microsoft, SAP AG, and Siebel Systems. This version incorporated feedback from early implementations, refined syntax for better interoperability, and expanded support for fault handling and data manipulation, while maintaining backward compatibility with the initial release. The broader vendor collaboration marked a step toward industry-wide adoption.[6][2]
Following the 1.1 release, the specification was submitted to the Organization for the Advancement of Structured Information Standards (OASIS) in April 2003, prompting the formation of the Web Services Business Process Execution Language (WS-BPEL) Technical Committee in May 2003. Co-chaired by Diane Jordan of IBM and John Evdemon of Microsoft, the committee included key contributions from vendors such as Oracle and SAP, which helped address technical issues and incorporate diverse use cases. OASIS's role was pivotal in driving an open standardization process, ensuring the language's evolution through collaborative reviews.[7][2]
The committee's efforts culminated in the approval of WS-BPEL 2.0 as an OASIS Standard on April 11, 2007, after extensive public reviews, issue resolutions, and ballot processes. This version introduced enhancements like improved scoping for variables and activities, while preserving core compatibility. Since 2007, no major new versions of WS-BPEL have been ratified, reflecting the specification's maturity and stability for enterprise use. Ongoing extensions and community-driven proposals, such as those for process versioning, have supported adaptations in software from vendors like Oracle and SAP, alongside continued adoption in business process management systems.[1][8][9]
Core Concepts
Programming in the Large and Small
The concept of "programming in the large and small" in Business Process Execution Language (BPEL) distinguishes between high-level orchestration of web services and low-level implementation of individual components, reflecting BPEL's design as a language primarily suited for composing distributed processes in service-oriented architectures (SOA). Programming in the large refers to BPEL's core capability of coordinating multiple web services into structured business processes, managing aspects such as sequencing of operations, parallelism through concurrent invocations, and fault recovery mechanisms at a macro level.[1][10] In contrast, programming in the small involves handling granular logic, such as data transformations, complex conditional evaluations, or algorithmic computations, which BPEL addresses only minimally via XML-based constructs like XPath expressions for variable assignments or simple if-then structures within activities.[10][11]
This distinction arises from the recognition that business processes in SOA require abstraction from low-level details to emphasize business logic and inter-service interactions, thereby promoting separation of concerns where orchestration logic remains decoupled from service implementations.[11] BPEL abstracts implementation intricacies by treating partner services as black boxes defined via Web Services Description Language (WSDL) interfaces, allowing processes to focus on the "what" of coordination—such as message exchanges and process flows—rather than the "how" of internal service execution.[1] This approach facilitates reusability, portability across execution engines, and scalability in heterogeneous environments, as the language standardizes process descriptions without mandating specific programming paradigms for underlying services.[10]
A representative example of programming in the large is orchestrating a purchase order approval process, where BPEL defines a sequence that invokes a supplier service for inventory check, a payment service for authorization in parallel via a <flow> activity, and a notification service upon completion, incorporating fault handlers for scenarios like payment failure to trigger compensation logic.[10] For programming in the small, BPEL might embed a basic XPath expression within an <assign> activity to extract and map data from an incoming purchase order XML message to variables for subsequent service calls, such as selecting a price field based on a condition.[1]
However, BPEL's XML-centric syntax proves verbose and cumbersome for intricate small-scale logic, often resulting in bloated process definitions that hinder maintainability for tasks beyond simple data manipulations.[10] To mitigate this, BPEL commonly delegates programming in the small to external languages through integrations, such as invoking Java code via Web Services Invocation Framework (WSIF) bindings or applying XSLT transformations for complex XML processing, ensuring that fine-grained implementations remain in more expressive, imperative environments while preserving BPEL's focus on orchestration.[10][12]
Design Goals
The design goals of Business Process Execution Language (BPEL), originally outlined in the BPEL4WS 1.0 specification, aimed to create a standardized language for orchestrating web services into executable business processes while ensuring interoperability and flexibility in distributed environments. These goals, numbering ten in total, emphasized grounding BPEL firmly in web services standards to enable portable, composable processes that could handle complex, long-running interactions without proprietary dependencies.[13] The language was intended to bridge the gap between abstract process descriptions and concrete implementations, supporting both executable and abstract processes through a unified set of concepts.[6]
A primary objective was to provide a declarative, XML-based language for specifying executable processes, promoting portability across diverse platforms and vendors by leveraging XML Schema for definitions without mandating specific graphical notations or methodologies. This approach allowed processes to be described in a human-readable yet machine-processable format, facilitating easy exchange and deployment in heterogeneous systems. "BPEL4WS defines business processes using an XML based language," ensuring that all external interactions occur through WSDL-defined web service interfaces, which abstract implementation details and enhance vendor neutrality.[13] By focusing on abstract portTypes rather than concrete bindings, the design supported seamless migration and reuse across execution engines.[6]
BPEL was designed to accommodate both structured (block-based) and graph-based process flows, allowing flexible modeling of real-world business scenarios that often require sequential, parallel, or conditional execution paths. This dual support blended hierarchical control regimes, inherited from Microsoft's XLANG for orchestration, with graph-like flows from IBM's WSFL for more dynamic routing, reducing fragmentation in process languages and enabling seamless integration of both styles. The goal was to provide "both hierarchical and graph-like control regimes, and allow their usage to be blended as seamlessly as possible," addressing limitations in predecessors where XLANG emphasized rigid blocks and WSFL favored unstructured graphs.[13] This flexibility ensured that BPEL could represent complex workflows without overcomplicating simpler linear processes.[4]
To ensure reliability in distributed settings, BPEL incorporated mechanisms for long-running transactions, including compensation handlers that enable rollback of completed activities in case of failures, drawing on proven techniques like scoping and Saga patterns. These features allowed processes to manage extended interactions—such as multi-step approvals or order fulfillments—without relying on traditional ACID transactions, which are impractical for asynchronous web services. "BPEL4WS should define a long-running transaction model that is based on practically proven techniques like compensation actions and scoping to support failure recovery for parts of long-running business processes," thereby maintaining business consistency even in unreliable networks.[13] Compensation scopes provided nested fault handling, isolating recovery to specific process segments.[6]
Integration with foundational web services standards, particularly WSDL for service descriptions and SOAP for messaging, was a cornerstone goal to embed BPEL within the broader service-oriented architecture ecosystem. All process interactions, whether invoking partners or exposing endpoints, were required to use WSDL 1.1 portTypes, ensuring that BPEL processes could both consume and provide services in a standardized manner. This design mandated that "business processes... interact with external entities through Web service operations defined using WSDL 1.1 and that manifest themselves as Web services defined using WSDL 1.1," promoting loose coupling and compatibility with existing infrastructure like SOAP envelopes for reliable delivery.[13] By reusing these standards, BPEL avoided reinventing transport or description mechanisms, focusing instead on orchestration logic.[4]
Finally, reusability and modularity were prioritized by treating processes as composable web services, enabling recursive aggregation where subprocesses could be invoked as partners and policies defined via WS-Policy. This model supported hierarchical decomposition, allowing developers to build larger processes from reusable components without tight coupling. "BPEL4WS should use Web services as the model for process decomposition and assembly," facilitating scalable designs where processes could be extended or substituted dynamically.[13] The merger of XLANG's orchestration focus and WSFL's flow modeling directly influenced this composability, providing a unified foundation that addressed gaps in each predecessor's scope—XLANG's lack of graph support and WSFL's limited structured programming—through a single, extensible language.[6]
Language Structure and Elements
Business Process Execution Language (BPEL) processes are defined as XML documents conforming to an XML schema, with the <process> element serving as the root that encapsulates the entire business logic, including declarations for partner links, variables, and handlers for faults and compensations.[1] This structure enables the specification of executable processes that orchestrate web services interactions in a standardized, machine-readable format.[1]
Partner links represent the external participants in a process, defining roles and associating them with WSDL port types to specify interaction endpoints.[1] Declared within the <partnerLinks> section of the <process>, a partner link type uses <role> elements to outline the myRole and partnerRole, ensuring type-safe communication channels for service invocations and receptions.[1]
Variables provide typed storage for data manipulated during process execution, declared in the <variables> section using WSDL message types, XML Schema types, or elements to maintain data integrity.[1] Scopes, defined via the <scope> activity, allow variables to be nested for encapsulation, supporting isolated execution contexts that facilitate modular process design and integration with fault and compensation handling.[1]
The core activities form the executable building blocks of a BPEL process, structured hierarchically within the <process> to control flow and interactions. The <sequence> activity executes a series of child activities in sequential order, providing a linear control flow for straightforward process steps.[1] For parallelism, the <flow> activity enables concurrent execution of multiple branches, synchronizing upon completion or specific conditions.[1] Conditional logic is handled by the <switch> activity, which evaluates cases to select and execute one branch, or defaults to an otherwise clause if no match is found.[1] Repetition is achieved through the <while> activity, which iterates its child activities as long as a specified Boolean condition holds true.[1]
Interaction with external services occurs via communication activities: <invoke> calls a partner's operation, specifying input and output variables for synchronous or asynchronous exchanges; <receive> waits for an incoming message on a specified partner link and operation, potentially creating a new process instance; and <reply> sends a response back to the invoking partner.[1] Data manipulation is performed using the <assign> activity, which copies or transforms values between variables, message parts, or expressions via XPath for queries and assignments, or XSLT for complex transformations.[1]
Fault handling is managed through <faultHandlers> within scopes or the process, containing <catch> blocks that intercept specific faults by name or type, allowing custom recovery logic such as rethrows or terminations.[1] For long-running transactions, compensation handlers (<compensationHandler>) enable undo operations on completed scopes, invoked explicitly or automatically upon fault to reverse prior activities and maintain process consistency.[1]
A basic example of an <invoke> activity demonstrates service interaction:
xml
<invoke name="shipGoods" partnerLink="shippingPL"
portType="sh:ShippingOrderPortType" operation="ShipGoods"
inputVariable="shipRequest" outputVariable="shipConfirmation"/>
<invoke name="shipGoods" partnerLink="shippingPL"
portType="sh:ShippingOrderPortType" operation="ShipGoods"
inputVariable="shipRequest" outputVariable="shipConfirmation"/>
This snippet invokes the "ShipGoods" operation on the shipping partner, passing input from shipRequest and storing the output in shipConfirmation.[1]
Standards and Relationships
WS-BPEL 2.0 Specification
WS-BPEL 2.0 was approved as an OASIS Standard on April 11, 2007, by the OASIS Web Services Business Process Execution Language (WS-BPEL) Technical Committee, following a multi-year development process that included public reviews starting in 2006.[1] The specification addressed comments received during these public reviews to refine the language, ensuring greater maturity and interoperability. It is largely backward compatible with the earlier BPEL4WS 1.1 version for executable processes, though some elements were removed or deprecated, requiring migration adjustments.[1] This standardization extended the Web Services interaction model to support both executable and abstract business processes, enabling orchestration of stateful, long-running conversations.[1]
A key advancement in WS-BPEL 2.0 involved the introduction of new activity types to enhance control flow and process reliability. The repeatUntil activity executes a nested activity repeatedly until a specified condition becomes true, with the condition evaluated after each iteration.[1] The forEach activity supports iteration over a list of values, allowing parallel or serial execution of a scope activity for each item, which improves handling of multi-instance scenarios.[1] Additional activities include validate for checking variable parts against XML Schema or WSDL definitions, rethrow to propagate a caught fault from within a fault handler, and exit to immediately terminate the entire process instance.[1]
Enhancements in WS-BPEL 2.0 focused on data manipulation, extensibility, and termination mechanisms. Data handling was improved by mandating XPath 1.0 as the default expression language for queries and assignments, with support for alternatives via explicit declarations.[1] Extension points were strengthened through the <extensionActivity> element for defining custom activities and <extensionAssignOperation> for new assignment operations, allowing vendors to integrate proprietary features without altering core semantics.[1] Process termination was made more explicit with the exit activity and refined fault propagation rules, reducing ambiguity in error scenarios.[1]
Refinements to abstract processes in WS-BPEL 2.0 introduced profiles for observable behavior and templates, enabling non-executable descriptions that serve as contracts or choreography blueprints. Templates use opaque placeholders to specify required interactions without full implementation details, facilitating reusable process skeletons in service-oriented architectures.[4]
Compared to BPEL 4WS 1.1, WS-BPEL 2.0 eliminated many undefined behaviors by providing precise semantics for activities and data access, such as rejecting references to undefined variables during static checks.[14] It added support for explicit message exchange patterns, including request-response and out-in-out, to better model complex Web Service interactions.[1] Furthermore, Appendix B introduced mandatory basic static analysis rules to detect structural errors early, enhancing verifiability and tool support.[1]
Implementation of WS-BPEL 2.0 saw adoption in open-source engines like ActiveBPEL, which provided migration tools from 1.1 processes and full compliance for executable processes.[15] In enterprise environments, it influenced BPM suites such as Oracle SOA Suite, enabling standardized orchestration in service composite applications and improving process governance across heterogeneous systems.[16]
Relationship to BPMN
Business Process Model and Notation (BPMN) is a graphical standard for specifying business processes in a notation readily understandable by diverse audiences, including business analysts, technical developers, and managers. Initially released as version 1.0 in May 2004 by the Business Process Management Initiative (BPMI), it was adopted as an Object Management Group (OMG) standard in February 2006, providing a visual means to model process flows, interactions, and decisions. BPMN 2.0, released in January 2011, extended these capabilities with enhanced semantics for executable processes, including support for orchestration and formal metamodels to enable tool interoperability and execution.[17][18]
BPEL and BPMN serve complementary roles in business process management, with BPMN emphasizing visual design, documentation, and analysis of processes at a high level, while BPEL focuses on XML-based execution and deployment of service-oriented processes. This division allows BPMN to bridge business and technical stakeholders during modeling phases, whereas BPEL enables runtime orchestration of web services within service-oriented architectures. Their synergy supports a workflow where graphical BPMN models inform the development of executable BPEL code, enhancing process lifecycle management without redundancy.[19][20]
Mapping BPMN elements to BPEL presents challenges due to structural differences, such as BPMN's event-driven gateways (e.g., exclusive, parallel, inclusive) and pools (representing process participants) requiring translation to BPEL's activities (e.g., invoke, receive) and partner links for interaction handling. BPMN's greater flexibility in modeling unstructured flows often necessitates restricting to a core subset—focusing on well-structured tasks, sequence flows, and basic gateways—for generating fully executable BPEL without loss of semantics or introducing dead paths. These mappings preserve control flow but may require additional refinements for data handling and error propagation to ensure runtime compliance.[20]
Efforts in aligning WS-BPEL 2.0 (finalized in 2007) with BPMN 2.0 have targeted round-trip engineering, enabling processes to be designed graphically in BPMN, automatically generate BPEL code for execution, and potentially reverse-engineer changes back to BPMN models. This alignment, informed by research on pattern-based transformations, aims to minimize information loss during conversions, though full bidirectional fidelity remains limited by language paradigms. BPMN 2.0's executable conformance subclass specifically facilitates such translations to BPEL, promoting standardized process enactment in SOA environments.[17][21]
In practice, BPMN-to-BPEL transformations are implemented in tools like Oracle Business Process Architect (BPA) Suite, where graphical BPMN models are converted to executable BPEL processes deployable on Oracle SOA Suite, allowing analysts to edit visually while developers refine logic for runtime execution. Similar capabilities exist in IBM WebSphere environments, integrating BPMN modeling with BPEL orchestration to support end-to-end process automation. These tools enable simulation, validation, and deployment, such as in workflows involving human tasks and service invocations, streamlining development from design to operation.[19][22]
Despite these advances, limitations persist in equivalence between the standards: BPEL's inherently block-oriented structure, relying on nested scopes and flows, contrasts with BPMN's free-form graph-based diagrams that permit arbitrary cycles and unstructured paths. Consequently, BPMN elements like ad-hoc subprocesses—allowing flexible, non-sequential execution—lack direct counterparts in BPEL, which enforces structured loops and acyclic flows within activities, potentially requiring workarounds or extensions for full representation. This disparity underscores the need for hybrid approaches in complex, dynamic process scenarios.[23][20]
Extensions
Integration of Programming in the Small
BPEL processes, being defined in XML, often require verbose markup for basic operations such as conditional branching, loops via <while> or <repeatUntil>, and simple calculations within <assign> activities, which can lead to increased complexity and reduced readability in process definitions.[24] This limitation arises because BPEL is primarily designed for orchestration at a high level, treating fine-grained logic as compositions of web service invocations rather than direct imperative code.[1]
To address these gaps, BPEL supports embedding lightweight scripting through the <assign> activity's <copy> elements, where expressions in the <from> and <to> parts can utilize XPath 1.0 for queries and basic computations, or XSLT 1.0 for more complex transformations on XML data.[1] For instance, XPath functions enable inline evaluations like string concatenation or numerical operations without external service calls.[25] Additionally, vendor extensions allow integration of higher-level languages; Oracle SOA Suite provides the <bpelx:exec> Java embedding activity, permitting snippets of Java code within a BPEL process to handle tasks like custom arithmetic or data manipulation, while maintaining compatibility with the XML structure.[26] Similarly, the Web Services Invocation Framework (WSIF) enables BPEL to invoke non-XML-based logic, such as local Java methods or EJB components, by treating them as abstract web services through dynamic bindings.[27]
The WS-BPEL 2.0 specification formalizes extensibility through dedicated points like <extensionAssignOperation> for custom data operations in <assign> activities and <extensionActivity> for entirely new activity types, allowing implementations to plug in domain-specific handlers without altering core semantics.[1] Examples include BPEL Java Embedding in Oracle environments, where a snippet might compute int result = (getVariableData("input").getInt() * 2) + 5; and store it back to a variable, or WSIF for invoking a Java class method directly in a process step.[26] These mechanisms draw from the distinction between programming in the large (orchestration) and programming in the small (detailed logic), enabling hybrid approaches.[1]
Such integrations offer key benefits, including reduced process definition size—often by an order of magnitude for repetitive computations—and enhanced maintainability by leveraging familiar programming paradigms, all while preserving BPEL's focus on service composition and transactionality.[28] For example, embedding Java avoids lengthy chains of <invoke> activities to external calculators, improving performance through inline execution.[28]
Currently, these enhancements remain largely vendor-specific; implementations in platforms like Oracle SOA Suite and Informatica ActiveVOS support Java and custom extensions, but the WS-BPEL 2.0 standard provides only the framework for extensibility without mandating uniform support for specific languages like Java or C#.[26][29] No subsequent OASIS standard has standardized these programming integrations beyond the 2.0 extension points.[1]
BPEL4People
BPEL4People is an extension to the WS-BPEL standard designed to incorporate human interactions into automated business processes, addressing scenarios such as approvals, reviews, and collaborative decision-making that require human intervention. By treating human tasks as first-class citizens alongside automated web service interactions, it enables the modeling of people-intensive workflows while maintaining the portability and interoperability of BPEL processes across different vendor implementations.[30]
The initiative originated from a joint white paper published by IBM and SAP in August 2005, proposing extensions to BPEL for human-centric processes, and was later expanded with contributions from Oracle, BEA Systems, Active Endpoints, and Adobe Systems. In June 2007, the group submitted the specification to the OASIS BPEL4People Technical Committee for standardization, where it advanced through public reviews and revisions. It was approved as an OASIS Committee Specification version 1.1 in August 2010, but did not achieve full OASIS Standard status, remaining a proposed extension rather than a ratified standard.[31][30]
Key components of BPEL4People include people activities, introduced as a new basic activity type (e.g., <peopleActivity>) that encapsulates human tasks or notifications within a BPEL process, supporting both inline definitions and references to external tasks for routing and execution. It integrates with the Human Task Service (HTS), a runtime component that manages the lifecycle of human tasks, including creation, assignment, and completion. Central to this is the close coupling with the WS-HumanTask specification, which defines the structure and operations for human tasks and notifications, exposed as web services to ensure seamless invocation from BPEL processes.[30][32]
BPEL4People provides features for robust human task management, including task definitions that leverage WS-HumanTask schemas for specifying inputs, outputs, and rendering hints, often integrated with WSDL interfaces for service exposure. It supports configurable deadlines and escalations through scheduled actions like deferral or expiration, priority levels that can be overridden at the process instance level, and delegation mechanisms allowing tasks to be reassigned among generic human roles such as process initiators, stakeholders, or administrators. For handling errors in human interactions, it relies on BPEL's compensation handlers to undo or adjust process states affected by incomplete or erroneous human tasks.[30][33]
In relation to WS-BPEL, BPEL4People introduces these people activities as additional constructs that extend the language's extensibility framework, allowing processes to invoke human services in parallel or sequence with automated ones without disrupting core BPEL semantics like scoping, fault handling, or compensation. This enables hybrid workflows where human elements are modeled declaratively, enhancing BPEL's applicability to real-world business scenarios beyond purely automated interactions.[30]
Adoption of BPEL4People has occurred primarily through vendor implementations, such as Oracle SOA Suite, which incorporates human workflow capabilities aligned with the specification for embedding human tasks in BPEL composites, and SAP NetWeaver, where it supports extended BPEL processes for enterprise workflows. Despite its committee specification status, these platforms demonstrate practical use in production environments for managing people-intensive processes.[34]