Around this comment, I'm also wondering whether we want to be a little more specific about the kind of initialization that the service is doing.  For *fail fast* behavior, I agree that it makes sense to, on the *main* thread, do the work of checking configuration variables and throwing on error.  Any expensive initialization that a service might need to do which could be done asynchronously -- e.g., what we do in *jvm-puppet* to fill up the JRubyPuppet pool -- would, however, seem better to do on a separate thread -- to allow for more parallel initialization of various services and quicker *boot to ready*.