I found that a helpful overview, too. I wish there were a carefully written, book-length equivalent that went into enough detail for a person with the basic foundation (basic front-end apps, basic server-side apps, HTTP, ssh/cmd line, SQL) to set up a production infrastructure of approximately the complexity of the one in the article.
With that, I could better understand the various managed options out there. In other words, I would be able to shop around and tell from their docs what it is they would do for me and what I would be doing for myself along with the limitations, tradeoffs, issues that needed to be dealt with up front and those that could wait for later (or never), etc.
Really good walkthrough! This is exactly how a company I worked for started to scale. The part about checking logs on every server taking an hour hit close to home.
A lot of wisdom in there, but my god, why the overengineering? Keep it simple! You can serve hundreds of thousands of users only using Python's standard library (http.server and sqlite3 with an in-memory dict for caching).
Fewer pieces of the puzzle will let you quickly identify bottlenecks, instead of trying to anticipate them before everything breaks.
Every hypothetical action he took was in reaction to a hypothetical scenario that actually happened (hypothetically). This is not overengineering, this is plain ol' engineering.
Luckily I have slow growth so I can afford taking one step at a time as a solo developer.