As detailed in Chapter 2, we can author workflows using code only, XAML only, or a combination of code and XAML (code-separation). State machine workflows are no different in this respect. We will build the workflows in this chapter using the code-separation approach, although any of the authoring modes would work.
Our workflow will support a bug-tracking application. Specifically, we will be tracking the life cycle of a software bug as the bug moves from an Open state to a Closed state. During its lifetime, a bug might also be in the Assigned, Resolved, and Deferred states.
Why use a state machine to model the workflow of bug fixes? Because is it impossible to model the choices a bug will need to reach a completed state. Think about the decision-making required at each step in a bug's life. A newly opened bug requires some evaluation. Is the bug a duplicate? Is the bug really a bug? Even if the bug really is a defect, not all defects move directly to someone's work...