While thinking about the complexity resulting from conventional object oriented techniques in building enterprise software, I realised that such complexity is in the nature of such OO-like systems as they grow really large.
What do I mean by OO-like systems? I mean the systems containing group of entities interacting with each other in a manner that is not very structured. The visible behaviour they produce is the effect of their co-ordinated efforts; and no single entity takes the responsibility for the total behaviour of the system.
There are many real life examples of such systems from human society, physical world or our own body that is made up of large number of cells.
I consider the behaviour of such system as a result of choreography. As in dance choreography - all the performers produce the desired effect together. They all must act synchronously in order to achieve the outcome and there is no central conductor involved to direct them at any given moment. The overall design or plan is distributed among performers with each one taking responsibility for his own steps.
Thus we can define choreography as – behaviour resulting from a group of interacting individual entities with no central authority.
What about orchestration then?
Orchestration is the other extreme when the behaviour is a result of centrally controlled authority. E.g we can consider human behaviour as result of brain, a central conductor controlling various organs, each one responsible for performing tasks independently.
This approach is similar to musical orchestra in which - a central conductor controls a group of performers independently performing their own instruments. There is no direct interaction between performers.
Thus orchestration can be defined as – behaviour resulting from a central conductor co-coordinating the behaviours of individual entities performing tasks independent of each other.
These two approaches are quite distinct but could be useful in producing intended behaviour such as in software systems. And I don’t think that these approaches are a matter of perspective only. They are useful techniques that we can employ to address complexity. Also they represent opposite ends of a spectrum and most systems fall somewhere in between.
As in real organization, we employ both these techniques – orchestration by means of formal hierarchy and choreography within small teams for effective team work. Using both these techniques, real organizations can achieve their goal.
I expect, software too, should make clever use of orchestration and choreography to achieve intended behaviour. The present techniques have too much reliance on choreography – OO for example. BPEL does offer orchestration of services but I don’t think that’s enough to address the complexity we are facing at enterprise level.
Orchestration and choreography can be considered as separate approaches in software with properties as expressed below
- Has a central conductor
- Each performer performs tasks independently
- Tasks produce real world effect
- Performer is not aware of the orchestrating conductor(s) using it
- Entities interact with each other to produce real world effect
- No central conductor, no overall responsibility
- Each entity carry part of responsibility
Employing Orchestration to model core organization behaviour can simplify IT systems.