Many parts of an interface do not lend themselves easily to modgits. Modgits are insufficient when there isn't a homogeneous activity you want to do with a data object, such as with simulated experiment tests. A test could be nearly anything, from monitoring the content of volcanic gases to taking blood and putting it under a microscope. Tests are model objects with different results that are based on which scenario the student is currently working on. This is a semantic structure found in most domains. However, the look of the test is extremely varied; putting a probe into a fumarole is much different than looking in a microscope. Every test looks and feels different, and if there were a test modgit, unique modgit variables would have to be added for each application. We have failed to write a generalized tool if we write special-case modgits that support these specific interactions.
Besides tests, there are several other kinds of interactions with INDIE that depend on the state of some variable but would be hard to characterize identically from project to project, such as showing introductions and wrap-ups. Rembrandt shows a television screen and a large video, while Immunology has a briefing session with a video, ASK questions, and summary points.
However, these different types of interactions are all variations on normal widgets or modgits with conditional behavior of some sort based on the state of the model. For these and other hard-to-modgitize interactions, authors depend on (and find useful) combinations of widgets, modgits, and conditional triggers. This approach is discussed in the next chapter.