title: State-machine : How to change state without external event (transient state)?
body: <p>The scenario:<br>
  I have a simple state machine:  </p>
  
  <p><strong>Happy path:</strong>  </p>
  
  <pre><code>Uninitialized-&gt;Initialized-&gt;InProgress-&gt;Done
  </code></pre>
  
  <p><strong>Unhappy path:</strong>  </p>
  
  <pre><code>Uninitialized-&gt;Initialized-&gt;Error
  </code></pre>
  
  <p>Simply put, I need to cause a transition (either into InProgress or in Error state) <strong>without an external event/trigger</strong>. I.e. Initialized state should immediately result in one of those states.</p>
  
  <p>Questions:  </p>
  
  <ol>
  <li>Is it OK to cause state transition from within <strong>Initialized.Enter()</strong> ?  </li>
  <li>I could use <strong>state guards</strong> to do this, but I'd rather not have non-trivial logic in the state guard (and initialization can very well be complex).</li>
  <li>If it is NOT OK, how can I do it differently?</li>
  <li>Should I just take this decision out of he FSM all together and have some other component cause the appropriate transition? But then, wouldn't I still have to call that external component from within <strong>Initialized.Enter()</strong> ? so it solves nothing?</li>
  </ol>