I'm a mid-level software engineer, specialized in back-end programming. I'm getting my hands on Elixir currently, and I've read a few interesting blog posts (notably the one from Discord[1]) about its use case.
I've read the book called "Designing Data-Intensive applications" but it didn't scratch the same itch. I'd like to know how all of you who are writing software for millions of people scale your software. I'm guessing a lot of it comes from theory (e.g. blog articles, textbooks, courses) since it's not easily practicable (at least in my own company I don't need to scale for millions of users).
I don't know where to start so I'm hoping some of you can help
[1] https://discord.com/blog/using-rust-to-scale-elixir-for-11-million-concurrent-users
If you haven't solved certain problems caused by real users and real loads on production systems, you can still develop such mindset.
Build a habit of overloading your app with tons of requests - using load testing tools like wrk, wrk2, k6. Try to check this way all layers of your system, including the database (for this you obviously need to be able to create load-testing requests causing a real conversation with the database). Check how much of i/o, memory, and cpu (in this order) your app, database, cache, messaging etc is using under the said load. Develop a habit of opening inspector in your browser and peek at http conversations, not only for your services, but for a random page you visit. Get acquanted with Brendan Gregg's perf tools and his blog. Know how to use strace (although it's usage on production is discouraged as it slows down the examined process substantially) and understand its output. In general, become interested when your code ends up doing kernel syscalls and when not and, how to limit syscalls by buffering and how to read what's really going on. Make sure you understand how the virtual memory works on a modern system. That's just things from the top of my head