SlideShare ist ein Scribd-Unternehmen logo
1 von 79
Adopting Elixir in a 10
Year Old Codebase
Michael Klishin, Pivotal Software Inc.
Who am I?
Who am I?
• Yada Yada Yada Staff Software Engineer at
Pivotal
Who am I?
• Yada Yada Yada Staff Software Engineer at
Pivotal
• RabbitMQ core team member
About this talk
About this talk
• This is an experience report
About this talk
• This is an experience report
• Some arguments may be subjective or team-
specific, YMMV
What's the Project?
What's the Project?
• RabbitMQ
What's the Project?
• RabbitMQ
• Started in 2006, before Elixir (Rebar, Lager,
Cowboy, Ranch, dinosaurs, …) existed
What's the Project?
• RabbitMQ
• Started in 2006, before Elixir (Rebar, Lager,
Cowboy, Ranch, dinosaurs, …) existed
• Lots of wheels invented, some are not very round
What's the Project?
• RabbitMQ
• Started in 2006, before Elixir (Rebar, Lager,
Cowboy, Ranch, dinosaurs, …) existed
• Lots of wheels invented, some are not very round
• New team with a new perspective on things in
the last ~ 2 years
What's the Project?
• 7 engineers + ~ 3 active contributors, all kinds of
backgrounds (Erlang, Java, C#/F#, C, …)
What's the Project?
• 7 engineers + ~ 3 active contributors, all kinds of
backgrounds (Erlang, Java, C#/F#, C, …)
• Includes several client libraries we maintain, lots
of plugins
What's the Project?
• 7 engineers + ~ 3 active contributors, all kinds of
backgrounds (Erlang, Java, C#/F#, C, …)
• Includes several client libraries we maintain, lots
of plugins
• There are projects at Pivotal that depend on what
we do
How do we use Elixir?
How do we use Elixir?
• All core CLI tools as of 3.7.0
How do we use Elixir?
• All core CLI tools as of 3.7.0
• Experimental plugins
How do we use Elixir?
• All core CLI tools as of 3.7.0
• Experimental plugins
• Future tools and plugins
How do we use Elixir?
• All core CLI tools as of 3.7.0
• Experimental plugins
• Future tools and plugins
• Recruitment honey pot (discovered accidentally)
😂
Why Elixir?
Why new CLI tools?
• Homegrown CLI option parser is meh
Why new CLI tools?
• Homegrown CLI option parser is meh
• CLI tools are too tied to the server, non-
extensible
Why new CLI tools?
• Homegrown CLI option parser is meh
• CLI tools are too tied to the server, non-
extensible
• A project-within-a-project
Why Elixir?
Why Elixir?
• Elixir's OptionParser seems to be inspired by
Ruby & Python ones
Why Elixir?
• Elixir's OptionParser seems to be inspired by
Ruby & Python ones
• Associative data structures in Elixir are a solid
improvement over Erlang's
Why Elixir?
• Elixir's OptionParser seems to be inspired by
Ruby & Python ones
• Associative data structures in Elixir are a solid
improvement over Erlang's
• Interoperability with Erlang makes it very easy to
try
Why Elixir?
• Elixir's OptionParser seems to be inspired by Ruby
& Python ones
• Associative data structures in Elixir are a solid
improvement over Erlang's
• Interoperability with Erlang makes it very easy to
try
• We had over 50 repos already, one more wouldn't
hurt
Why Elixir
• Unicode is not an afterthought
Why Elixir
• Unicode is not an afterthought
• More approachable to other teams
Why Elixir
• Unicode is not an afterthought
• More approachable to other teams
• A very low risk endeavour for products already
running on BEAM
How did it go?
How did it go?
• Next feature release will include the new CLI
tools in Elixir
How did it go?
• Next feature release will include the new CLI
tools in Elixir
• Close to 70 commands, ~ 750 tests, ~ 8K lines of
code
How did it go?
• Next feature release will include the new CLI
tools in Elixir
• Close to 70 commands, ~ 750 tests, ~ 8K lines of
code
• New features: extensibility from plugins, result
set streaming for listing commands, much better
argument validation, …
How did it go?
• Next feature release will include the new CLI tools
in Elixir
• Close to 70 commands, ~ 750 tests, ~ 8K lines of
code
• New features: extensibility from plugins, result set
streaming for listing commands, much better
argument validation, …
• Well received by other teams at Pivotal 👍
How did it go?
How did it go?
• Quickly adopted by folks without prior Elixir and
virtually no Erlang experience 👍
How did it go?
• Quickly adopted by folks without prior Elixir and
virtually no Erlang experience 👍
• Very decent standard library 👍
How did it go?
• Quickly adopted by folks without prior Elixir and
virtually no Erlang experience 👍
• Very decent standard library 👍
• ExUnit is up there with Spock, RSpec 👍
How did it go?
• Quickly adopted by folks without prior Elixir and
virtually no Erlang experience 👍
• Very decent standard library 👍
• ExUnit is up there with Spock, RSpec 👍
• Error messages in Elixir are more sensible 👍
How did it go?
• Tooling and dependency management from this
century 👍
How did it go?
• Tooling and dependency management from this
century 👍
• Upgrading between Elixir versions was very easy
😍
How did it go?
• Tooling and dependency management from this
century 👍
• Upgrading between Elixir versions was very easy
😍
• Some Elixir libraries are better than their Erlang
alternatives 🐼
How did it go?
How did it go?
• Integration with erlang.mk 😣
How did it go?
• Integration with erlang.mk 😣
• Confusing to those spending too much time with
Erlang 😕
How did it go?
• Integration with erlang.mk 😣
• Confusing to those spending too much time with
Erlang 😕
• Elixir/Erlang data type mismatches 😣
How did it go?
• Integration with erlang.mk 😣
• Confusing to those spending too much time with
Erlang 😕
• Elixir/Erlang data type mismatches 😣
• Some Elixir libraries are a one man show 🤞
How did it go?
• Integration with erlang.mk 😣
• Confusing to those spending too much time with
Erlang 😕
• Elixir/Erlang data type mismatches 😣
• Some Elixir libraries are a one man show 🤞
• Elixir skeptics in the community 🤞
Cool Elixir features our code
uses
Cool Elixir features our code
uses
• Functions
Cool Elixir features our code
uses
• Functions
• Modules
Cool Elixir features our code
uses
• Functions
• Modules
• Standard library
Cool Elixir features our code
uses
• Functions
• Modules
• Standard library
• Streams
Cool Elixir features our code
uses
• Functions
• Modules
• Standard library
• Streams
• Macros? Nope.
Cool Elixir features our code
uses
• Functions
• Modules
• Standard library
• Streams
• Macros? Nope.
• Agents? Nope.
Cool Elixir features our code
uses
• Tasks? No.
Cool Elixir features our code
uses
• Tasks? No.
• Sweet frameworks? Nooooooooo.
Could we build the same
thing in Erlang?
Could we build the same
thing in Erlang?
• Technically, absolutely
Could we build the same
thing in Erlang?
• Technically, absolutely
• In terms of perception by potential contributors,
probably not
Where do we go from here?
Where do we go from here?
• Moar Elixir
Where do we go from here?
• Moar Elixir
• Moar Erlang
Where do we go from here?
• Moar Elixir
• Moar Erlang
• Fewer unnecessarily reinvented wheels 🙏
@michaelklishin
Questions?

Weitere ähnliche Inhalte

Was ist angesagt?

Staging and Deployment
Staging and DeploymentStaging and Deployment
Staging and Deploymentheyrocker
 
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...AOE
 
Scala Bay Meetup - The state of Scala code style and quality
Scala Bay Meetup - The state of Scala code style and qualityScala Bay Meetup - The state of Scala code style and quality
Scala Bay Meetup - The state of Scala code style and qualityJaime Jorge
 
TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
TDC2016SP - Otimização Prematura: a Raíz de Todo o MalTDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
TDC2016SP - Otimização Prematura: a Raíz de Todo o Maltdc-globalcode
 
Java Architectures - a New Hope
Java Architectures - a New HopeJava Architectures - a New Hope
Java Architectures - a New HopeEberhard Wolff
 
Different ways of integrating React into Rails - Mikhail Bortnyk
Different ways of integrating React into Rails - Mikhail BortnykDifferent ways of integrating React into Rails - Mikhail Bortnyk
Different ways of integrating React into Rails - Mikhail BortnykRuby Meditation
 
Refactoring RIA Unleashed 2011
Refactoring RIA Unleashed 2011Refactoring RIA Unleashed 2011
Refactoring RIA Unleashed 2011Jesse Warden
 
Developing Amazon Alexa Skills with the Go Programming Language
Developing Amazon Alexa Skills with the Go Programming LanguageDeveloping Amazon Alexa Skills with the Go Programming Language
Developing Amazon Alexa Skills with the Go Programming LanguageNic Raboy
 
Avoiding integration hell
Avoiding integration hellAvoiding integration hell
Avoiding integration hellaaronbassett
 
Airbnb Java Script style guide
Airbnb Java Script style guideAirbnb Java Script style guide
Airbnb Java Script style guideAhmed Elbassel
 
Micro Services - Smaller is Better?
Micro Services - Smaller is Better?Micro Services - Smaller is Better?
Micro Services - Smaller is Better?Eberhard Wolff
 
Simple Ruby DSL Techniques: Big Project Impact!
Simple Ruby DSL Techniques: Big Project Impact!Simple Ruby DSL Techniques: Big Project Impact!
Simple Ruby DSL Techniques: Big Project Impact!Aman King
 
Serverless: when functions and GitOps collide
Serverless: when functions and GitOps collideServerless: when functions and GitOps collide
Serverless: when functions and GitOps collideEdward Wilde
 
Infusing Agility into the Java Legacy
Infusing Agility into the Java LegacyInfusing Agility into the Java Legacy
Infusing Agility into the Java LegacyAman King
 
WTF TDD?
WTF TDD?WTF TDD?
WTF TDD?jeremyw
 
Voice Applications (Alexa Skills) Cloud Native on Kubernetes with Terraform
Voice Applications (Alexa Skills) Cloud Native on Kubernetes with TerraformVoice Applications (Alexa Skills) Cloud Native on Kubernetes with Terraform
Voice Applications (Alexa Skills) Cloud Native on Kubernetes with TerraformVMware Tanzu
 
Clojure/north 2019 Raising Services and People with Clojure
Clojure/north 2019 Raising Services and People with ClojureClojure/north 2019 Raising Services and People with Clojure
Clojure/north 2019 Raising Services and People with ClojureKatsuyasu Murata
 
Quick Intro Into Kanban
Quick Intro Into KanbanQuick Intro Into Kanban
Quick Intro Into KanbanSperasoft
 
Whitepages Practical Experience Converting from Ruby to Reactive
Whitepages Practical Experience Converting from Ruby to ReactiveWhitepages Practical Experience Converting from Ruby to Reactive
Whitepages Practical Experience Converting from Ruby to ReactiveDragos Manolescu
 
44 Slides About 22 Modules
44 Slides About 22 Modules44 Slides About 22 Modules
44 Slides About 22 Modulesheyrocker
 

Was ist angesagt? (20)

Staging and Deployment
Staging and DeploymentStaging and Deployment
Staging and Deployment
 
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
 
Scala Bay Meetup - The state of Scala code style and quality
Scala Bay Meetup - The state of Scala code style and qualityScala Bay Meetup - The state of Scala code style and quality
Scala Bay Meetup - The state of Scala code style and quality
 
TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
TDC2016SP - Otimização Prematura: a Raíz de Todo o MalTDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
 
Java Architectures - a New Hope
Java Architectures - a New HopeJava Architectures - a New Hope
Java Architectures - a New Hope
 
Different ways of integrating React into Rails - Mikhail Bortnyk
Different ways of integrating React into Rails - Mikhail BortnykDifferent ways of integrating React into Rails - Mikhail Bortnyk
Different ways of integrating React into Rails - Mikhail Bortnyk
 
Refactoring RIA Unleashed 2011
Refactoring RIA Unleashed 2011Refactoring RIA Unleashed 2011
Refactoring RIA Unleashed 2011
 
Developing Amazon Alexa Skills with the Go Programming Language
Developing Amazon Alexa Skills with the Go Programming LanguageDeveloping Amazon Alexa Skills with the Go Programming Language
Developing Amazon Alexa Skills with the Go Programming Language
 
Avoiding integration hell
Avoiding integration hellAvoiding integration hell
Avoiding integration hell
 
Airbnb Java Script style guide
Airbnb Java Script style guideAirbnb Java Script style guide
Airbnb Java Script style guide
 
Micro Services - Smaller is Better?
Micro Services - Smaller is Better?Micro Services - Smaller is Better?
Micro Services - Smaller is Better?
 
Simple Ruby DSL Techniques: Big Project Impact!
Simple Ruby DSL Techniques: Big Project Impact!Simple Ruby DSL Techniques: Big Project Impact!
Simple Ruby DSL Techniques: Big Project Impact!
 
Serverless: when functions and GitOps collide
Serverless: when functions and GitOps collideServerless: when functions and GitOps collide
Serverless: when functions and GitOps collide
 
Infusing Agility into the Java Legacy
Infusing Agility into the Java LegacyInfusing Agility into the Java Legacy
Infusing Agility into the Java Legacy
 
WTF TDD?
WTF TDD?WTF TDD?
WTF TDD?
 
Voice Applications (Alexa Skills) Cloud Native on Kubernetes with Terraform
Voice Applications (Alexa Skills) Cloud Native on Kubernetes with TerraformVoice Applications (Alexa Skills) Cloud Native on Kubernetes with Terraform
Voice Applications (Alexa Skills) Cloud Native on Kubernetes with Terraform
 
Clojure/north 2019 Raising Services and People with Clojure
Clojure/north 2019 Raising Services and People with ClojureClojure/north 2019 Raising Services and People with Clojure
Clojure/north 2019 Raising Services and People with Clojure
 
Quick Intro Into Kanban
Quick Intro Into KanbanQuick Intro Into Kanban
Quick Intro Into Kanban
 
Whitepages Practical Experience Converting from Ruby to Reactive
Whitepages Practical Experience Converting from Ruby to ReactiveWhitepages Practical Experience Converting from Ruby to Reactive
Whitepages Practical Experience Converting from Ruby to Reactive
 
44 Slides About 22 Modules
44 Slides About 22 Modules44 Slides About 22 Modules
44 Slides About 22 Modules
 

Ähnlich wie Adopting Elixir in a 10 year old codebase

Funtional Ruby - Mikhail Bortnyk
Funtional Ruby - Mikhail BortnykFuntional Ruby - Mikhail Bortnyk
Funtional Ruby - Mikhail BortnykRuby Meditation
 
Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"Paolo Negri
 
Erlang, the big switch in social games
Erlang, the big switch in social gamesErlang, the big switch in social games
Erlang, the big switch in social gamesWooga
 
Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swaggerTony Tam
 
Performance and Abstractions
Performance and AbstractionsPerformance and Abstractions
Performance and AbstractionsMetosin Oy
 
Message:Passing - lpw 2012
Message:Passing - lpw 2012Message:Passing - lpw 2012
Message:Passing - lpw 2012Tomas Doran
 
Inside Wordnik's Architecture
Inside Wordnik's ArchitectureInside Wordnik's Architecture
Inside Wordnik's ArchitectureTony Tam
 
Social dev camp_2011
Social dev camp_2011Social dev camp_2011
Social dev camp_2011Craig Ulliott
 
Software Engineering Thailand: Programming with Scala
Software Engineering Thailand: Programming with ScalaSoftware Engineering Thailand: Programming with Scala
Software Engineering Thailand: Programming with ScalaBrian Topping
 
Apache Solr 5.0 and beyond
Apache Solr 5.0 and beyondApache Solr 5.0 and beyond
Apache Solr 5.0 and beyondAnshum Gupta
 
Apache Solr for TYPO3 at TYPO3 Usergroup Day Netherlands
Apache Solr for TYPO3 at TYPO3 Usergroup Day NetherlandsApache Solr for TYPO3 at TYPO3 Usergroup Day Netherlands
Apache Solr for TYPO3 at TYPO3 Usergroup Day NetherlandsIngo Renner
 
WebGL Camp 4 - A3 3D Engine
WebGL Camp 4 - A3 3D EngineWebGL Camp 4 - A3 3D Engine
WebGL Camp 4 - A3 3D Engineaerotwist
 
My Little Webap - DevOpsSec is Magic
My Little Webap - DevOpsSec is MagicMy Little Webap - DevOpsSec is Magic
My Little Webap - DevOpsSec is MagicApollo Clark
 
From Test to Live with Rex
From Test to Live with RexFrom Test to Live with Rex
From Test to Live with RexJan Gehring
 
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" EcosystemsPyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" EcosystemsUwe Korn
 
DevOps in the Real World
DevOps in the Real WorldDevOps in the Real World
DevOps in the Real WorldMax Yermakhanov
 
Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06jimbojsb
 

Ähnlich wie Adopting Elixir in a 10 year old codebase (20)

Functional Ruby
Functional RubyFunctional Ruby
Functional Ruby
 
Funtional Ruby - Mikhail Bortnyk
Funtional Ruby - Mikhail BortnykFuntional Ruby - Mikhail Bortnyk
Funtional Ruby - Mikhail Bortnyk
 
3 years with Clojure
3 years with Clojure3 years with Clojure
3 years with Clojure
 
Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"
 
Erlang, the big switch in social games
Erlang, the big switch in social gamesErlang, the big switch in social games
Erlang, the big switch in social games
 
Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swagger
 
Performance and Abstractions
Performance and AbstractionsPerformance and Abstractions
Performance and Abstractions
 
Message:Passing - lpw 2012
Message:Passing - lpw 2012Message:Passing - lpw 2012
Message:Passing - lpw 2012
 
Inside Wordnik's Architecture
Inside Wordnik's ArchitectureInside Wordnik's Architecture
Inside Wordnik's Architecture
 
Social dev camp_2011
Social dev camp_2011Social dev camp_2011
Social dev camp_2011
 
Software Engineering Thailand: Programming with Scala
Software Engineering Thailand: Programming with ScalaSoftware Engineering Thailand: Programming with Scala
Software Engineering Thailand: Programming with Scala
 
Apache Solr 5.0 and beyond
Apache Solr 5.0 and beyondApache Solr 5.0 and beyond
Apache Solr 5.0 and beyond
 
Apache Solr for TYPO3 at TYPO3 Usergroup Day Netherlands
Apache Solr for TYPO3 at TYPO3 Usergroup Day NetherlandsApache Solr for TYPO3 at TYPO3 Usergroup Day Netherlands
Apache Solr for TYPO3 at TYPO3 Usergroup Day Netherlands
 
WebGL Camp 4 - A3 3D Engine
WebGL Camp 4 - A3 3D EngineWebGL Camp 4 - A3 3D Engine
WebGL Camp 4 - A3 3D Engine
 
My Little Webap - DevOpsSec is Magic
My Little Webap - DevOpsSec is MagicMy Little Webap - DevOpsSec is Magic
My Little Webap - DevOpsSec is Magic
 
From Test to Live with Rex
From Test to Live with RexFrom Test to Live with Rex
From Test to Live with Rex
 
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" EcosystemsPyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
 
DevOps in the Real World
DevOps in the Real WorldDevOps in the Real World
DevOps in the Real World
 
Polyglot Grails
Polyglot GrailsPolyglot Grails
Polyglot Grails
 
Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06
 

Mehr von Michael Klishin

Troubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use itTroubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use itMichael Klishin
 
Troubleshooting common oslo.messaging and RabbitMQ issues
Troubleshooting common oslo.messaging and RabbitMQ issuesTroubleshooting common oslo.messaging and RabbitMQ issues
Troubleshooting common oslo.messaging and RabbitMQ issuesMichael Klishin
 
50 shades of concurrency
50 shades of concurrency50 shades of concurrency
50 shades of concurrencyMichael Klishin
 

Mehr von Michael Klishin (6)

Troubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use itTroubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use it
 
Troubleshooting common oslo.messaging and RabbitMQ issues
Troubleshooting common oslo.messaging and RabbitMQ issuesTroubleshooting common oslo.messaging and RabbitMQ issues
Troubleshooting common oslo.messaging and RabbitMQ issues
 
RabbitMQ Operations
RabbitMQ OperationsRabbitMQ Operations
RabbitMQ Operations
 
Scalable Open Source
Scalable Open SourceScalable Open Source
Scalable Open Source
 
Open source responsibly
Open source responsiblyOpen source responsibly
Open source responsibly
 
50 shades of concurrency
50 shades of concurrency50 shades of concurrency
50 shades of concurrency
 

Kürzlich hochgeladen

DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfOverkill Security
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 

Kürzlich hochgeladen (20)

DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 

Adopting Elixir in a 10 year old codebase

  • 1. Adopting Elixir in a 10 Year Old Codebase Michael Klishin, Pivotal Software Inc.
  • 3. Who am I? • Yada Yada Yada Staff Software Engineer at Pivotal
  • 4. Who am I? • Yada Yada Yada Staff Software Engineer at Pivotal • RabbitMQ core team member
  • 5.
  • 7. About this talk • This is an experience report
  • 8. About this talk • This is an experience report • Some arguments may be subjective or team- specific, YMMV
  • 9.
  • 12. What's the Project? • RabbitMQ • Started in 2006, before Elixir (Rebar, Lager, Cowboy, Ranch, dinosaurs, …) existed
  • 13. What's the Project? • RabbitMQ • Started in 2006, before Elixir (Rebar, Lager, Cowboy, Ranch, dinosaurs, …) existed • Lots of wheels invented, some are not very round
  • 14. What's the Project? • RabbitMQ • Started in 2006, before Elixir (Rebar, Lager, Cowboy, Ranch, dinosaurs, …) existed • Lots of wheels invented, some are not very round • New team with a new perspective on things in the last ~ 2 years
  • 15. What's the Project? • 7 engineers + ~ 3 active contributors, all kinds of backgrounds (Erlang, Java, C#/F#, C, …)
  • 16. What's the Project? • 7 engineers + ~ 3 active contributors, all kinds of backgrounds (Erlang, Java, C#/F#, C, …) • Includes several client libraries we maintain, lots of plugins
  • 17. What's the Project? • 7 engineers + ~ 3 active contributors, all kinds of backgrounds (Erlang, Java, C#/F#, C, …) • Includes several client libraries we maintain, lots of plugins • There are projects at Pivotal that depend on what we do
  • 18.
  • 19. How do we use Elixir?
  • 20. How do we use Elixir? • All core CLI tools as of 3.7.0
  • 21. How do we use Elixir? • All core CLI tools as of 3.7.0 • Experimental plugins
  • 22. How do we use Elixir? • All core CLI tools as of 3.7.0 • Experimental plugins • Future tools and plugins
  • 23. How do we use Elixir? • All core CLI tools as of 3.7.0 • Experimental plugins • Future tools and plugins • Recruitment honey pot (discovered accidentally) 😂
  • 24.
  • 26. Why new CLI tools? • Homegrown CLI option parser is meh
  • 27. Why new CLI tools? • Homegrown CLI option parser is meh • CLI tools are too tied to the server, non- extensible
  • 28. Why new CLI tools? • Homegrown CLI option parser is meh • CLI tools are too tied to the server, non- extensible • A project-within-a-project
  • 30. Why Elixir? • Elixir's OptionParser seems to be inspired by Ruby & Python ones
  • 31. Why Elixir? • Elixir's OptionParser seems to be inspired by Ruby & Python ones • Associative data structures in Elixir are a solid improvement over Erlang's
  • 32. Why Elixir? • Elixir's OptionParser seems to be inspired by Ruby & Python ones • Associative data structures in Elixir are a solid improvement over Erlang's • Interoperability with Erlang makes it very easy to try
  • 33. Why Elixir? • Elixir's OptionParser seems to be inspired by Ruby & Python ones • Associative data structures in Elixir are a solid improvement over Erlang's • Interoperability with Erlang makes it very easy to try • We had over 50 repos already, one more wouldn't hurt
  • 34. Why Elixir • Unicode is not an afterthought
  • 35. Why Elixir • Unicode is not an afterthought • More approachable to other teams
  • 36. Why Elixir • Unicode is not an afterthought • More approachable to other teams • A very low risk endeavour for products already running on BEAM
  • 37.
  • 38. How did it go?
  • 39. How did it go? • Next feature release will include the new CLI tools in Elixir
  • 40. How did it go? • Next feature release will include the new CLI tools in Elixir • Close to 70 commands, ~ 750 tests, ~ 8K lines of code
  • 41. How did it go? • Next feature release will include the new CLI tools in Elixir • Close to 70 commands, ~ 750 tests, ~ 8K lines of code • New features: extensibility from plugins, result set streaming for listing commands, much better argument validation, …
  • 42. How did it go? • Next feature release will include the new CLI tools in Elixir • Close to 70 commands, ~ 750 tests, ~ 8K lines of code • New features: extensibility from plugins, result set streaming for listing commands, much better argument validation, … • Well received by other teams at Pivotal 👍
  • 43. How did it go?
  • 44. How did it go? • Quickly adopted by folks without prior Elixir and virtually no Erlang experience 👍
  • 45. How did it go? • Quickly adopted by folks without prior Elixir and virtually no Erlang experience 👍 • Very decent standard library 👍
  • 46. How did it go? • Quickly adopted by folks without prior Elixir and virtually no Erlang experience 👍 • Very decent standard library 👍 • ExUnit is up there with Spock, RSpec 👍
  • 47. How did it go? • Quickly adopted by folks without prior Elixir and virtually no Erlang experience 👍 • Very decent standard library 👍 • ExUnit is up there with Spock, RSpec 👍 • Error messages in Elixir are more sensible 👍
  • 48. How did it go? • Tooling and dependency management from this century 👍
  • 49. How did it go? • Tooling and dependency management from this century 👍 • Upgrading between Elixir versions was very easy 😍
  • 50. How did it go? • Tooling and dependency management from this century 👍 • Upgrading between Elixir versions was very easy 😍 • Some Elixir libraries are better than their Erlang alternatives 🐼
  • 51.
  • 52. How did it go?
  • 53. How did it go? • Integration with erlang.mk 😣
  • 54. How did it go? • Integration with erlang.mk 😣 • Confusing to those spending too much time with Erlang 😕
  • 55. How did it go? • Integration with erlang.mk 😣 • Confusing to those spending too much time with Erlang 😕 • Elixir/Erlang data type mismatches 😣
  • 56. How did it go? • Integration with erlang.mk 😣 • Confusing to those spending too much time with Erlang 😕 • Elixir/Erlang data type mismatches 😣 • Some Elixir libraries are a one man show 🤞
  • 57. How did it go? • Integration with erlang.mk 😣 • Confusing to those spending too much time with Erlang 😕 • Elixir/Erlang data type mismatches 😣 • Some Elixir libraries are a one man show 🤞 • Elixir skeptics in the community 🤞
  • 58.
  • 59. Cool Elixir features our code uses
  • 60. Cool Elixir features our code uses • Functions
  • 61. Cool Elixir features our code uses • Functions • Modules
  • 62. Cool Elixir features our code uses • Functions • Modules • Standard library
  • 63. Cool Elixir features our code uses • Functions • Modules • Standard library • Streams
  • 64. Cool Elixir features our code uses • Functions • Modules • Standard library • Streams • Macros? Nope.
  • 65. Cool Elixir features our code uses • Functions • Modules • Standard library • Streams • Macros? Nope. • Agents? Nope.
  • 66. Cool Elixir features our code uses • Tasks? No.
  • 67. Cool Elixir features our code uses • Tasks? No. • Sweet frameworks? Nooooooooo.
  • 68.
  • 69. Could we build the same thing in Erlang?
  • 70. Could we build the same thing in Erlang? • Technically, absolutely
  • 71. Could we build the same thing in Erlang? • Technically, absolutely • In terms of perception by potential contributors, probably not
  • 72.
  • 73. Where do we go from here?
  • 74. Where do we go from here? • Moar Elixir
  • 75. Where do we go from here? • Moar Elixir • Moar Erlang
  • 76. Where do we go from here? • Moar Elixir • Moar Erlang • Fewer unnecessarily reinvented wheels 🙏
  • 77.