From: John Morton <jwm@plain.co.nz>

Here's how I generally go about putting together a new workflow:

1. Draw up a state diagram with the nodes as states and the arcs as
   transitions. I usually do this on paper, then do a good copy in dia
   or some other diagram tool, so I have an image to go with the
   documentation. I usually spot several corner cases in the process.

2. Start by creating an example DCworkflow, rather than a new one, as
   it's faster to delete all the states and transitions than it is to
   create all the standard review_state variables.

3. In the permissions tab, select all the permissions that you want the
   workflow to govern.

4. Define any extra variables that you need.

5. Set up the states for your workflow, one for each node in your state
   diagram. Try to stick to the standard names for a publication
   workflow, as some badly behaved products have states like 'published'
   hardcoded into their searches (ie CalendarTool, last I looked). Set
   up the permissions on the states now, as well. I find that using
   acquisition for the site visible states, and using explicit
   permissions for the private and interim states works well. Reviewer
   roles should either have view permissions on every state or you
   should change the appropriate skins to take them somewhere sensible
   after a transition or they'll end up with an ugly access denied page
   after sending some content back to private state.

6. Set up any scripts that you'll need for transitions - pre and post
   transition scripts and ones to handle complex guard conditions. Just
   set up skeletons for now, if you haven't though through all the
   details.

7. Create your transitions from all the arcs on your state diagram. You
   should be able to pick the right destination state as all your states
   are already defined, and set up the right scripts to run, as you've
   defined those as well. It's worth noting that the guards are or'ed -
   if any guard matches, the transition can occur. You can specify more
   than one permission, role or expression by separating them with a
   semicolon.

That about covers it. By working in this order, you tend to step through
the creation process one tab at a time, rather than switching back and
forth. I find it tends to be faster and less confusing that way.
