And we have two ways to do that: We can use maybeDeferred to handle a function that sometimes returns a deferred and other times returns a regular value (or throws an exception), or We can pre-fire our own deferreds, using defer.succeed and defer.fail, so our ???semi- synchronous??? functions always return a deferred no matter what.