About the Book
I’ve been using Elixir for projects since sometime around 2012-2013, and the one thing that I always wanted was the programming equivalent of a field manual - a handbook intended for use while practicing your craft; concise, visual, and practical. I wanted it oriented around examples which were non-trivial, which would enable you to understand the tools at your disposal in a context closer to reality. This book is my take on what that looks like.
The Alchemist’s Guide to OTP is intended for Elixir programmers who are already somewhat comfortable with the language, and have a basic grasp of OTP concepts (i.e. applications, supervisors, etc.); this provides us room for looking at these concepts in detail, going all the way down to how they work internally. The book also covers a number of topics which are tangential to OTP, but which are an important element in the structure and design of efficient Elixir systems.
The book uses an application, Autofactory, to keep the topics grounded in a real project. The full source code of this application is included with the book, and is intended to be extended and experimented with for putting the patterns and ideas in this book to practice. Autofactory is a simulated manufacturing facility, which receives orders via API, and simulates the entire manufacturing process in detail. This provides us a practical foundation for discussing concepts like flow control, load shedding, circuit breakers and more, with just enough complexity to illustrate the issues and their solutions.
Some of the topics covered:
- Designing applications by examining the problem domain and how it breaks down into concepts which map well to Elixir architectural patterns
- How to determine application boundaries
- How to design modular applications by building against protocols/behaviours, abstracting implementations from interfaces, and injecting implementations via configuration rather than directly calling them
- Investigating OTP primitives in detail (applications, supervisors, special processes, etc.), including common pitfalls and how to avoid them
- Effective use of finite state machines (via GenStateMachine)
- Effective use of macros for reducing boilerplate without going "macro crazy"
- Flow control, load shedding, circuit breakers
- A variety of architectural patterns both large and small ("process as message", error kernels, stacking theory, etc.)
- Everything about releases: configuration, migrations, hot upgrades, appups
- Operations: troubleshooting in production, tracing and debugging tools, metrics, alarms
- Writing efficient Elixir programs
About the Author
I'm a software engineer passionate about open source. I'm heavily involved in the Elixir/Erlang community, have contributed to both languages and am the author and maintainer of Distillery, as well as a number of other libraries.