Currently the code that describes the state of the application (i.e., the model) is heavily intermixed with the code to make the GUI and render the scene. This makes it difficult to serialize/deserialize the current state (e.g., for saving and loading checkpoints) and to swap out the back end if necessary in the future.