Posts in this series

I’ve been writing software for a long time, albeit professionally only for about 10 years now.

Starting off with .NET (C#), I then had a period of fire-fighting at different projects in Perl and PHP and more C# until discovering Ruby.

Ruby is great. Ruby is super expressive and friendly. I still love it, but as a language it holds few secrets from me these days. That’s a nice position to be in, for sure, but I crave new challenges and also, over time, the kind of projects I’ve worked on moved up from relatively simple CMS-y fare to complex systems with intricate business rules and hefty processing requirements.

That’s where Elixir comes in.

Elixir was created by a Ruby core team developer, José Valim, in 2011. His main goal was to increase productivity of the Erlang VM by creating a language that compiles down to Erlang byte-code but is more… approachable.

Because of its roots in the Erlang VM (or BEAM) Elixir has interesting features like the Actor model, Python-like docstrings, and pattern-matching. There are a ton of interesting Elixir blog posts online, so in this upcoming series of articles I’ll focus on Event Sourcing with Elixir which unfortunately is less represented online. Most “meaty” blog posts about Event Sourcing are usually in the context of C# or Java, languages quite popular in the “enterprise” world of complex business domains and lengthy compliance adherence requirements.

So why Event Sourcing? I’ve been quite obsessed about events for a while now, and for me they feel like a game changer (I’m not alone). The concept of having database state be a function of successive events has a ton of potential, and it seems to be taking off in the industry at large.

Inevitably with Event Sourcing, some concepts from CQRS and Domain-Driven Design will be introduced - I will strive to keep these very practical and refer you to more reading if you’re inclined to know more, but you won’t need to know them to get something out of the blog posts, hopefully.

I’ll be using the excellent commanded library for the article series, which will center around building a very simple API for a bank.

So stay tuned for the next post, which will cover the basics of the library we’ll be using, and the initial installation steps.

Cover image credit: PIXNIO