The "What" of Patterns and SCM
Patterns differ from other forms of describing best practices in that patterns make the relationship between practices explicit. Patterns build upon each other, and when they form a coherent unit, they form a Pattern Language, which is a guide to building something. Often you are faced with a problem for which a best practice sounds like a solution. You are then faced with questions like:
- How do I put this practice in place?
- What are the organizational and process prerequisites for this practice to work?
- What are the implementation considerations specific to my organizations tools and SCM environment?
A pattern contains the following basic parts:
- A name, which describes what the pattern helps you build. The name also forms the basic for a common vocabulary. You can talk about a task branch in an unambiguous way if you all agree that task branch is what the pattern task branch describes. Tools often have their own vocabulary and you may need to translate between the terminology that your organization and tool uses.
- A context, which describes when it makes sense to build the thing that the pattern describes. Rather than say, "Build a task branch" we need to know if the environment is one where a teak branch will be helpful and useful. In the SCM pattern language, the task branch makes sense in the context of XXX. In a perfect world, we could express the context in terms of other patterns. In some cases no one has written the pattern and we settle for a prose description of your situation.
- A description of the problem, both a summary and a detailed description explaining the tradeoffs that you need to consider when solving this problem.
- A solution, that shows how to use the patterns described to solve your problem, and how the pattern solves your problem. Typically you will see a short solution and as well as a longer description with implementation details.
Keep in mind throughout this discussion that a prerequisite for a pattern is that it describes a proven good practice (within the context). The form does not make it a pattern.
A pattern collection or pattern language is a guide to helping you to build a certain kind of thing. Various pattern languages may share some elements, but a pattern language for an agile SCM environment will be different than one for a more controlled environment, and trying to steer an organization in an inappropriate direction will cause problems.
The Pattern Language in the book Software Configuration Management Patterns is about building a software CM environment where your want to respond rapidly (agilely) to change. Fortunately, this is a common requirement at the heart of many processes, and the SCM Pattern language addresses how to separate the parts of your codebase that need to change rapidly, from those that need to be stable.
Who Can Introduce Patterns
Process improvement is often thought of as being the stuff of initiatives and working groups but most organizations should be trying to improve in small ways every day. Understanding what patterns should be in an environment is part of that process.