Juju makes deploying cloud services spectacularly easy. One of the key components of the Juju ecosystem that makes this possible is the wealth of quality, reliable charms enabling users to quickly and reliably deploy all sorts of software, from simple web-based forums to a complete OpenStack install.
There are however times when the particular service you want to use doesn't have a charm available - maybe it is your own project? Or perhaps the existing charm for a service doesn't work in precisely the way you want. Whatever your reasons for writing a charm, this section of the documentation will guide you through the process.
You might want to start by looking at what makes a charm, which breaks down and explains the different components that go into making a charm. Or you may want to dive right in with the walkthrough for writing an example charm.
Because charms are language agnostic, there are many paths to writing a charm. Charm Helpers is a good place to start if you are already familiar with Python.