Adopting Elixir
From Concept to Production
by: Ben Marx, José Valim, Bruce Tate
Published | 2018-03-14 |
---|---|
Internal code | tvmelixir |
Print status | In Print |
Pages | 242 |
User level | Beginner |
Keywords | elixir, scalable, high availability, concurrent, parallel, adoption, case studies, management |
Related titles | Programming Phoenix |
ISBN | 9781680502527 |
Other ISBN |
Channel epub: 9781680505849 Channel PDF: 9781680505856 Kindle: 9781680505825 Safari: 9781680505832 Kindle: 9781680505825 |
BISACs | COM051430 COMPUTERS / Software Development & Engineering / Project ManagementCOM060090 COMPUTERS / Internet / Application DevelopmentCOM060090 COMPUTERS / Internet / Application Development |
Highlight
Adoption is more than programming. Elixir is an exciting new language, but to successfully get your application from start to finish, you’re going to need to know more than just the language. You need the case studies and strategies in this book. Learn the best practices for the whole life of your application, from design and team-building, to managing stakeholders, to deployment and monitoring. Go beyond the syntax and the tools to learn the techniques you need to develop your Elixir application from concept to production.
Description
Learn real-life strategies from the people who built Elixir and use it successfully at scale. See how Ben Marx and Bleacher Report maintain one of the highest-traffic Elixir applications by selling the concept to management and delivering on that promise. Find out how Bruce Tate and icanmakeitbetter hire and train Elixir engineers, and the techniques they’ve employed to design and ensure code consistency since Elixir’s early days. Explore customer challenges in deploying and monitoring distributed applications with Elixir creator José Valim and Plataformatec.
Make a business case and build a team before you finish your first prototype. Once you’re in development, form strategies for organizing your code and learning the constraints of the runtime and ecosystem. Convince stakeholders, both business and technical, about the value they can expect. Prepare to make the critical early decisions that will shape your application for years to come. Manage your deployment with all of the knobs and gauges that good DevOps teams demand. Decide between the many options available for deployment, and how to best prepare yourself for the challenges of running a production application.
This book picks up where most Elixir books leave off. It won’t teach you to program Elixir, or any of its tools. Instead, it guides you through the broader landscape and shows you a holistic approach to adopting the language.
<b>An Interview from the Authors of Adopting Elixir</b>
<b>Bruce Tate: José, as the creator of Elixir, you talk to customers about Elixir every day. What do they say?</b>
<b>José:</b> At the beginning, there wasn’t much talking, so most of my time at Plataformatec was spent building the language itself. As the community grew and more companies picked Elixir, we began to work with clients all around the world. This was a very interesting process because we got to hear what made them happy and also what caused them pain. We used this feedback cycle to continue bringing improvements to Elixir libraries and documentation. But with time, we have also noticed there were bigger questions to answer, common questions across different companies. While you could find this information in a blog post or a talk, there was no condensed resource that would discuss all of those different topics.
<b>BT: What kind of common questions did you hear?</b>
<b>José:</b> We heard all kinds of questions. When choosing Elixir, many companies wondered about the language development and the state of the community. Other companies would have questions about tooling and hiring. Some teams that had more experience with object-oriented languages would pose many questions about immutability and thinking functionally and concurrently. We are also frequently asked about the pitfalls and best practices for deploying and monitoring production systems.
<b>BT: Ben, you helped lead one of the biggest Elixir adoptions ever. Has it been worth it?</b>
<b>Ben:</b> In a word, yes. Our system is stable, scales easily, self-heals (thanks OTP) and performs very well. The problems that we were having with the legacy system are gone, which gives us the freedom to embark on ambitious projects instead of firefighting. It’s encouraging to see other developers learn and champion Elixir, and even non-technical people at B/R appreciate and talk about Elixir. Finally, it’s a pleasure to write Elixir. José has done an excellent job of designing Elixir and the adoption rate reinforces that.
<b>BT: Ben, what advice would you give others adopting Elixir for the first time?</b>
<b>Ben:</b> I’d say the best place to start is to read the book. We’ve done our best to guide new Elixir adopters through common problems and do so in a way that is accessible to developers of all levels. Even if you know the language well, we try to cover the soft skills — making the business case for Elixir and building out a team — that other resources haven’t addressed. One of the wonderful aspects of Elixir is the community. They’re a great and friendly resource. From ElixirBridge to Elixir Slack and Elixir IRC, people are happy and willing to help. But start with the book. We’re pretty sure you’ll get a long way with it.
<b>BT: José, same question. What advice would you give others adopting Elixir?</b>
<b>José:</b> That’s a tricky question. Learning is a very personal experience so we are glad that the community is at a point where different learning resources with many teaching styles are available. If you have an issue grasping an important concept, you can always find different perspectives on that topic. And make sure to take your time too!
Contents and Extracts
- <b>Introduction</b>
- Three Adoption Stories
- icanmakeitbetter is Acquired
- Bleacher Report Improves Performance and Reliability
- Plataformatec Supports Early Adopters
- Embracing End-To-End Adoption
- Wrapping Up
- Concept
- Team Building
- Training Developers
- When Things Go Wrong
- Hiring Elixir Developers
- Conducting Interviews
- Wrapping Up
- Ensuring Code Consistency <b>excerpt</b>
- Coding Standards
- Typespecs and Dialyxir
- Documentation
- Tests and Code Coverage
- Putting It All Together: Code Reviews
- Wrapping Up
- Legacy Systems and Dependencies
- Replacing a Legacy Web App
- Terraform and API Evolution
- Moving Incremental Releases into Production
- Umbrella Projects: Between Monoliths and Services
- Managing Third-Party Dependencies
- Wrapping Up
- Team Building
- Development
- Making the Functional Transition <b>excerpt</b>
- Elixir vs. Mutable Objects
- Polymorphism
- Agents and Tasks
- The Generic Server
- Supervisors
- Wrapping Up
- Distributed Elixir
- Remote Message Passing
- Persistence Strategies
- Finding Processes
- Cache and ETS
- Message Delivery Guarantees
- Homogeneous vs. Heterogeneous Systems
- Wrapping Up
- Integrating with External Code
- Lay of the Land
- Strategy 1: Native Implemented Functions (NIFs)
- Strategy 2: Communicating via I/O with Ports
- Strategy 3: The Erlang Distribution Protocol
- Wrapping Up
- Making the Functional Transition <b>excerpt</b>
- Production
- Coordinating Deployments <b>excerpt</b>
- Deploying with Mix
- run_erl and heart
- Releases
- Upgrading Code
- Distributed Erlang
- Wrapping Up
- Metrics and Performance Expectations
- Instrumenting Your System
- Instrumenting Ecto
- Instrumenting Phoenix
- Performance Assessment Workflow
- Load Testing
- Profiling
- Benchmarking
- Wrapping Up
- Making Your App Production Ready
- Logs and Errors
- SASL Reports
- Tracing
- Using Other Advanced Tools
- Wrapping Up
- Coordinating Deployments <b>excerpt</b>