Sadly, I have even less to say about OTP given my limited knowledge of it. I would really like to have another course that would focus more on it.
As an experienced programmer learning about the Erlang and Elixir ecosystem, I found Elixir in Action (https://www.manning.com/books/elixir-in-action) an excellent next step after working through the Elixir guides and writing some small applications. The examples are written in Elixir rather than Erlang, but really it is about how to structure OTP applications.[1] https://www.manning.com/books/elixir-in-action-second-editio...
Learning about OTP took several tries for me. It didn't click until I had a few real world trials under my belt, because I couldn't see the use case for things.
I recently did a project where I had to build a distributed "choke point" across a cluster and funnel requests to it based on an ID. A project like that took what I thought I knew about otp design and raised it even more.
Pattern matching was somewhat hard but you can of course program by not using them, then during code reviews, you start getting advice like "split into a separate function clause". So bit by bit I started to get patter of using patterns and guards.
A thing that helped there was watching Garrett Smith's "Beautiful Erlang" video:
https://www.youtube.com/watch?v=IdJwECjylB4
On concurrency I had already did enough programming with threads before that and didn't have much difficulty understanding processes, pids and messages. Well except for being happy to get isolated heaps, smaller size threads (a few KBs) and supervision trees.
Indeed if i use my xp from other languages, my brain screams that it's ineficient and will kill perfs. Old habits die hard.