Upgrade to Pro — share decks privately, control downloads, hide ads and more …

0-60 in under 3

0-60 in under 3

0 - 60 in under 3: How Cars.com and DockYard Manufactured A Productive Elixir Team In Under 3 Months.

A talk I gave with Mike Binns from DockYard at ElixirConf 2019.

Video: https://www.youtube.com/watch?v=zKifFG4i-bY

Abstract:
Companies are beginning to understand the benefits of Elixir's speed and performance in their web development projects. But they still see a lack of Elixir developers as a hurdle to switching technologies. When Cars.com decided to replace its 20-year-old tech stack with Elixir, they faced that very hurdle. Instead of maintaining the status quo, Cars.com decided to build its own Elixir team and embarked on a project to streamline 250+ microservices into one efficient app.

In this talk, Cars.com Engineering Manager Daniel Mackey will discuss the Cars.com decision-making that led their team to Elixir and to seek outside expertise from DockYard and others. DockYard Lead Project Engineer Mike Binns will then discuss the process of coaching a team of 20+ developers, with backgrounds in languages ranging from Java to Ruby to Javascript, into productive Elixir developers in under three months.

Daniel Mackey

August 29, 2019
Tweet

More Decks by Daniel Mackey

Other Decks in Programming

Transcript

  1. 0-60 in under 3 how cars.com & dockyard manufactured a

    productive elixir team in under 3 months. daniel mackey + mike binns // elixirconf 2019
  2. 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.
  3. daniel mackey making internet stuff for 15 years. actionscript |>

    ruby |> javascript |> elixir. engineering manager at cars.com. github, slack, forum: @heymackey. twitter: @danielmackey.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. a plan. spent months planning before we started. architecture, resources,

    milestones, process. choose a process from Basecamp now called Shape Up.
  9. 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
  10. 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.
  11. 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.
  12. growing out the team. worked in similar languages and backgrounds.

    seeking diversity of all kinds. search for growth mindset. think distributed.
  13. 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.
  14. working with each other. formatter, credo, dialyzer on git_hooks eliminates

    bikeshedding. pairing = sharing = caring. vscode + liveshare + zoom is a powerful experience. enlightening talks.
  15. getting involved attending local meetups. joining elixir forum and slack.

    jump into the conversation. talking to our network.
  16. the ask. advising on architecture. how best to deploy elixir.

    elixir development. training cars on elixir.
  17. 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.
  18. onsite agenda. spend a day learning the existing system. determine

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

    and prioritize requirements of new vision. formulate and present a proposed architecture.
  20. onsite myself, chris, and paul in chicago. made some of

    the larger architecture decisions. crashed chicago elixir meetup.
  21. 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.
  22. 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.
  23. mob coding week. 7 total 2-hour sessions. everyone on zoom

    video chat. vscode live share. started intros/experience from everyone. built something.
  24. 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.
  25. 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.
  26. 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.
  27. 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.
  28. 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.
  29. 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.
  30. mike binns github, slack, forum: @TheFirstAvenger. twitter: @1stAvenger. thanks! daniel

    mackey github, slack, forum: @heymackey. twitter: @danielmackey.
  31. 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