The checked exceptions were designed to be used for the recoverable conditions when an application can do something automatically to amend or work around the problem. In practice, it doesn't happen very often. Typically, when an exception is caught, the application logs the stack trace and aborts the current action. Based on the logged information, the application support team modifies the code to address the unaccounted-for condition or to prevent it from occurring in the future.
Each application is different, so best practices depend on the particular application requirements, design, and context. In general, it seems that there is an agreement in the development community to avoid using checked exceptions and to minimize their propagation in the application code. And here are a few other recommendations that have proved to be useful...