SlideShare a Scribd company logo
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?

More Related Content

What's hot

Staging and Deployment
Staging and DeploymentStaging and Deployment
Staging and Deployment
heyrocker
 
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 quality
Jaime 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 Mal
tdc-globalcode
 
Java Architectures - a New Hope
Java Architectures - a New HopeJava Architectures - a New Hope
Java Architectures - a New Hope
Eberhard 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 Bortnyk
Ruby Meditation
 
Refactoring RIA Unleashed 2011
Refactoring RIA Unleashed 2011Refactoring RIA Unleashed 2011
Refactoring RIA Unleashed 2011
Jesse 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 Language
Nic Raboy
 
Avoiding integration hell
Avoiding integration hellAvoiding integration hell
Avoiding integration hell
aaronbassett
 
Airbnb Java Script style guide
Airbnb Java Script style guideAirbnb Java Script style guide
Airbnb Java Script style guide
Ahmed 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 collide
Edward Wilde
 
Infusing Agility into the Java Legacy
Infusing Agility into the Java LegacyInfusing Agility into the Java Legacy
Infusing Agility into the Java Legacy
Aman 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 Terraform
VMware 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 Clojure
Katsuyasu Murata
 
Quick Intro Into Kanban
Quick Intro Into KanbanQuick Intro Into Kanban
Quick Intro Into Kanban
Sperasoft
 
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
Dragos Manolescu
 
44 Slides About 22 Modules
44 Slides About 22 Modules44 Slides About 22 Modules
44 Slides About 22 Modules
heyrocker
 

What's hot (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
 

Similar to Adopting Elixir in a 10 year old codebase

Functional Ruby
Functional RubyFunctional Ruby
Functional Ruby
Amoniac OÜ
 
Funtional Ruby - Mikhail Bortnyk
Funtional Ruby - Mikhail BortnykFuntional Ruby - Mikhail Bortnyk
Funtional Ruby - Mikhail Bortnyk
Ruby Meditation
 
3 years with Clojure
3 years with Clojure3 years with Clojure
3 years with Clojure
Michael Klishin
 
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 games
Wooga
 
Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swagger
Tony Tam
 
Performance and Abstractions
Performance and AbstractionsPerformance and Abstractions
Performance and Abstractions
Metosin 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 Architecture
Tony Tam
 
Social dev camp_2011
Social dev camp_2011Social dev camp_2011
Social dev camp_2011
Craig Ulliott
 
Software Engineering Thailand: Programming with Scala
Software Engineering Thailand: Programming with ScalaSoftware Engineering Thailand: Programming with Scala
Software Engineering Thailand: Programming with Scala
Brian Topping
 
Apache Solr 5.0 and beyond
Apache Solr 5.0 and beyondApache Solr 5.0 and beyond
Apache Solr 5.0 and beyond
Anshum 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 Netherlands
Ingo Renner
 
WebGL Camp 4 - A3 3D Engine
WebGL Camp 4 - A3 3D EngineWebGL Camp 4 - A3 3D Engine
WebGL Camp 4 - A3 3D Engine
aerotwist
 
My Little Webap - DevOpsSec is Magic
My Little Webap - DevOpsSec is MagicMy Little Webap - DevOpsSec is Magic
My Little Webap - DevOpsSec is Magic
Apollo 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" Ecosystems
Uwe Korn
 
DevOps in the Real World
DevOps in the Real WorldDevOps in the Real World
DevOps in the Real World
Max Yermakhanov
 
Polyglot Grails
Polyglot GrailsPolyglot Grails
Polyglot Grails
Marcin Gryszko
 
Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06Austin NoSQL 2011-07-06
Austin NoSQL 2011-07-06jimbojsb
 

Similar to 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
 

More from 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 it
Michael 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 issues
Michael Klishin
 
RabbitMQ Operations
RabbitMQ OperationsRabbitMQ Operations
RabbitMQ Operations
Michael Klishin
 
Scalable Open Source
Scalable Open SourceScalable Open Source
Scalable Open Source
Michael Klishin
 
Open source responsibly
Open source responsiblyOpen source responsibly
Open source responsibly
Michael Klishin
 
50 shades of concurrency
50 shades of concurrency50 shades of concurrency
50 shades of concurrency
Michael Klishin
 

More from 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
 

Recently uploaded

Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 

Recently uploaded (20)

Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 

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.