SLIDE 1 IN PRODUCTION
elm
FULL-SCALE
@rtfeldman
SLIDE 2
2014 2016 2015 2013
SLIDE 3
SLIDE 4
2 billion questions answered 100,000 lines of elm code 0 runtime exceptions
IN PRODUCTION
SLIDE 5
Ellie
SLIDE 6
VIEW FUNCTION ARGUMENTS → VIRTUAL DOM
SLIDE 7 the elm architecture
view update Model Msg VDOM
Elm Runtime
SLIDE 8
JavaScript React Elm DOM + globals components 1 immutable value APPLICATION STATE + stores
SLIDE 9
Object-Oriented vs Functional different paradigm to learn Elm has no components
SLIDE 10
Dynamic Types vs Type-Checked
cheaper refactoring → less technical debt “if it compiles, it usually just works” more time in the console, less in the browser
SLIDE 11
IMPACT ON VELOCITY
JS: Quicker to get something on the screen Elm: Higher overall velocity
SLIDE 12
Interoprerating with JavaScript
Elm code talks to JavaScript the way it talks to servers
JAVASCRIPT AS A SERVICE
SLIDE 13
MAINTAIN GUARANTEES JAVASCRIPT ECOSYSTEM while accessing the huge
SLIDE 14
npm
much bigger than elm-package ecosystem publish JavaScript, binaries, etc. may also install keyloggers
SLIDE 15
elm-package
installing packages can’t install keyloggers supports Elm code, not arbitrary JavaScript semantic versioning automatically enforced
SLIDE 16
elm-package
less available off-the-shelf, more DIY write a wrapper around moment.js write a Date library in pure Elm long-term ecosystem quality
SLIDE 17
Full-Scale Elm
Small-Scale Elm
begins with
SLIDE 18
SHIP SOMETHING SMALL
SLIDE 19
GET IT INTO
PRODUCTION
SLIDE 20
how will we...
INTEGRATE it into our code? TEACH it to our teammates? BUILD and deploy it?
SLIDE 21
MINIMAL RISK MAJOR REWARD
SLIDE 22
how will we BUILD it? Sprockets (Rails) Webpack loader elm-make
SLIDE 23
ADVANCED BUILDS?
SLIDE 24
Server-Side Elm Server-Side Rendering Code Splitting
What about...
SLIDE 25
“Why not use ______ instead?”
SLIDE 26
delight
SLIDE 27 “That should be an inspiration for every error message.” —John Carmack “That should be an inspiration for every error message.” —John Carmack
SLIDE 28
reliability
SLIDE 29 (optional types) (optional types) (optional types)
SLIDE 30
SLIDE 31
“just don’t use it” “also don’t use libraries that use it” any
SLIDE 32 any is considered part of best practices
SLIDE 33
LESS CRASHING THAN PLAIN JS ZERO RUNTIME EXCEPTIONS
Elm
SLIDE 34 OCaml
+ BuckleScript
Haskell
(or GHCjs)
Scala Clojure ClojureScript “Why not use a different FP language?”
SLIDE 36
anything can be null
ClojureScript
SLIDE 37 anything can run arbitrary JS code
ClojureScript
+ BuckleScript
SLIDE 38
how will we HIRE anyone?
SLIDE 39
11 developers hired in 2016
9 cited Elm as a reason for applying
hiring was much harder before we used Elm!
SLIDE 40
Hiring for React, Redux, Immutable.js, Babel Hiring for Angular 2, TypeScript, Ramda Want to come write Elm full-time?
WHICH JOB POSTS STAND OUT?
SLIDE 41
how will we TEACH it?
more new hires already know React than Elm compiler aids beginner learning a LOT similar time to becoming prod contributor
SLIDE 42
guide.elm-lang.org
RESOURCES
How to Use Elm at Work
elm-lang.org/blog
SLIDE 43
SLIDE 44 Kris Jenkins
jenkster.com created elm-remote-data
Luke Westby
humblespark.com created Ellie
TRAINING
Brian Hicks
aster.is created elm-benchmark
SLIDE 45
elmtown.github.io
Elm Town Podcast
SLIDE 46 beginner-friendly community
SLACK (5,000+ members, #beginners channel) elmlang.herokuapp.com REDDIT (weekly beginner questions thread) reddit.com/r/elm
SLIDE 47
Zürich Chicago Seattle Utrecht Denver Copenhagen Hamburg DC Helsinki London Paris San Francisco
SLIDE 48
SLIDE 49
SLIDE 50
HOW CAN OUR TEAM DO THIS?
SLIDE 51
Full-Scale Elm
Small-Scale Elm
begins with
SLIDE 52
SHIP SOMETHING SMALL
SLIDE 53
GET IT INTO
PRODUCTION
SLIDE 54
@rtfeldman