I'll note that the practice of hard-coding paths is fairly common.
One common cause for this is programs that don't want to rely on PATH for calling exec. Systemd is a particularly interesting example. ExecStart and related arguments in systemd units are required to include full paths. I am very uncomfortable with the idea of setting policy here. I find I tend to agree with Daniel's position a bit more than Ian's. In particular, I definitely think that for closely-related versions of software, making sure the same versions are used is helpful. I've hurt myself more by having parts of something built in /usr/local than I have not being able to override things for debugging. However, I think that both parties have valid points. So, I'd be much more comfortable if we wanted to help make people more aware of the tradeoffs than I would setting policy.