After building a real world table driven data pump application (see blog Table Driven Data Pump), thought recording a few lessons learned / notes before forgetting would be helpful.
Create job control as part of the overall application.
Watch out for Character Set issues.
Jobs should be able to re-use generic tasks from other jobs.
Jobs should allowing grouping sub-jobs.
Progress monitoring queries should be considered in advance.
Informational and error logging are very valuable in debugging.
Intermingling SQL tasks with Data Pump tasks is awesome.
Version control from a remote master for all aspects of the code is a must.
Standard user provisioning inclusion is helpful.
Consider any encryption issues (current and future) as part of the initial plan.