Consumer-Driven Contracts: A Retrospective
A couple of years ago I wrote about some of the challenges we face when evolving services in response to changes in the business processes they implement, or to changes in the way they are used by their consumers. The resulting article, Consumer-Driven Contracts: A Service Evolution Pattern, was published on Martin Fowler’s site and shortly thereafter on MSDN. This month I’m delighted to announce that a newly revised version can be found – in somewhat humbling company – in the fabulous ThoughtWorks Anthology.
Consumer-Driven Contracts described what I perceived to be a common problem in real-world service-oriented solutions – that of the ostensibly loosely-coupled service estate being in fact extremely difficult to change on a service-by-service basis – and explained how we might make our service providers and consumers more independent of one another and better able to tolerate change. The article drew on my experience of building services in large organizations where, because of our schedule of frequent releases, we had to balance innovation with the minimum of system and organisational disruption. Besides discussing how we can engineer services that are tolerant of change, the article touched on several other topics related to the design and delivery of distributed systems – topics that interested me then, and continue to interest me today:
- Are agile software methodologies compatible with delivering organizational agility in the context of a service-oriented approach to business process automation?
- How can we align the specification and delivery of service functionality with the key business process drivers within an organisation?
- What are the roles and responsibilities of the several parties in a loosely coupled relationship?
- Under what circumstances can we depend on toolset-assisted service implementations, and when should we adopt more deliberate – sometimes more complex – implementation strategies, to ensure the longevity of a system?
- How ought we to translate the collaborations between the business functions through which an organisation realizes its core processes into our services’ externally observed behaviours and interactions?
I’ve discussed the ideas in Consumer-Driven Contracts with many friends and colleagues over the last couple of years, and have learnt much by continuing to test and refine their application at ground level. Now with the recent publication of the ThoughtWorks Anthology, I thought it appropriate to conduct something of a retrospective. Beginning with my next post, where I’ll consider Consumer-Driven Contracts in terms of its describing a contract vocabulary, I’ll reflect on what I’ve learnt, unpick some of the several strands in the article, and dive further into some of its more important themes.
Updated: The first three parts of this retrospective can be found here: