  We discuss the design decisions, design alternatives and rationale behind the
third generation of Peano, a framework for dynamically adaptive Cartesian
meshes derived from spacetrees. Peano ties the mesh traversal to the mesh
storage and supports only one element-wise traversal order resulting from
space-filling curves. The user is not free to choose a traversal order herself.
The traversal can exploit regular grid subregions and shared memory as well as
distributed memory systems with almost no modifications to a serial application
code. We formalize the software design by means of two interacting
automata---one automaton for the multiscale grid traversal and one for the
application-specific algorithmic steps. This yields a callback-based
programming paradigm. We further sketch the supported application types and the
two data storage schemes realized, before we detail high-performance computing
aspects and lessons learned. Special emphasis is put on observations regarding
the used programming idioms and algorithmic concepts. This transforms our
report from a "one way to implement things" code description into a generic
discussion and summary of some alternatives, rationale and design decisions to
be made for any tree-based adaptive mesh refinement software.
