= Rules of Thumb
:jbake-type: page
:jbake-status: published

== Configuration

* Configuration settings should have configurable defaults at the module, ear, server and cluster level (when clustering is added).
For example, security settings should be configurable on a per ejb, ejb jar, ear and server levels.
* Settings should have a smooth increase in complexity from very simple to complex.
For example, a cache setting could start with a simple max-size, and over time the user could increase the complexity by adding configuration for disk paging up to specification of complex flushing rules.

== Validation

* Applications should be fully validated before handing it off to the deployment system.
This vastly simplifies the deployment system because it assumes that an application is valid.
As a corollary, the deployment system should not be complicated with code that tests for invalid deployments or with code to print graceful error messages to a user.
