The Link to Agile

To fully understand design patterns, it’s useful to trace how they evolved through the different domains of their existence and how each domain affected and was affected by design patterns. However, you’re not here for a history lesson. You’re a software developer who wants to know the relevant details with some fundamentals to back up the claims. This is why we will take a shortcut to the point where the most striking similarities between the two design patterns movements—in physical architecture and software development—seem to have materialised.

Agile, as it is understood these days, is a non-process where software is developed and deployed according to the Agile Manifesto 1[AM01]. The core values can be stated as follows: preferring to take responsibility; delivering useful things directly to the end user; and actively seeking out and adjusting the processes based on new information. These ideals of product design and delivery are evident to us now. However, they were also obvious a couple of hundred years ago—so something clearly went wrong along the way.

At the same time as the design patterns movement in software, other changes were brewing. The concepts at the core of Scrum can be traced back through published works on the Portland Pattern Repository or found in Pattern Languages of Program Design[PLoPD95] (from now on referred to as PLoPD) under the heading ‘Episodes’. Yet they go back even further than that. Most of the salient features of Scrum’s developer empowerment appear in Episodes, and many of the features of the Agile Manifesto can be traced back to elements that were present in those and even earlier works.

It’s not that the Agile principles came from design patterns, nor did design patterns come from Agile, but they both appear to stem from the mood of the times. Both emerged from similar feelings that there had to be a better way to develop software. A backlash formed from the notion that we could increase quality by moving decision-making closer to the place where the effect of those actions could be observed.

Christopher Alexander had shown the value of looking to the recipient and user of the product as a guiding force for decision-making; in some cases, even a worker on the building site would be deeply involved. Agile development is an attempt to bring the customer closer, even going as far as to suggest including them in live tests during development. Alexander’s work on the processes of using patterns to help guide production mirrored many aspects of the worker empowerment found in Episodes and Scrum.

The Agile Manifesto, extreme programming2, design patterns, Scrum3, and even to some extent, the notion of User Experience4, all appear to originate from the same period where people were bouncing related ideas around and communicating with fresh and wide-open eyes at a time of client-centred thought. Although these ideas did not come directly from Christopher Alexander, and many had their origins before this time5, there was nevertheless a sharp change in their uptake around this period. This was the 1990s. Back then, adults were witnessing the growth of computing across the world and the rise of the internet. It was the early days of success in technology outside of office usage. These were the days of Nintendo and Sony vying for the top spot in videogames consoles and, at times, innovation was valued over consistency. It could simply be that the information was more readily available. Personally, I think it’s an interesting connection, even if it’s just a coincidence.

1

The manifesto can be found at https://agilemanifesto.org/ and the principles can be found adjacent at https://agilemanifesto.org/principles.html There are a lot of resources available describing Agile, with many mistaking Scrum or SAFe or some other methodology for Agile itself.

2

Kent Beck developed the approach during his time on the Chrysler Comprehensive Compensation System project. Some accounts put the timeline around 1996, but the book Extreme Programming Explained[EPE00] was released in 2000, later updated in 2005[KB05]

3

Ken Schwaber and Jeff Sutherland introduced the main thrust of the methodology at an OOPSLA conference in 1995, but had been using it and refining it for many years before.

4

Usability Engineering[Use93] by Jakob Nielsen brought us many techniques to analyse UX, but it was not generally recognised until much later when Donald Norman popularised it under the name “user experience” as part of his role at Apple.

5

For example, the usage of the term scrum and some of its constituent activities dates back to a 1986 article titled The New New Product Development Game by the authors of the The Knowledge Creating Company[TKCC95].