ElixirConf 2018 is coming up fast, and they’ve announced the schedule, so I thought I’d put together a list of the talks I want to attend and why.
I have two goals for this conference:
- Find out what kinds of projects people are building in Elixir
- Learn what (if anything) makes Elixir uniquely good for those projects
My sense of the Elixir community is that we often use Elixir to build monolithic stateless apps backed by a single database.1 Except in the (rare?) case that we need in-memory state, we don’t use GenServers, distributed Elixir, or OTP releases.
There’s a good reason for that! As soon as you start using these features and run more than a single node, you have to worry about the CAP theorem, raft protocols, complicated deployments, and more. Using OTP on multiple nodes is like building your own distributed database! Rather than manage all that complexity, most Elixir programmers use a database that handles distributed state for them.
This is absolutely the correct choice for many teams and many apps. But what does this mean for Elixir? Without OTP, Elixir is really just a faster, more concurrent Ruby. In the world of fast, concurrent mainstream languages, cloud microservices and Kubernetes, is a better Ruby good enough?2
With that question in mind, here are my talk picks for ElixirConf 2018.
Thursday, September 6
10:15-10:55 - Elixir at a Walking Pace - Lance Halvorsen
Lance will talk about how well Elixir worked for a situation where data consistency was the most important thing. (Not fault tolerance or speed) It sounds like they had a lot of in-memory state to manage.
11:00-11:40 - UX Design Practices for Real Time Apps - Bailey Miller
This looks like it should contain some generally useful tips. The other two talks in this time slot looked less interesting to me.
13:00-13:40 - Building an SLA Monitoring Tool Using Elixir/OTP - Aish Dahal
This is a close one. “Growing Applications and Taming Complexity” by Aaron Renner is also competing for this slot, and also looks excellent. I’m very interested to see what Pagerduty built in Elixir and why, however.
13:45-14:25 - We’re Just Getting Started - Our Three Years with Elixir - Maciej Kaszubowski
This is a long experience with Elixir and could offer a lot of insight into what has gone well and poorly over that time.
15:00-15:40 - Did You Hear That Wind? - Frank Kumro
This is a talk about Elixir on hardware. (Internet of Things) This is an unexplored area for me, where Elixir could definitely make some gains. Hardware has in-memory state by definition, and often needs fault tolerance for that in-memory state.
15:45-16:25 - Interfacing with Machine-Learned Models - Matthew Gardner
Machine learning is an interesting area and it would be nice to know how to integrate with it using Elixir. Another talk in this time slot also looks like it could be good: “Building Realtime Video Chat in Phoenix.” If you attend that one, tell me if the speaker ran multiple nodes or a single node for their video chat app. (Multiple nodes is much harder and more interesting)
Friday, September 7
10:35-11:15 - Event Sourcing - James Smith
Event sourcing or CQRS comes up a lot when writing microservices. I’m curious how it worked for an Elixir app, and how they deal with privacy regulations like GDPR.
11:20-12:00 - Behaviour Trees and Battleship - Jeff Schomay
Looks like a good computer-science talk. There’s a close second also competing for this time slot: “Breaking Down the User Monolith”. However, it looks to me like that talk will still use a single database for all the user data, so the user monolith may remain.
13:30-14:10 - Going Multi-Node - Eric Oestrich
Does Elixir live up to the hype once your system becomes distributed on multiple nodes? Or do you still have the same problems everyone else has?3
14:15-14:55 - Using Elixir GenStage to Track Video Watch Progress - Emerson Macedo
I’m interested in a real-world use case for GenStage. Most people seem to be using Kinesis or other similar things for data pipelines.
15:30-16:10 - Using Elixir and OTP Behaviors to Monitor Infrastructure - Jeffrey Gillis
Another interesting use case. I want to know how well this works.
16:15-16:55 - Building a Stateful Web Application with Elixir - Enio Lopes
The blurb on this talk addresses exactly the concerns I’m raising about Elixir. Elixir’s biggest selling point is for building stateful apps, but how often do you need to do that, and how much does Elixir really help once you make the app distributed?
- An app with a single database is a monolith. Even if your app is an umbrella app with bounded contexts, if there’s only one database, everything is still coupled at the DB level. Over time, this coupling will undermine your attempts to keep your contexts pure. If your app is complex enough to need a lot of contexts, you shouldn’t use a single database. [return]
- Consider that Node.js or Go are fast and concurrent enough for most stateless apps and are much more popular than Elixir. This means they’re easier to hire for, and have a lot of inertia. Also consider that to get real benefits out of OTP, you need a mostly-Elixir deployment environment, otherwise you’ll use HTTP/JSON to communicate between services anyway. It’s unrealistic for most organizations to rewrite their entire production stack in Elixir just so they can use OTP. [return]
- Except you’ll be using hand-rolled solutions, whereas everyone else will have access to tools maintained by the big tech companies. [return]