reescrevendo software crítico em elixir -- um …...senior software engineer @ telnyx (chicago,...

82
@renanranelli Reescrevendo software crítico em Elixir -- Um estudo de caso 2019-05-08 Renan Ranelli

Upload: others

Post on 07-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

@renanranelli

Reescrevendo software crítico em Elixir -- Um estudo de caso

2019-05-08

Renan Ranelli

Page 2: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

@renanranelli

Page 3: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Senior Software Engineer @ Telnyx (Chicago, IL)

São Paulo @ Brasil

Elixir desde 2015

Organizador do ElugSP

Antes de Elixir, varios Ruby, Python, C#, etc

Page 4: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios
Page 5: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios
Page 6: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

(Há vagas !)

Page 7: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios
Page 8: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios
Page 9: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios
Page 10: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Reescrevendo software crítico em Elixir

Page 11: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

disclaimer

Page 12: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Contexto e Motivações

Page 13: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Back-to-back User-Agent

Page 14: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Back-to-back User-Agent

“The Dialplan Service”

Page 15: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios
Page 16: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

- (almost) Stateless

- Super sensível à latência

- Baixo throughput (bem baixo)

Propriedades do Dialplan service

Page 17: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

- A antiga implementação do serviço era escrita em python.(De agora em diante chamada de “dialplan python”)

- Todos os devs python acabaram saindo do time de telefonia.

- Python é notoriamente mais difícil de escalar vertical & horizontalmente do que Elixir

“The Python situation”

Page 18: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

A decisão:Vamos re-escrever esse

serviço em Elixir!

Page 19: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Mas pera lá… Elixir?

Page 20: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Linguagem vs Plataforma

Page 21: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Definições:

1. Erlang é uma linguagem2. Erlang/OTP é plataforma3. Elixir é uma linguagem

que roda na plataforma Erlang/OTP

Page 22: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Erlang/OTP

Page 23: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

- "Erlang é uma linguagem funcional"!

- Erlang "Resolve" concorrência!

- É o "segredo" por trás do Whatsapp

- Metade da telefonia do mundo é feita em Erlang (citation needed)

- "Nine-nines availability"

Coisas que ouvimos falar:

Page 24: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

The Erlang/OTP Runtime

Page 25: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

- "Soft real time"- Preemptive scheduling (responsivo, justo & baixa variância da latência)

- Verticalmente Escalável- Distribuição e Concorrência são cidadãos de 1a classe- Garantias de execução fornecidas pelo runtime

(a base para tolerância a falha)

- "Alta performance"

Características da VM do Erlang

Page 26: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Tá, mas e Elixir com isso?

Page 27: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

- Elixir compila para o bytecode Erlang- Criada por um BR! José Valim <3- A semântica é absolutamente a mesma entre Elixir e

Erlang. (mais parecido com TypeScript/JS do que Clojure/Java, Elm/JS, etc)

- Para a plataforma, código Elixir e código Erlang são *indistinguíveis*

Elixir é só uma pequena gota

Page 28: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

"When designing the Erlang language and the Erlang VM, Joe,Mike and Robert did not aim to implement a functional programming language, they wanted a runtime where they could build distributed, fault-tolerant applications. It just happened that the foundation for writing such systems share many of the functional programming principles. And it reflects in both Erlang and Elixir.

Therefore, the discussion becomes much more interesting when you ask about their end-goals and how functional programming helped them achieve them. The further we explore those goals,we realize how they tie in with immutability and the control of shared state, for example: ..."

-- Valim, José

Elixir Beyond Functional Programming

Page 29: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

TOLERÂNCIA A FALHAS

Page 30: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Fault-tolerance requires hardware redundancy

Hardware redundancy requires distribution

Distribution on a single node is concurrency

Page 31: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Mas… Se Erlang é tão topper, pra quê Elixir?

Page 32: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

- A sintaxe e ecossistema Erlang são *alienigenas* para os desenvolvedores dessa geração.

- Existem inúmeras barreiras para adoção de Erlang: falta ferramental, docs difíceis de ler, zero polimorfismo de dados, etc.

- Elixir traz o "21st century" para a Erlang-landia, através de metaprogramming, ferramental coeso e bem desenhado, documentação *excelente* e uma comunidade vibrante e acolhedora

Raison d'être do Elixir:

Page 33: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Erlang -> Hard SkillsElixir -> Soft Skills

Page 34: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Exemplo: Preemptive Scheduling

Page 35: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Suponha que temos 6 tarefas:

T1 T2 T3 T4

T5

Page 36: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Com *cooperative scheduling*:

T1 T2 T3 T4 T5

T1 T2 T3T4 T5

T1 T2 T3 T4T5

1)

Or 2)

Or 3)

Page 37: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Sem *preemptive scheduling*:

T1 T2 T3 T4 T51)

Or 2)

E por ai vai...

T4 T5

T1 T2T3T4 T5 T4 T5T5

Page 38: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Mais sobre isso: https://www.youtube.com/watch?v=a7s25To6oII

Page 39: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Tá… e como re-escrevemos?

Page 40: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

- Buscar "buy-in" stakeholders de negócio- Reservar recursos para o projeto- Codar & deploy-ar continuamente (shadow deploys)- Verificar a paridade de features

(Tudo isso enquanto o tráfego de *PRODUÇÃO* cresce dia após dia!)

Nossa jornada

Page 41: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

- Tivemos de convencer vários stakeholders de negócio que seria necessário "desacelerar" o desenvolvimento de novas features para pagar "débito técnico"

- É fundamental frasear os benefícios em *termos de negócio*

Buscar "buy-in" stakeholders de negócio

Page 42: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

- Conseguimos aprovar um desenvolvedor dedicado full-time para esse projeto. Nenhuma outra responsabilidade. (#sqn)

- Re-escrever é um trabalho imenso em que você busca um "alvo em movimento". Se você não conseguir focar, você vai fracassar

Reservar recursos

Page 43: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Codar & deploy-ar continuamente (shadow deploys)

Page 44: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Codar & deploy-ar continuamente

Proxy Python Dialplan Graylog

XML Request

XML Response

Page 45: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Codar & deploy-ar continuamente

Proxy Python Dialplan Graylog

XML Request

Elixir Dialplan

Ignore response!

XML Response

XML Response

Page 46: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Codar & deploy-ar continuamente

Proxy Python Dialplan Graylog

XML Request

Elixir Dialplan

Ignore response!

XML Response

XML Response “Operational database”

Page 47: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Verificar paridade de Features

SELECT p.xml_dialplan, e.xml_dialplan, p.request FROM python_dialplan_logs as p INNER JOIN elixir_dialplan_logs as e ON p.call_id == e.call_id WHERE e.xml_dialplan != p.xml_dialplan

Page 48: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Verificar paridade de Features

Page 49: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Logo no começo, percebemos:

- A maioria das diferenças eram causadas por falhas em serviços "downstream".

- Quando não era esse o caso, "gravar" a resposta das dependências era suficiente para reproduzir o cenário de erro.

Verificar paridade de Features

Page 50: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Logo no começo, percebemos:

- A maioria das diferenças eram causadas por falhas em serviços "downstream".

- Quando não era esse o caso, "gravar" a resposta das dependências era suficiente para reproduzir o cenário de erro.

Verificar paridade de Features

(Tipo o VCR do Ruby)

Page 51: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Um efeito colateral top: Regressão

Page 52: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

E continuamos fazendo isso...

Page 53: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

E continuamos fazendo isso... … até que um dia acabaram as diffs!

Page 54: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

O familiar ciclo “TDD”

Page 55: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Nosso ciclo “tipo-TDD”Capture um request com erro Corrige & cria cenário

de regressão

Reescreve

Page 56: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Resultados

Page 57: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Praticamente *zero* incidentes em produção após o cutover

Page 58: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Um runtime muito superior. Code-base 100% Elixir.

Page 59: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Melhorias *enormes* em observabilidade

Page 60: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios
Page 61: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Features shipando mais rápido

Page 62: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Paralelização ridiculamente mais fácil & barata. (less latency -> happier users)

Page 63: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Agora… A parte menos gloriosa

Page 64: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Expectativas de negócio mal-gerenciadas

Page 65: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Amostragem burra das discrepâncias

Page 66: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

O recurso "dedicado" acabou não ficando tão dedicado assim

Page 67: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

O serviço python *continuou sendo modificado* enquanto a re-escrita acontecia!

Page 68: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

98% pronto por … muito tempo

Page 69: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Tentando refatorar código bizarro no momento errado do ciclo "tipo-TDD"

Page 70: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Wrapping up

Page 71: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Valeu a pena?

Page 72: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Vá para produção o mais cedo e o mais frequentemente possível!

Page 73: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Monitoração e observabilidade valem a pena. Você nunca deve ter

medo de *testar em produção*!

Page 74: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Refatorar >>> Reescrever(sempre que possível)

Page 75: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Re-escrever é difícil e perigoso.

Porém, possível.

Page 76: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Agora, uma reflexão final

Page 77: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

O que garante que a re-escrita em Elixir não vai degringolar da mesma forma que o python

degringolou?

Page 78: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Elixir economiza um pouquinho de tempo em *várias* situações

Page 79: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Elixir economiza um pouquinho de tempo em *várias* situações

… portanto, sobra *mais tempo* pra fazer o que é *importante*!

Page 80: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

“Fully utilize *all* your resources”

Page 81: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

“Fully utilize *all* your resources”(incluindo humanos)

Page 82: Reescrevendo software crítico em Elixir -- Um …...Senior Software Engineer @ Telnyx (Chicago, IL)São Paulo @ Brasil Elixir desde 2015 Organizador do ElugSP Antes de Elixir, varios

Renan [email protected]

[email protected]

Obrigado!

Check us out!

www.telnyx.com

@renanranelli

We're hiring!!