code: public void waitForEntityStart() {
          if (log.isDebugEnabled()) {
              log.debug("waiting to ensure {} doesn't abort prematurely", this);
          }
          Duration startTimeout = getConfig(START_TIMEOUT);
          CountdownTimer timer = startTimeout.countdownTimer();
          boolean isRunningResult = false;
          long delay = 100;
          while (!isRunningResult && !timer.isExpired()) {
              Time.sleep(delay);
              try {
                  isRunningResult = driver.isRunning();
              } catch (Exception e) {
                  ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
                  // provide extra context info, as we're seeing this happen in strange circumstances
                  if (driver == null) {
                      throw new IllegalStateException(this +
                              " concurrent start and shutdown detected");
                  }
                  throw new IllegalStateException("Error detecting whether " + this +
                          " is running: " + e, e);
              }
              if (log.isDebugEnabled()) {
                  log.debug("checked {}, is running returned: {}", this, isRunningResult);
              }
              // slow exponential delay -- 1.1^N means after 40 tries and 50s elapsed, it reaches
              // the max of 5s intervals
              // TODO use Repeater
              delay = Math.min(delay * 11 / 10, 5000);
          }
          if (!isRunningResult) {
              String msg = "Software process entity " + this + " did not pass is-running " +
                      "check within the required " + startTimeout + " limit (" +
                      timer.getDurationElapsed().toStringRounded() + " elapsed)";
              log.warn(msg + " (throwing)");
              ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
              throw new IllegalStateException(msg);
          }
      }
docs: TODO Find a better way to detect early death of process.