Patterns have provided a means of capturing recurring themes in software development and have been successful utilized to describe a number of software configuration management (SCM) practices [1, 2]. This article explores a higher-order pattern in concurrent development - more subtle and potentially powerful because of its applicability at a number of different levels of granularity.
Many patterns sometimes suggest that the word pattern is just another word for older concepts like work practices or even procedures. Just try substituting the word "activity" in place of pattern and see if the idea still makes sense. That is not to say, however, that patterns have not made a significant contribution to the way we consider and distil our collective experience. The value of patterns is that they are less judgmental than the terminology of the past - their authors more modest. While patterns do, by their very definition, assume general applicability, they are not designed to be prescriptive. Rather, they are more exploratory in nature, suggesting rather than imposing the adoption or instantiation of these patterns in the workplace.
What is most intriguing about patterns however, and what drives some of us to investigate them, is the "discovery" of hidden patterns that are less than obvious and somehow imbued with a deeper significance. An analogy from art and architecture (which first utilized patterns in their search for esthetics rules) would be the recurrence of the Golden Rectangle - said to be one of the most visually satisfying of all geometric forms. It has been identified in a number of great works and its dimensions have the property that when a square is removed a smaller rectangle of the same shape remains. Although the motivation for, and utilization of Golden Rectangle is much debated , the ancients considered it to be of the most pleasing and harmonious qualities that it became known as the divine proportion.
In the software context, what differentiates the analogously subtle and hidden patterns is that, while they might recur like their more mundane counterparts, they possess a symmetry and can be identified at a number of different levels. While they may not have the sense of the sublime that the Golden Rectangle suggests to some, such patterns do hint at deeper significance and offer us a hint of some greater insight - an underlying principle that is yet to be uncovered or completely understood.
My studies of more general configuration management (CM) applied at different levels of granularity have uncovered one such hidden pattern in concurrent development. In particular, I have been investigating (which could be considered the search for patterns anyway) the correspondence between the "classical" systems-level CM of the early standards and SCM, as defined by the tools and practices software teams use everyday to support the development process. What I have found curious is that concurrent development can be considered a pattern that is equally applicable at the code-level as it is at the coarse-grained, architectural level of system components. Naturally we use a completely different language to describe these things but that is what makes it appear hidden. The intellectual challenge is to consider what underlying property or properties give rise to the pattern, and to compare and contrast the solutions that we apply to these seemingly different situations.
At the code-level we talk about parallel development, where two or more developers are assigned tasks that require them to modify a common file. In some organizations, version control tools are configured to prevent this situation and once a file has been checked-out other developers are blocked from modifying that file until such time as it is checked-in by the original developer. Where parallel development is allowed however, developers can make changes concurrently and check-in their separate versions, creating a branch in the file's version tree that may require the merging of the two versions at some later point.
At the architectural component or sub-system level we no longer talk