Imagine, we have a software that lets you manage a zoo.
The designers of this software are having a “design” discussion:
-They all agree that the system should be capable to assign a type to each animal. The software will ship a hierarchy of out-of-the-box types. Users shall be able to extend this hierarchy to create their own types.
-They also agree that each animal should have a set of related attributes such as the sex, weight, healthiness, tiredness. The value of some of these attributes may change or be changed over time. When the user selects an animal all current values are presented so the user can get an overview about the current state of the animal.
-The current discussion is whether the set of related attributes should directly depend on the type of an animal or whether they should add another concept called Animal Description. The zoo manager could then define several animal descriptions, and assign them to individual animals, independent of their class. The concept of Animal Descriptions came up because they assumed that it would be too much effort to define to the set of relevant attributes for each individual animal.
-Steven is in favour of Animal Descriptions. He has read an interesting book about software concept and has learned to avoid overloaded and redundant concepts. He argues that Animal Type is a concept that mainly serves the purpose to classify animals according to a familiar taxonomy in order to search and filter for certain types.
The Animal Description concept, he argues, serves the purpose of defining the relevant information that should be displayed when user wants to be informed about a certain animal. Degining a set of attributes would overload the concept Animal Type. In many cases not all relevant attributes depend on the Animal Type. For instance a pregnant animal has special attributes of interest - or an animal born in the wild, or an animal that is part of a research project.
-Francis argues that the introduction of Animal Descriptions makes the software hard to understand. The user could always define a new type together with its set of attributes.
-Steven argues that in this case, the users would have to artificially extend the type hierarchy, leading to a degration of the original Animal Type concept.
-Francis also argues that search & filter are more general concepts not directly bound to types. Today, they may use animal types as criteria, but further criteria could be added. He also argues that there are some users for which the relevant attributes always depend on the type - a kind of simple use case.
-now Steven is unsure how to proceed. He still thinks that both should be separate concepts. Maybe the purpose of Animal Types is just to allow users classify animals in their prefered way. The point is that the relevant attributes may not directly depend on this classification. He is also unsure whether these concepts are even concepts in the sense of the book he has read, they do not seem to involve state and behavior but are rather concepts from the domain of conceptual modeling.
It seems like there is a trade off between optimization for simple use cases and optimization for complex use cases. If the use case is simple Animal Descriptions are redundant, if the use case is complex their absence leads to overloading of Animal Types.
Do you have any advise? Do you think that the alternatives are related to software concepts in the narrow sense discussed in this forum?