August 11, 2002
Service decomposition
I guess I'm contractually bound to read anything which Ray says is a pre-requisite. So, I've been mulling the paper he referenced about modularity in technology and organization design. It's an erudite and interesting survey of the role of modularity in technology, and application of some modularity and decomposability principles to the structures of organizations, calling in via the thorny world of property rights. There's one word which is conspicuous by its absence, and which can operate as a scalpel: service. A service viewpoint is indispensable in building component software (especially in asynchronous structures). Saying simply "this is a component" (or even "an object") doesn't much illuminate the interfaces between one component and the rest of a system. But things become very clear when you start talking about the services which one component requires from others, provides to others, about the service levels which can be expected, and about the types of notification which consumers will need whilst their service is being performed. "Web Services", incidentally, is a great term for just this reason. Groove's software architecture is quite cleanly structured around abstract service providers: transport, security, storage, and so on. The thin abstraction above a single component then becomes "provider": an abstract service provider creates an interface by which you can obtain services of a particular class, appropriate to your needs, with very little knowledge of the inner workings of that service's provision. You get "mix and match". Within an application, this begins to let you maintain multiple versions of componentry which might be revised, on different timescales, largely independent of each other. The same is true organizationally, and in discussing property rights (authority, alienability and residual income: all important aspects of property, but I read too much Proudhon to take that stuff seriously) you miss the point of organization. The structure of The Firm is not primarily to consolidate property rights (a defensive model), but to enable growth (an expansive model). Growth requires innovation. Modularity of service enables innovation. In an organization decomposed by service provision, strategic outsourcing decisions can be made quite easily; the Firm becomes flexible not only because it inherits the ability to expand and contract the workforce overnight (the commonly-held negative viewpoint), but because the service interface is an entrepreneurial interface understood by the outside world. If you build a world-class service unit, it can operate entrepreneurially: its customers can live inside or outside of the Firm. (I've worked in the past with one interesting company which has exactly this viewpoint). Many industries have already seen the widespread emergence of a "provider interface" in human resources, in the supply chain, and so on. Now, I'm not arguing for decomposition of the company per se, just as I don't often argue that Groove would take over the world if it were to open-source its componentry. There are real-world interdependencies which often cut deep with good reason. Our QA team, for example, provides great service: file a bug report, and they track it through triage and resolution, providing callback notification if you wanted that. But the service viewpoint from one customer is different to the viewpoint offered other customers (GrooveQA Implements ITrackBugs, but also GrooveQA Implements IManageRegression, IRunVariedTestEnvironments, and much more). This is true both of software and organizations. The "re-composition" -- providing multiple interfaces, to give a coherent customer service -- is still not an easy design task. I'm also certainly not arguing for price-oriented contracting. Price is one of the least useful metrics imaginable; simple price competition creates problems in structural inequity and false accounting of externalised operational costs. It's vitally important that we find alternatives which are less likely to destroy the world and cause misery for millions of its inhabitants. Given the choice, I wouldn't call on a transport service which caused a huge memory leak; but industry seems happy to outsource services to minimise cost regardless of environmental or human concerns. I don't have any easy answers there. Software's so simple, sometimes. It's a useful thought-experiment, though: outsource your group. What services do you provide? Who are the customers? What internal process gains can you envisage if you clarify the current interfaces? What structural changes would be required, and what optimisations would it bring, if the collection of interfaces were different? Who else might require those services, and under what circumstances would it be appropriate to provide them? (The "GrooveConceptDevelopmentTeam.idl" is part of my agenda for next week). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
vcard
archives: January 2005 December 2004 November 2004 October 2004 September 2004 August 2004 July 2004 June 2004 May 2004 April 2004 March 2004 February 2004 January 2004 December 2003 November 2003 October 2003 September 2003 August 2003 July 2003 June 2003 May 2003 April 2003 March 2003 February 2003 January 2003 December 2002 November 2002 October 2002 September 2002 August 2002 July 2002 June 2002 May 2002 April 2002 March 2002 February 2002 January 2002 December 2001 November 2001 October 2001 September 2001 August 2001 July 2001 June 2001 see also: {groove: [ ray, matt, paresh, mike, jeff, john ], other: [ /* more blogroll to follow */ ] } The views expressed on this weblog are mine alone and do not necessarily reflect the views of my employer. RSS 2.0 RSS 1.0 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||