Tea Garden Pattern Repository
For some time now, we at Gaiwan have been sharing stories of the challenges we face, documenting solutions, and building up a "stack" of libraries and tools that help us get our work done. We wanted to start organizing this information and present it to a larger community. We realized that many of these things started looking like Design Patterns. So in the tradition of the original WikiWikiWeb we decided to create a pattern repository that we could grow and evolve over time.
Thus Tea Garden was born. Eventually, it is our goal to grow a friendly and useful garden of knowledge, something you can come and enjoy if you have a spare moment to learn a new concept, or pluck a few useful morsels from the next time you are starting a new project.
We will publish a companion newsletter, Tea Leaves, whenever there is something of note to highlight. We will let you know when interesting new patterns appear, or alert you about existing patterns that have seen significant edits, together with commentary and insights, so you can find out what's on our mind, and why we're writing about certain patterns at a given time.
While this wiki is not publicly editable, we do very much want your feedback.
Currently the main channel for that is the #tea-garden
channel on Clojurians
Slack. We
welcome constructive feedback, suggested edits, new topics that you'd like to
see us cover, or just any random pattern-related chat.
A Pattern Language
The patterns in this wiki together form A Pattern Language, we recommend starting there to understand what we mean exactly when we say "Pattern" or "Pattern Language".
Patterns exist to resolve tensions, so any exploration of a pattern must start with an exploration of the tensions which are present. A good problem statement is always the hardest part, after that we can consider solutions. When it comes to documenting patterns, we try to separate three different aspects.
- The Pattern itself This is an abstract description of the tensions that the pattern seeks to resolve, and how it resolves them. We try to document the various concerns that we identify that might have an influence on this pattern.
- Ecosystem analysis A description of the various implementations out there that we are aware of, in particular in the Clojure space where we are most active, for patterns where this is relevant. We try to be reasonably objective, and use the foregoing description to help us consider how different approaches differ and can be compared and evaluated.
- Gaiwan Stack The solution we have settled on for our projects. We do not purport that this is always the best solution, but it's the solution we like, or that we are used to, and that has worked reasonably well for us.
Patterns
- UriAsData - Recommends managing URIs as structured data for reliability.
-
DevEnvironmentLauncher - Simplifies and standardizes development setup for consistency and efficiency.
- Ecosystem: DevEnvironmentLauncherEcosystem
- Gaiwan Stack: Launchpad