As Ward Cunningham taught me, the value of patterns is simply having a shared language for sharing strategies. I would add though, that “visual” is key … visual languages change the game.
I’m very much a fan of pragmatic patterns. Here are some of my lessons learned for making patterns more useful. I recommend keeping patterns super simple and contextualized. Here’s what I’ve learned …
- Application Patterns – higher-level and end to end. See Azure App Patterns and App Pattern – Four Tier (Table Module)
- App Scenarios and Solutions – to show concrete examples. See WCF Intranet Sample.
- Deployment Patterns – to show end to end layout of the physical + logical layers (runtime patterns). See Physical Tiers and Deployment and Deployment Patterns.
- Pattlets – for all the good little nuggets of insight – simple problem/solution pairs. See Pattlets.
- Pattern Language – Create a pattern language by creating a constellation of key patterns for a given domain. To keep it simple, just think of your pattern language as a simple map that shows how the patterns connect.
I also recommend …
- Don’t mix the pattern with the implementation — Keep patterns factored from implementation. This helps keep the patterns simple and elegant to express (a good pattern shares a principle or strategy.)
- Connect to Code Samples and How Tos. Rather than bake implementation into the pattern, keep the pattern lean and connect the pattern to code samples and “How Tos” to make them real and to keep the pattern durable, while the implementation changes or varies for the context (one pattern to many code samples, how tos.) See examples of How Tos and App Scenarios. Think in terms of a constellation, both in connecting to other content as well as to other patterns.
- Create a language for the space. Focus on creating a language by framing and naming the space using patterns. Here is an example with A Language for Architecture.
Pattern Languages as Maps of the Space
Below is an example of Enterprise Solution Pattern using a map to express it as a pattern language in a brutally simple way…
Patterns when done well are actually the short-cut to sharing expertise for a given domain.