Only thing I took issue with was "Instead, explicitly define your servers in your configurations for as long as you can."
Maybe you can get away with this for a small scale deployment, but "as long as you can" sends a bit too mixed of a message. You should only defer a service discovery implementation until you get to the point where you have more than one read path in your stack.
IMO, as soon as you go from load balancer -> app -> cache -> database to having a services layer you should start thinking service discovery.
The simplest bandaid is to leverage DNS as much as possible until you get even bigger, and use static CNAMEs.