
The {NAME} package is a library to help decompose a complex problem into a set of simpler problems with managed dependencies. Two benefits of decomposing a problem using {NAME} are (1) increased flexibility because each simpler piece becomes an extension point that can be swapped out with different implementations and (2) easier to craft code because each piece is simpler, more focused and easier to test in isolation.  The counter-benefits to these are (1) a potential performance loss due to fragmentation of the over-all algorithm (e.g., several small loops instead of one large loop) and (2) a potential loss of visibility of the original, composite problem (since the code is scattered into multiple places).  Managing these trade-offs can result in application code that both performs well and supports rapid development and extensibility.
