The biggest challenge we faced was to define create a framework for running algorithms backwards and with different granularity while maximizing abstraction where possible (cf. section~\ref{sec:components}).
Multiple attempts of restructuring the architecture were needed to find a satisfactory solution.

The only thing we are not yet content with is the modularity aspect:
We chose to only present the user a single algorithm and our internal data structure is also strongly oriented towards the node placement algorithm by Brandes and Köpf.
It would be much more beautiful to
\begin{itemize}
    \item store the global variables of the specific algorithm, like \member{sink} and \member{root} in our case, in the global part of the \code{Memory} of the \code{Processor}.
    \item be able to load arbitrary algorithms at runtime.
\end{itemize}
We leave these features for future work to address.
