`throws Exception`
everything else can always be thrown, and we should not put the burden on the caller to catch Throwable