sublyer:
Quando você diz "Sempre deixe as exceções subirem nas camadas o máximo possivel. ", você quer dizer que tenho que propagar as excessões até aonde foi feita a chamada do método que fez com que a excessão fosse lançada, correto?
Flwww
IMHO, se vc tem exceptions, vc tem que trata-las de forma adequada ao teu modelo.
O que fazer depende da tua aplicação, mas em algum momento um erro significa que vc tem que desfazer algo, fechar algo que esta aberto, liberar um recurso ou tentar de novo mais tarde.
O motivo pelo qual ocorreu o erro deve ser identificado sim, para isso vc tem extratégias de logging, paginas/telas de erro, testes unitários, etc. Pense em cada erro e o seu motivo. Alguns erros vc vai criar um mecanismo adequado para tratar dele, outros podem ser erros inesperados, como RuntimeExceptions vindo de lugares obscuros (aquele array que vc pega um indice sem verificar os limites, por exemplo) e vc pode identificar que tem que trata-los também. Como vê, o assunto é complexo.
Perceba que a frase tem a palavra ‘possivel’, logo não é a ultima cada sempre, pode ter uma intermediaria 