venomnert

venomnert

Becoming an intermediate elixir developer

Background

I have been a backend elixir developer for about 3 years now. I have been mainly working on simple CRUD applications.

Context

As of last year I have been applying for elixir backend position; however, I have been unsuccessful in landing a job. After having been interviewed, I think I realize what I am missing: making architectural decisions in a complex system.

Its best if I provide a couple of interview questions to showcase what I mean in my above statement:

  1. When should one use sql vs nosql? What are the pitfalls of each technologies? Are there any performance difference between the two?
  2. You are tasked with creating a elevators as a service. Each elevator can go up, down or stop. Now how would you design this system using OTP? What are the pitfalls of the decision?

Those were some of the architectural questions I came across. Having a solid understanding of OTP I was able to provide a single high level implementation detail for the #2. But I was stumped when it came to determining the pitfalls of my decision. Furthermore, when pushed to answer similar questions I didn’t know how to answer it.

Question

What should a junior backend elixir developer do in order to gain experience to be able make architectural decisions in a complex system?

  • One thought that came to mind was, I should try to implement the system asked in #2 interview question. Even then I am not sure what I should put my focus on in order to gain the experience I need to land a job.

I apologize for the rant but I am stuck in my growth to become an experience backend elixir developer!

Most Liked

gregvaughn

gregvaughn

There’s no easy answer. To gain experience you need to spend time experiencing multiple situations. The experience you gain with side projects that aren’t really “in production” is helpful, but not the same as working for a company that has production systems.

I am encouraged by your elevator example. My first ElixirConf talk about OTP used elevators as the test case. Elixir Conf 2014 - Elixir Elevate by Greg Vaughn - YouTube

JEG2

JEG2

Author of Designing Elixir Systems with OTP

Some project ideas:

  • Build the Game of Life without using any processes. Try to minimize the cells processed in each new generation.
  • Build any moderate sized project while pairing 100% of the time. Trade driving so it’s 50/50.
  • Build a chat application using only what ships with Elixir (and Erlang). The app should be able to “Host” or “Join” an IP that’s currently hosting. Make sure I can receive messages while I’m typing one.
xlphs

xlphs

Making architectural decisions is just the how. I always start with why. Why do you have this particular problem that you are tasked to solve?

Why does the business want a new elevator service? Are the current solutions too slow? Is the problem actually optimizing elevator dispatch?

Similarly, understand the business can help choose between sql and nosql. Nosql or document databases are very flexible and works great for nested relations. Is that what the business data look like?

Also, design docs are necessary evil. You may or may not like them, it’s a tool for communication.

Sorry if all that seem too vague. I guess my point is you want to think like an engineer, so you have to understand requirements as well as the limitations.

gregvaughn

gregvaughn

It’s important to know your own learning style. Do you prefer the conference talk style, or a tutorial video, or would you prefer to read a book, or do you jump into a coding project and learn what you need as you go? Any of those can work.

One thing that I have consciously done in my career is to gain some understanding of the layer below where I’m actually working. For example, if you’re working in any web framework, you ought to know something about the HTTP protocol. If you’re working with Ecto.Changesets then it’s helpful to have an idea of what data is stored in there. Knowing these things help you gain intuition of what is easy/possible/impossible and help you have a mental model for when things don’t go as expected and you have to debug.

srowley

srowley

The first thing I tried to write in Elixir was an auction application for my fantasy football league. I built it such that it could support multiple auctions going on in different leagues concurrently. That felt like an intermediate introduction to Elixir and especially OTP. Since then I have worked on a charting library and a little toy Phoenix app that demonstrates that library.

From all of that, the advice I would give for a learning project order would be:

  • Pure functional library
  • Project that uses OTP (if it needs a database, just use ETS)
  • Project that uses Ecto
  • Project that uses Phoenix (these last two could be reversed. My Phoenix project doesn’t use a database and that has made it much simpler)

I think not starting with Phoenix made Phoenix much easier to understand at an intermediate (as opposed to “I know who to write a CRUD app with it”) level once I got to it.

Where Next?

Popular in Chat/Questions Top

loganhelms
A while back, I read a great book by Luis Atencio titled, Functional Programming in JavaScript. In section 7.3, he discusses memoization ...
New
svetarosemond
I’m planning on purchasing Elixir in action second edition, and I was wondering if anyone could tell me based off the first edition, does...
New
davearonson
I am looking for smallish problems to solve, using Elixir concepts beyond the basic syntax and concepts of Elixir as a language, such as ...
New
ggwc82
Looking to get started with FP and Elixir coming mainly from an OOP Rails and PHP background. My first question is, whats the best cours...
New
Nvim
Anybody know of a Pragmatic Studio 40% off coupon code for video course like Phoenix?
New
pillaiindu
I am a VSCode and Sublime user and I know VIM, though I don't use VIM directly but whenever I code inside Sublime or VSCode, I use Vim em...
New
jace
I wanted to write a library for interacting with a Web API as a practical way of learning Elixir. However, there seem to be a lot of diff...
New
AstonJ
It finally feels like I’ve got some time to catch up on my reading - though I am sure lots of people will be wondering the same: what are...
New
Fl4m3Ph03n1x
Background After following the communitiy suggestion, I bought the Elixir in Action 2nd Edition book and I am about to finish it now. I ...
New
logesh
Could someone provide a learning path for functional programming for who came from oops background.? Thanks in advance
New

Other popular topics Top

JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
AstonJ
by Lance Halvorsen Elixir and Phoenix are generating tremendous excitement as an unbeatable platform for building modern web application...
460 27162 124
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
magnetic
Hey :wave:t3: Elixir community, I’ve been learning Elixir, and working on some side projects. My editor of choice is VSCode, and althoug...
New

We're in Beta

About us Mission Statement