Becoming an intermediate elixir developer

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:

  1. When to use SQL vs NoSQL depends on the data and its properties regarding transactions, consistency, schema and I would add the maturity of the database architecture with relation to its web architecture.

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 - Learn Interactively

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).

  1. For your second question, its about capturing state and transferring it back and forth and the best resource that I have found is the ElixirSchool content to gently introduce the topic and then jump into the book ‘Designing Elixir Systems with OTP’. In fact, OTP is so foreign to most software developers. For example if your interviewing in a non-BEAM/Elixir/Erlang shop, they may ask you explain it.

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.

1 Like