Exceptions suck Error handling and reporting is something that has always bothered me. If you use a checked exception model, your code rapidly becomes very verbose and your interfaces very brittle, which can often push programmers toward very lazy exception handling. On the other hand, if you use an unchecked exception model, you are completely dependent on the developers of the code you call documenting every exception that can be thrown so you know what errors can occur (unless you want to go spelunking through their code anyway).