Actually… 1. Why Elixir? 2. Assembling a team 3. Starting to Code 4. Going to production 5. Feature Cycles 6. Monitoring 7. The Good, The Bad, and The Ugly
Why Elixir? Functional Programming; so what? • CPUs are not getting faster for single-thread apps • Concurrency is the next major thing for development • NO MORE FREE LUNCH (2005): • Java5 • WindowsXP • RoR launching on December
Why Elixir? Functional Programming; so what? • What does it have to do with Functional Programming? • FP is easier for concurrency: mainly because immutability + guarantees
Why Elixir? Functional Programming; so what? • Elixir embraces distributed computation and concurrency • Builds upon battle-tested Erlang • Enhances it with Metaprogramming and a arguably easier syntax • Created by the great VALINHO
Assembling a Team or, How I learned Elixir • Few Elixir programmers around (what a surprise!) • But increasingly number of people interested in it and coming from all kinds of background • No “competition” • The first one is the hardest (lol)
Starting to Code Elixir first impressions • mix is awesome • plenty of editors: atom, vim, IntelliJ Emacs + Alchemist = <3 <3 <3 • Documentation is taken seriously • Quite easy to get acquainted to the language • OTP on the other hand….
Starting to Code Elixir first impressions • Elixir takes the best ideas from a lot of languages: • |> from F# • Protocols e Metaprog from Clojure • the whole OTP from Erlang • Umbrella Apps from .NET • Ecto query DSL from LINQ • Doctest from Python …..
Starting to Code Elixir first impressions • Everything is immutable. • There is a compiler • Elixir is pragmatic • Performance is great. GC is per-process • Documentation & tooling are take seriously • Macros • The runtime & OTP are AWESOME. Every process is preempted. No bad neighbors.
Going to Production We got this (somewhat) • Quick first way: Heroku + Elixir build pack • works great • just one server though and we only used PostgreSQL at the time
Going to Production We got this (somewhat) • Delivery Pipeline: • SemaphoreCI embraced Elixir quite early works great, very easy to configure • But we just love Jenkins • Did not test any other
Going to Production We got this (somewhat) • Delivery Pipeline: • SemaphoreCI embraced Elixir quite early works great, very easy to configure • But we just love Jenkins • Did not test any other
• Deployment, part 2: • PITA to use GraphicsMagick in Heroku (we have a buildpack for it on github) • Needed: • ElasticSearch • More control Going to Production We got this (somewhat)
• Deployment, current: AWS • everything managed by Terraform + Ansible • Phoenix app compiled and packaged in .deb • deb is a no-brainer for us • no hot-deploy Going to Production We got this (somewhat)
Feature Cycles Building Stuff with Elixir • Core libs (Ecto, Phoenix, Plug) are incredibly reliable! • releases are hard and not 12factor • hot code reloads are not that simple • The Ecosystem is really young
Feature Cycles Building Stuff with Elixir • The Ecosystem is really young • no usable ElasticSearch client • (at the time) no json-api library • (at the time) no good auth libs • nothing to handle images github.com/Xerpa/exmagick :)
Monitoring Everybody ships bugs • Plug n Play solutions are not that common: Honeybadger officially supports it AppSignal in alpha testing • the BEAM is highly instrumentable • Great talk about it by Milhouse @ ElixirConf2016 https://confreaks.tv/events/elixirconf2016
Takeways Was it worth? • Starting with a new, evolving language is hard • We had to figure out a lot of stuff ourselves • And we got it wrong a few times: • Trying to Haskellize Enums to use with Ecto • No good cassandra client (lacks a lot of features) • Not using Ecto.Type correctly from the start • Dates
Takeways Was it worth? • Elixir is very promissing, and growing FAST • The community learns a lot from other languages • The community is helpful, open, inclusive and active • You have to be willing to deal with not-ready things and contribute yourself to the ecosystem • But even so, it’s highly recommended