Slide 1

Slide 1 text

Elixir
 Dev to Prod Challenges starting from Zero @nirev Guilherme Nogueira

Slide 2

Slide 2 text

nirev? whois

Slide 3

Slide 3 text

nirev? whois

Slide 4

Slide 4 text

nirev? whois

Slide 5

Slide 5 text

?

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Stack Elixir 1.3 + Phoenix ClojureScript + Reagent PostgreSQL ElasticSearch Cassandra Others: C#, Python, C, Bash, Jenkins (In Production)

Slide 8

Slide 8 text

What was the road like?

Slide 9

Slide 9 text

Easy steps 1.gather a team 2.code 3.????? 4.PROFIT

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Why Elixir?

Slide 12

Slide 12 text

Why Elixir? Functional Programming; so what?

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Why Elixir? Functional Programming; so what? • What does it have to do with Functional Programming? • FP is easier for concurrency: 
 mainly because immutability + guarantees

Slide 15

Slide 15 text

Why Elixir? Functional Programming; so what? • Actually, FP is a very old paradigm (even older than OOP): • 1960 → Lisp • 1973 → ML • 1980s → Lazy langs: Miranda, KRC, SASL, Orwell... • 1986 → Erlang • 1990 → Haskell 1.0

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Assembling a Team

Slide 18

Slide 18 text

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)

Slide 19

Slide 19 text

"Os alquimistas estão chegando" Jorge Ben

Slide 20

Slide 20 text

"Os alquimistas estão chegando" Jorge Ben George Guimarães

Slide 21

Slide 21 text

Starting to Code

Slide 22

Slide 22 text

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….

Slide 23

Slide 23 text

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 …..

Slide 24

Slide 24 text

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.

Slide 25

Slide 25 text

Going to Production

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

• 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)

Slide 30

Slide 30 text

• 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)

Slide 31

Slide 31 text

• # TODO: • Deployment with distributed Erlang nodes • Better understand how Elixir releases should be done Going to Production We got this (somewhat)

Slide 32

Slide 32 text

Feature Cycles AKA build stuff

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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 :)

Slide 35

Slide 35 text

Feature Cycles Building Stuff with Elixir You gotta get your hands dirty!

Slide 36

Slide 36 text

Feature Cycles Building Stuff with Elixir

Slide 37

Slide 37 text

Feature Cycles Building Stuff with Elixir

Slide 38

Slide 38 text

Feature Cycles Building Stuff with Elixir

Slide 39

Slide 39 text

Feature Cycles Building Stuff with Elixir

Slide 40

Slide 40 text

Feature Cycles Building Stuff with Elixir You gotta get your hands dirty!

Slide 41

Slide 41 text

Monitoring

Slide 42

Slide 42 text

Monitoring Everybody ships bugs • Suddenly, we were reminded that 
 writing software IS HARD • And when going too fast, 
 things are going to brake

Slide 43

Slide 43 text

Monitoring Everybody ships bugs

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

Monitoring Everybody ships bugs • But we monitor machine states and so what with SENSU, which is great!

Slide 46

Slide 46 text

The Good, The Bad
 and The Ugly Key takeaways

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

Takeways Was it worth? • But we did get a lot of things right, and the platform is
 AMAZING ~3k commits, 700 PRs

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

Thanks! https://xerpa.recruiterbox.com/ Estamos contratando! @nirev Guilherme Nogueira