venomnert

venomnert

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!

First 10 of 28 Posts Switch mode

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. https://www.youtube.com/watch?v=R_8ehmGTVbw

hudsonbay

hudsonbay

I’m in the same dilemma as you are. Nice question

venomnert

venomnert OP

This is a great talk @gregvaughn! A great showcase of what OTP is capable of.

You are correct here. At the moment any actionable advice is appreciated. With that being said, I able to extract the following advice from your response:

  1. Watch more elixir conference video which discuss OTP and understand the reasoning behind the presenter’s idea and code. Furthermore, try to reimplement my own solution for the talk. E.g your elevate talk and the source code.
dimitarvp

dimitarvp

Indeed there is no easy answer but for me at least Erlang/Elixir’s main value proposition is the OTP (Erlang) and metaprogramming / macros (Elixir).

Invest in those. I am yet to read the “Metaprogramming Elixir” book (I have it) but I only hear good things about it. There are 2-3 really good books about Elixir + OTP in particular as well and I have one of them (I think by written by @JEG2).

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.

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.

venomnert

venomnert OP

Meta programming is also something on my list to review as well.

I believe you are referring to this book by @JEG2. I have read that book. It was one of those books that helped me become a mature developer. Helped to think through an application from data to GenServers.

venomnert

venomnert OP

I mainly prefer books and video courses since they tend to be more comprehensive. And recently I am starting to appreciate conference talk as well.

venomnert

venomnert OP

This is a very good point.

dyowee23

dyowee23

Maybe contributing to open source? :slight_smile:

Where Next? Top

Trending in Chat/Questions Top

krisleech
Hey folks, I’ve been using Elixir for over a couple of years (phx, ecto, broadway, oban). For this kind of work you do not tend, in my e...
New
mhindujadheerajsudan
Hi, I’m Dheeraj Sudan from the UK. I’m a software developer and also run a business with my wife Meenu Hinduja. I’m interested in getting...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New

We're in Beta

About us Mission Statement