In Achieving success in large, complex software projects Sriram Chandrasekaran, Sauri Gudlavalleti and Sanjay Kaniyar of McKinsey (1) advocate moving from a functional delivery model that is silo based to one that is based on cross-functional teams that are module orientated. There are two problems with this model that I would like to raise.
The first is that the article describes large project as complex in nature without understanding that in a complex system behaviour is emergent. There is a short introduction to complex system in the recently published Cynefin paper on InfoQ (2). One of the key points is that no amount of analysis or planning will lead to understand of how a complex system will develop. They are dispositional in nature and therefore have a tendency to evolve in certain directions but this is not given and cannot be assumed. In this type of system the only viable delivery strategy is one that iterative/incremental in nature which allows you to manage for development of the systems in a desired direction. Trying to base the delivery based on a set of point in time requirements is unrealistic and fundamentally flawed, which the agile community has known for years. Simply moving to a cross functional model will not address this fundamental issue with traditional delivery models. As an aside Brian Appleyard (3) notes, in his most recent book, that simple solutions don’t work for complex problems.
The paper goes on talk about grouping of the work based on use case to support these cross functional teams so that can operate in parallel. This assumes that work can be grouped by use case but it does not elaborate on how, this in itself will support parallel working. One of the key things that you need to ensure is that the use cases are disjoint and one way that you can ensure this is by relating them to capabilities (4), along the lines of domain driven design (5). This allows for partitioning of the problem space and for parallel stream of work to be undertaken. This allows you to manage the parallelism which is mentioned as an issue with agile practices. It is not really an agile issue but one that is generic in nature of large programmes.
- Achieving success in large, complex, software, July 2014
- Cynefin 101 – An Introduction, July 2014
- The Brain is Wider Than the Sky: Why Simple Solutions Don’t Work in a Complex World, Bryan Appleyard, Sep 2012
- The Next Revolution in Productivity, Ric Merrifield, Jack Calhoun, and Dennis Stevens, Harvard Business Review, June 2008
- Domain-driven Design: Tackling Complexity in the Heart of Software, Eric Evans, Aug 2003