Building and deploying monolithic applications is a thing of the past. Applications that are composed of several smaller, well-defined modules are a much better way to go. By hiding design and implementation details that are likely to change behind a stable API, each module is easier to maintain, test, and understand. This ultimately affects the overall maintainability and testability of the whole application. Unfortunately, as of Java 6, Java’s built-in facilities for modularity are severely limited. Imperative instructions are modularized into methods.