% -*- TeX-master: "finaler.tex" -*-

\label{sec:evaluation}

We now reflect on our project, and our project reflects back.

Our greatest success was our ability to maintain the generality,
dynamic polymorphism, and decoupling that we set out to achieve with
our design philosophy.  The property system proved invaluable in many
aspects of the system, whereas the alternative of managing properties
at compile-time would have greatly complicated much of our code and
led to a great deal of coupling.  The interaction system and abstract
gizmo proved highly general, able to easily capture the semantics of
the \Gizmoball standard gizmos (and, we believe, all of the gizmos
that would be necessary for many other diverse systems).

However, not all of our components were able to maintain our goal of
component simplicity.  The game board, for example, succeeds in
presenting a simple interface, but its inner workings are very
complex.  The user interface also grew into a relatively hairy mass
once within the abstractions we defined in our overall design (the
property table is particularly notable for its hairiness).  However,
despite this, we still maintained a great deal of isolation between
our modules, thus keeping the hairiness of these modules well
contained.

Our quest for generality occasionally led us down stray paths.  The
greatest example of this was our original collision system, which was
capable of expressing any collision pair in a way that allowed a
gizmo's collision abilities to be deduced without it ever actually
being explicitly declared.  However, this meant that it was also
non-obvious to us what was going on in the collision system.  Once
this was replaced with the new interaction system, it became quite
obvious which handlers took care of which gizmo interactions.
