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. It is our goal to grow a friendly and useful garden of knowledge, something you can come browse and learn from. We also want to create a home on the web for these patterns, a place to point to to quickly get others up to speed about what you are talking about.

We publish a companion newsletter, Tea Leaves. In it we 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.

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. Finding good solutions starts with a good problem statement. When it comes to documenting patterns, we try to separate three different aspects.

  1. 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.
  2. 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.
  3. 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