Reimagining Design Choices

A walkthrough of a layer-based approach to software design using OTP.


Good software design is about building layers, so an essential aspect of this course is helping you understand where layers go and how they work. Some of the techniques that we used when the internet was young are not the ones we’ll be using in the future. Even if this course doesn’t have all the answers, it’ll provide a solid body of knowledge to draw from for future projects.

A layer-based approach

In this brief journey together, we’ll learn how to write effective Elixir by using layers to hide complex features until we need to think about them.

We’ll extend our layers to take advantage of OTP, offering some intuition for how it works and some guidance for incorporating it into our layered designs. Let’s define that term quickly with a brief generality. OTP, or Open Telecom Platform, is a library that uses processes and layers to make it easy to build concurrent, self-healing software. We’ll deepen that understanding throughout this course.

Additional tools

Aside from Elixir, we’ll also pull from the following languages for algorithms and techniques:

  • Erlang: A general-purpose programming language and runtime environment. It contains a large collection of libraries called OTP.
  • Clojure: A functional programming language. It includes first-class functions, techniques to eliminate mutable data, and a focus on recursive iteration rather than side-effect-based looping.
  • Elm: A domain-specific functional programming language for designing graphical user interfaces in web browsers declaratively.

We will be able to solve problems similar to the ones we’re facing to determine what the right set of layers should be.