Slide 1

Slide 1 text

0-60 in under 3 how cars.com & dockyard manufactured a productive elixir team in under 3 months. daniel mackey + mike binns // elixirconf 2019

Slide 2

Slide 2 text

mike binns engineering software for 15+ years, elixir for 5. senior software engineer at dockyard. lead dockyard engineer on cars.com project asp |> php |> java |> javascript |> elixir. elixir libraries: ets, ironman github, slack, forum: @TheFirstAvenger. twitter: @1stAvenger.

Slide 3

Slide 3 text

daniel mackey making internet stuff for 15 years. actionscript |> ruby |> javascript |> elixir. engineering manager at cars.com. github, slack, forum: @heymackey. twitter: @danielmackey.

Slide 4

Slide 4 text

some context our thinking the prep ramping up now

Slide 5

Slide 5 text

some context our thinking the prep ramping up now

Slide 6

Slide 6 text

“business case for elixir” Brian Cardarella // Lonestar Elixir 2019

Slide 7

Slide 7 text

our goal.

Slide 8

Slide 8 text

some context our thinking the prep ramping up now

Slide 9

Slide 9 text

match car buyers with car sellers. been around a while. we know more now than we did before. car industry is changing. time to reimagine.

Slide 10

Slide 10 text

if we were starting today, what would we do?

Slide 11

Slide 11 text

if we were starting today, what would we do differently?

Slide 12

Slide 12 text

buy vs. build.

Slide 13

Slide 13 text

a distinct change. an immediate, obvious new direction.

Slide 14

Slide 14 text

a distinct change. from java(script) to elixir. from object-oriented to functional. from SOA & SPA to fullstack monolith. from DBAs to priv/repo/migrations/. from SREs to being on-the-hook.

Slide 15

Slide 15 text

a vision. a concrete, published, narration of reasoning.

Slide 16

Slide 16 text

a vision. background, decisions, rationale, principles & concepts. ours will be different than yours. a long-form position paper. release. read. react. rebut. explicit, not abstract.

Slide 17

Slide 17 text

a commitment. an investment we need to deliver on.

Slide 18

Slide 18 text

a commitment. investment has a payoff. budget and deadline, not a blank check. sets the goal, and the boundaries. forcing function to prioritize, build, and ship.

Slide 19

Slide 19 text

a plan. a system that allows for building and learning.

Slide 20

Slide 20 text

a plan. spent months planning before we started. architecture, resources, milestones, process. choose a process from Basecamp now called Shape Up.

Slide 21

Slide 21 text

shape up. small teams of 2-3* people. focus on one product feature build “some version”in 6 week cycles and ship it. cooldown period for 2 weeks. rotate, rinse, and repeat. * we adjusted this for reasons

Slide 22

Slide 22 text

a separate team. a focused, dedicated group, working independently.

Slide 23

Slide 23 text

a separate team. two teams of engineers. one team on building new, the other providing cover. allows full focus and attention. very difficult to accomplish without this.

Slide 24

Slide 24 text

some context our thinking the prep ramping up now

Slide 25

Slide 25 text

building up the team. start with empathy & psychological safety. understand the motivational drivers for your team. growth and learning, first. perfection, second. regular retrospectives and 1:1s.

Slide 26

Slide 26 text

growing out the team. worked in similar languages and backgrounds. seeking diversity of all kinds. search for growth mindset. think distributed.

Slide 27

Slide 27 text

learning elixir. tons of great content online. videos, books, talks, podcasts, tutorials. both at the group and individual level. build things to apply learning. breakable toys and exploration.

Slide 28

Slide 28 text

working with each other. formatter, credo, dialyzer on git_hooks eliminates bikeshedding. pairing = sharing = caring. vscode + liveshare + zoom is a powerful experience. enlightening talks.

Slide 29

Slide 29 text

getting involved attending local meetups. joining elixir forum and slack. jump into the conversation. talking to our network.

Slide 30

Slide 30 text

consulting with experts

Slide 31

Slide 31 text

some context our thinking the prep ramping up now

Slide 32

Slide 32 text

custom software digital product agency. elixir and ember. fully distributed company.

Slide 33

Slide 33 text

the ask. advising on architecture. how best to deploy elixir. elixir development. training cars on elixir.

Slide 34

Slide 34 text

dockyard response. four senior elixir developers on the cars team. architectural + deployment advising from Chris McCord and Paul Schoenfelder. on-site at cars for the first week to ramp up. preparing talks and training for the team. bonus: advise on working as a distributed team.

Slide 35

Slide 35 text

onsite agenda. spend a day learning the existing system. determine and prioritize requirements of new vision. formulate and present a proposed architecture.

Slide 36

Slide 36 text

onsite agenda. spend a day learning the existing system. determine and prioritize requirements of new vision. formulate and present a proposed architecture.

Slide 37

Slide 37 text

“if we build the old system in elixir, this project will be a failure.”

Slide 38

Slide 38 text

onsite myself, chris, and paul in chicago. made some of the larger architecture decisions. crashed chicago elixir meetup.

Slide 39

Slide 39 text

group of 20+ engineers. basically no elixir experience. up to speed with elixir.

Slide 40

Slide 40 text

mob coding!

Slide 41

Slide 41 text

benefits of mob coding. cars engineers see the process from the beginning and can ask questions. other dockyard engineers speak to possible alternatives or additional thoughts. entire team gets on the same page regarding suggested patterns.

Slide 42

Slide 42 text

preparing for mob coding. domain-relevant example, not just another to-do list tutorial. highlight specific features of elixir. not be a waste. do it live! rehearsed, but still live.

Slide 43

Slide 43 text

mob coding week. 7 total 2-hour sessions. everyone on zoom video chat. vscode live share. started intros/experience from everyone. built something.

Slide 44

Slide 44 text

topics covered. generators: mix new --umbrella, mix phx.new, mix phx.gen.html. syntax: pattern matching, assignment, immutability. phoenix: contexts, routing, forms. testing: exunit, mox, fixtures/factories.

Slide 45

Slide 45 text

broke up into 4 “cycle” teams of 4-5 engineers. 1 dockyarder per team. tackled foundational feature work. mob |> mini_mob |> pairs |> individuals. week after.

Slide 46

Slide 46 text

and beyond! 8 weeks in (end of cycle 1), … leading mob programming -> reviewing pull requests. 3 months in (middle of cycle 2), … back to primarily writing code.

Slide 47

Slide 47 text

some context our thinking the prep ramping up now

Slide 48

Slide 48 text

the numbers. team has grown 5x in 6 months. 1100+ pull requests with over 3000 commits. nearly 250,000 lines of elixir code to date.

Slide 49

Slide 49 text

the accomplishments. initial team rapidly brought new members up to speed. piloted features and requests for liveview. ingesting real data and being “live” already. doing formerly complex things more simply. on a given day, >50% of team is not in the office.

Slide 50

Slide 50 text

rough road ahead. mob/pair programming is exhausting. interviewing can require custom parts. first cycle was good, but second cycle got too heavy on the gas. shape up required some tuning for us. your mileage may vary.

Slide 51

Slide 51 text

so what now?

Slide 52

Slide 52 text

stay tuned!

Slide 53

Slide 53 text

mike binns github, slack, forum: @TheFirstAvenger. twitter: @1stAvenger. thanks! daniel mackey github, slack, forum: @heymackey. twitter: @danielmackey.

Slide 54

Slide 54 text

credits our families. fred lee, greg heidorn and the folks at cars.com. jason, alex, bj and the folks at dockyard. photos: anders jildén, ozark drones, kaluci, nicolai berntsen, element 5 digital, max böttinger, daniel von appen