  The development of a high performance PDE solver requires the combined
expertise of interdisciplinary teams with respect to application domain,
numerical scheme and low-level optimization. In this paper, we present how the
ExaHyPE engine facilitates the collaboration of such teams by isolating three
roles: application, algorithms, and optimization expert. We thus support team
members in letting them focus on their own area of expertise while integrating
their contributions into an HPC production code. Inspired by web application
development practices, ExaHyPE relies on two custom code generation modules,
the Toolkit and the Kernel Generator, which follow a Model-View-Controller
architectural pattern on top of the Jinja2 template engine library. Using
Jinja2's templates to abstract the critical components of the engine and
generated glue code, we isolate the application development from the engine.
The template language also allows us to define and use custom template macros
that isolate low-level optimizations from the numerical scheme described in the
templates. We present three use cases, each focusing on one of our user roles,
showcasing how the design of the code generation modules allows to easily
expand the solver schemes to support novel demands from applications, to add
optimized algorithmic schemes (with reduced memory footprint, e.g.), or provide
improved low-level SIMD vectorization support.
