In this series, we'll explore the most effective ways of working with Elixir projects, examining the various tools, techniques, and processes that are available in Elixir. There are several topics to explore, and each of them has various trade-offs that we'll need to explore and discuss. Our ultimate goal is to identify specific answers and practical solutions that unlock the most effective and simplest ways of working for small teams that are either starting or scaling up their project.
Table of Contents
Elixir: A Brief Overview
For those new to the language, Elixir is a dynamic, functional programming language created in 2011, with syntax inspired by Ruby. Similar to how Java uses the Java Virtual Machine, Elixir runs on the Erlang Abstract Machine (BEAM). The BEAM, originating in the mid-80s, is known for powering critical and highly fault-tolerant distributed systems at scale.
It's a very interesting language because it manages to be simultaneously easy to pick up, has a standard-library with superpowers that are just out of this world, and its community is friendly and welcoming. But this isn't the series to deep-dive into Elixir itself, as there are great resources for that already. For example:
- Official Elixir Website and Documentation: The official Elixir guide is a great starting point, with thorough documentation and great getting started guides.
- Thinking Elixir podcast: An informative and friendly podcast covering recent developments and community insights.
- The Elixir Forum: An excellent place to ask questions and engage with the community. It's known for being welcoming to newcomers.
Exploring Elixir?
Now back to exploring. This series is an open learning journey: I am myself skilling up in Elixir, so this is genuinely a dive into the unknown to explore what's possible to do with Elixir projects. We very explicitly won't be rushing to write Elixir application code, instead our focus will be the in the many details that surrounds our application code that are rarely considered deeply when hurrying to get projects started.
Topics
2. Environment Setup
We need Erlang and Elixir installed, which might sound simple, but there are trade-offs to consider for a shared team environment. We'll also add a PostgreSQL database to keep our explorations relevant to real-world scenarios.
This article explores asdf, Nix, pkgx, and mise to set up a reproducible development environment.
3. Foundations of a Web App
Today we'll change gears a bit: It's time to make a web app. We'll need a project to work on for later articles in order to explore how to work with Elixir code, and so for this article we'll dive into some of the different ways to build a web app in Elixir. Our goal will be a simple example of a web app, and ideally it should make a data database call to be representative of real-world projects. Let's see what solutions we can find.
This article explores Cowboy, Plug, Bandit, and Phoenix to set up a web app.
4. Development Workflows
Today we'll settle on and implement core daily development workflows. First, we'll identify what makes a good workflow and which principles we can rely on, based on cutting-edge research in software development practices. Then, our goal will be to establish really simple mechanisms for managing code changes so we can work quickly and accurately together. These workflows must also be scalable enough to cope with increased complexity as our product grows. Let's dive in!
This article explores how to write shell scripts to set up effective and efficient workflows.
5. Onboarding
Onboarding into a project is an often overlooked aspect of team productivity, where the time spent configuring tools, dependencies, and local environments can represent a significant hidden cost - both in initial setup and ongoing maintenance. And beyond the immediate time investment, how we handle environment setup often reflects deeper values on the kind of quality and care a team wishes to provide.
This article explores streamlining developer onboarding via semi-automated scripting.
…and more articles to come as I find time to write them. If you have suggestions for topics please leave a comment.