107

ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM
Page 2: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

functional

Page 3: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

functional

ErlangVM

Page 4: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

functional

ErlangVM

Parallelism

Page 5: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Who wants to go and build a system in Elixir?

Page 6: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM
Page 7: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM
Page 8: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM
Page 9: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM
Page 10: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

You shouldn’t

Page 11: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Elixir, Your Monolith and You

Tobias Pfeiffer@PragTob

pragtob.info

Page 12: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Your Monolith and You

Page 13: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM
Page 14: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Your Monolith now?

Page 15: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Your Monolith?

Page 16: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Tear it all down and rewrite it

Page 17: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM
Page 18: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Sooooon!

Page 19: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

“We rewrote it all in Language x, now it’s 10 times faster and only

50% of the code!”Someone

Page 20: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

“Language x, is 10 times faster and requires 50% of the code of language Y!”

Someone

Often implies...

Page 21: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

What nobody tells you...

Page 22: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Business Value?

Page 23: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Sooooon!

Page 24: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Replace it step by step

Page 25: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

We have a bedroom,for the bathroom please

check out legacy!

Page 26: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Terraform allows you to incrementally transform an

older API into one powered by Phoenix - one endpoint at a

time.

poteto/terraform

Page 27: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Terraform allows you to incrementally transform an

older API into one powered by Phoenix - one endpoint at a

time.

poteto/terraformNot the Infrastructure

As Code

Page 28: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defmodule MyApp.Terraformers.Foo do alias MyApp.Clients.Foo use Plug.Router

plug :match plug :dispatch

get "/v1/hello-world", do: send_resp(conn, 200, "Hi")

get _ do res = Foo.get!(conn) send_response({:ok, conn, res}) endend

poteto/terraform

Page 29: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Replace a critical component

Page 30: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Damn our heater alwaysbreaks down when it’s cold!

Page 31: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Check out our sweet newheating system!

Page 32: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Write a new component

Page 33: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Check it out we built abrand new high tech

entertainment facility!

Page 34: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Write a new component

Obvious in microservices

Page 35: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

“Is the technology I’m choosing the right fit for the problem I’m trying to

solve?”Everyone, hopefully

Page 36: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Reasonably separate and limited problem

Page 37: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Requirement that poses a problem for the current

stack

Page 38: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Spark of Enthusiasm

Page 39: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Courier Tracking

Page 40: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Courier Tracking

Page 41: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Courier Tracking

Page 42: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Courier Tracking

Websockets

Page 43: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Courier Tracking

Websockets

Basic Knowledge

Page 44: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

How to make them talk?

Page 45: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Monolith

FrontendCourier

DB

Page 46: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithTracking

FrontendCourier

DB DB

Page 47: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Connect them?

Page 48: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithTracking

FrontendCourier

DB DB

Page 49: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

JSONWebToken

Page 50: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

HeaderPayloadSignature

Page 51: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

{ "role": "admin", "courier_ids": [1337, 55], "id": 42, "exp": 1520469475}

Page 52: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithTracking

FrontendCourier

DB DBShared Secret

Page 53: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithTracking

FrontendCourier

DB DB

JWT

JWT

Shared Secret

Page 54: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithTracking

FrontendCourier

DB DB

JWT JWT

JWT

Shared Secret

JWT

Page 55: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

def connect(%{"token" => token}, socket) do token |> JWT.verify_token |> respond_based_on_token_contents(socket)end

Socket

Page 56: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

def connect(%{"token" => token}, socket) do token |> JWT.verify_token |> respond_based_on_token_contents(socket)end

Pattern Match

Page 57: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

def connect(%{"token" => token}, socket) do token |> JWT.verify_token |> respond_based_on_token_contents(socket)end

Pipe

Page 58: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defp login_user(%{"role" => role, ...}, socket) do {:ok, assign(socket, :user, %{role: role, ...})}end

Socket

Page 59: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

def join("courier:" <> courier_id, _, %{assigns: %{user: user}}) do if authorized?(courier_id, user) do # login else # unauthorizd endend

Channel

Page 60: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defp authorized?("", _), do: falsedefp authorized?(courier_id, %{courier_ids: ids}) do Enum.member?(ids, String.to_integer(courier_id))enddefp authorized?(_, _), do: false

Channel

Page 61: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defp authorized?("", _), do: falsedefp authorized?(courier_id, %{courier_ids: ids}) do Enum.member?(ids, String.to_integer(courier_id))enddefp authorized?(_, _), do: false

Channel

Page 62: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defp authorized?("", _), do: falsedefp authorized?(courier_id, %{courier_ids: ids}) do Enum.member?(ids, String.to_integer(courier_id))enddefp authorized?(_, _), do: false

Channel

Page 63: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defp authorized?("", _), do: falsedefp authorized?(courier_id, %{courier_ids: ids}) do Enum.member?(ids, String.to_integer(courier_id))enddefp authorized?(_, _), do: false

Channel

Page 64: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defp authorized?("", _), do: falsedefp authorized?(courier_id, %{courier_ids: ids}) do Enum.member?(ids, String.to_integer(courier_id))enddefp authorized?(_, _), do: false

Channel

Page 65: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithTracking

FrontendCourier

DB DB

LocationsLocations

Most of the time

Page 66: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithTracking

FrontendCourier

DB DB

LocationsLocations

Websocket

Page 67: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithTracking

FrontendCourier

DB DB

LocationsLocations

HTTP REST

Page 68: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Fulfillment

Page 69: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Fulfillment

CRUD

Page 70: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Fulfillment

CRUD

Experience

Page 71: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithFulfillment

DB DB

Page 72: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithFulfillment

DB DB

Own UI

Page 73: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithFulfillment

DB DB

OAuth

OAuth

Page 74: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithFulfillment

DB DB

/current_user

Who?

Page 75: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithFulfillment

DB DB

Products

Page 76: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithFulfillment

DB DB

Order

Valid?Order

Page 77: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithFulfillment

DB DB

Packaging

Create

Page 78: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

MonolithFulfillment

DB DB

HTTP REST

Create

Page 79: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Railway Oriented Programming

Page 80: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defmodule Fulfillment.OrderCreation do def create(params, customer, auth) do with {:ok, order} <- validate_order(params, customer), {:ok, order} <- validate_in_backend(order, auth), {:ok, order} <- Repo.insert(order) do {:ok, order} else {:error, changeset} -> {:error, changeset} end endend

Page 81: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defmodule Fulfillment.OrderCreation do def create(params, customer, auth) do with {:ok, order} <- validate_order(params, customer), {:ok, order} <- validate_in_backend(order, auth), {:ok, order} <- Repo.insert(order) do {:ok, order} else {:error, changeset} -> {:error, changeset} end endend

“Success” Rail

Page 82: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defmodule Fulfillment.OrderCreation do def create(params, customer, auth) do with {:ok, order} <- validate_order(params, customer), {:ok, order} <- validate_in_backend(order, auth), {:ok, order} <- Repo.insert(order) do {:ok, order} else {:error, changeset} -> {:error, changeset} end endend

“Error” Rail

Page 83: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defmodule Fulfillment.OrderCreation do def create(params, customer, auth) do with {:ok, order} <- validate_order(params, customer), {:ok, order} <- validate_in_backend(order, auth), {:ok, order} <- Repo.insert(order) do {:ok, order} else {:error, changeset} -> {:error, changeset} end endend

Validate internally

Page 84: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defmodule Fulfillment.OrderCreation do def create(params, customer, auth) do with {:ok, order} <- validate_order(params, customer), {:ok, order} <- validate_in_backend(order, auth), {:ok, order} <- Repo.insert(order) do {:ok, order} else {:error, changeset} -> {:error, changeset} end endend

Validate externally

Page 85: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defmodule Fulfillment.OrderCreation do def create(params, customer, auth) do with {:ok, order} <- validate_order(params, customer), {:ok, order} <- validate_in_backend(order, auth), {:ok, order} <- Repo.insert(order) do {:ok, order} else {:error, changeset} -> {:error, changeset} end endend

Save

Page 86: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

defmodule Fulfillment.OrderCreation do def create(params, customer, auth) do with {:ok, order} <- validate_order(params, customer), {:ok, order} <- validate_in_backend(order, auth), {:ok, order} <- Repo.insert(order) do {:ok, order} else {:error, changeset} -> {:error, changeset} end endend

Done

Page 87: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

No Kafka/Message Queue/

GraphQL?

Page 88: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Be careful with new technologies!

Page 89: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Microservices!

Page 90: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Microservices!”Macroapplications”

Page 91: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

All challenges areclearly technical

Page 92: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

All challenges areclearly technical

Page 93: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Stakeholders

Page 94: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Your team

Page 95: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

First Major Version

Page 96: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Get the others on board

Page 97: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Workshops

Page 98: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

To know it,you got to build it

Page 99: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM
Page 100: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Pair Adopter with Alchemist

Page 101: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Pair Adopter with Alchemist

Alchemist doesn’t touch keyboard

Page 102: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Knowledge

Page 103: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Knowledge

Page 104: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

“We are still using this like Rails – we should

use GenServers!”Someone on your team

Page 105: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

You don’t need to kill your Monolith,Complement it

Page 106: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Your Apps

Page 107: ErlangVM - WordPress.com · Enjoy Using Elixir effectively to Help Your Company Tobias Pfeiffer @PragTob pragtob.info. Author: Tobias Pfeiffer Created Date: 5/26/2018 11:22:22 AM

Enjoy Using Elixir effectively to Help Your Company

Tobias Pfeiffer@PragTob

pragtob.info