1. A method of creating a workflow procedure, comprising the steps of: defining software tools available to the procedure; user specifying desired input and output products based upon the available tools; recursively reasoning backwards from the output products to the input products to construct a topology of tasks and intermediate products required for the procedure; and executing the tasks to carry out the procedure.