Out – of – box WF:
Some common standardized workflow, say, document approval , Leave request workflow etc. we can use this workflow directly by some configuration.
Custom Declarative WF:
Non – developers, create workflows by rehost workflow designer.
Custom Code WF:
Developers create workflow by code, usually in Visual Studio.
In my mind, most of the time, Workflow should be created by developers in Visual Studio and shipped for using as an Out of Box workflow. Non-developers will mess everything up without fully understand Workflow or training.