When I'm writing shell scripts myself I often find it hard to decide what output and which messages I should present on stderr, or if I should bother at all.
O silêncio é de ouro. Não sai nada se estiver tudo bem.
I'd like to know about good practice: When is redirecting some message to stderr called for and reasonable, and when not?
A maneira mais fácil de separar o stderr do stdout: imagine que toda a saída do seu script será redirecionada para outro comando via pipe. Nesse caso, você deve manter todas as notificações no stderr, pois essas informações inesperadas no stdout podem quebrar a sequência do pipe.
Também às vezes em canos como este:
command1 | while read line ; do command2 ; done | command3
você precisa passar algo de command2
para a saída dos usuários. A maneira mais fácil sem arquivos temporários é stderr.