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:
- When should one use sql vs nosql? What are the pitfalls of each technologies? Are there any performance difference between the two?
- 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!
Trending in Chat/Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #ai
- #phoenix_html
- #elixirconf-us
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming











Showing Posts 28 to 19- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
evadne
Hi
Forget about Elixir (it’s just another programming language).
Forget about landing another job (it’s just another job, you won’t be happy).
Read everything and study 24/7, stay curious so you can create opportunities for yourself. Good luck!
As to the questions…
The SQL vs NoSQL question makes absolutely no sense without context (traffic level, structure or structureless-ness of data, concurrency model, etc) and a proper architect would study the actual underlying problem closely before providing a solution.
I’d probably use a bunch of processes and model each door and each carriage separately, as a starting point. Could model riders too.
dimitarvp
LOL!
That’s very true though, being terse requires more thought.
bjunc
Ha, thanks. I’ve always been a fan of this quote from Mark Twain:
“I didn’t have time to write a short letter, so I wrote a long one instead.”
dimitarvp
I should probably pay you to teach me how to express myself so concisely.
I was about to say almost the same as you but mine would have been 3x bigger…
egeersoz
One thing that could be useful to do with toy projects is to load them with tons of data and see if your original design decisions continue to hold true. Just seed your database with a million entries of each type and see what impact it has on performance, memory, UX, etc. Then try to make it better. You’ll learn a lot!
bjunc
I should preface that I am not at all a fan of interview questions like the ones you posted. Those questions fall into the category of “depends” where you could write a short book explaining all the options and rationale for each (as many have). Often, those questions have less to do with testing your knowledge, and more to do with whether you think like the interviewer. Some are even “gotcha” questions there to inflate the interviewer’s ego.
To answer your question about gaining experience, my personal experience has shown that biting off way more than you can chew is the best way. Jump into the deep end on something. Doesn’t really matter if it’s a toy project, a startup where you’re given way too much responsibility, a premature promotion, etc.. They all serve the same purpose. Books are fine for reciting academic sounding answers, but you need real-world, in-the-trenches experience with things like OTP to know how to really use it.
zakimedina
When you are back-end engineer, database knowledge and when to apply which kind of database persistence technology (e.g. key value store vs graph database) is absolutely crucial. To answer your immediate questions:
Use SQL: If the Data needs to follow ACID properties, requires strong consistency and there is a strong need to maintain relationships (e.g. JOINS etc.), you should use a SQL database aka a Relational Database (RDBMS) e.g. financial and banking transactions. Examples of common SQL databases are PostgreSQL or MySQL.
Use NoSQL: If the Data does not need ACID properties or follows BASE properties and can work with eventual consistency and does not have any apparent schema or relationships (this is typical for startups where they don’t know even know their data schema for anything including transactions) a NoSQL database like MongoDB would fit here nicely.
I will argue now, there is now a 3rd category called NewSQL or Distributed SQL which kinda of marries both the good parts of both SQL and NoSQL databases e.g. Google Spanner, Yugabyte and FaunaDB. Yes I can have my cake and eat it at the same time thanks to NewSQL. However, as I am learning the hard way, lots of teething problems with this kinda of technology.
If you like to learn more about these concepts, I recommend this course: Scalability & System Design for Developers - AI-Powered Learning for Developers
If you look past the apparent bias of the course author’s towards Java and Node.js you will be fine and you will gain a 50,000 feet of all web architectures (monolith, micro-services, and hybrids versions of them).
Always be ready to white-board anything and if you don’t understand during your interview. Be fearless and ask them to repeat it and talk aloud about your process for answering it loudly. Sometimes the method is more important than having the actual answer in hand. Anybody can google and get the answer but alot of problems you will not be able to google it and have to apply some kind of reasoning behind it.
P.S. I am hiring a backend engineer for my current business if you are interested.
dimitarvp
Yep, this circles back to the observation of some of us around here that most seasoned Elixir devs are “refugees” from other technological stacks where they got very painful schooling and learned their lessons.
pablodavila
I’ve been listening to some Elixir podcasts (and other software podcasts, too) in my free time and I’ve noticed that the topics, while related to the language, are usually about software engineering in general. The Elixir community has a lot of smart people in it and hearing some of their experiences really exposes you to new topics that you’d otherwise only hear about further in your career.
This doesn’t replace actual experience, of course, but I feel like it’s a nice addition to my efforts.
PJUllrich
My personal strategy for growing quickly was to always pick the hardest problems/tickets that were available. Always jump into the deep end, but have a lifeguard around i.e. a more senior developer who can help you if you get stuck. It’s hard to grow if every problem is familiar to you.