I guarantee you that every single one of those enum cases exists, because there is a language/culture where there is a specific word to describe that relationship; not "because an architect gave up".
This is the end result of a bunch of switches and ifs in a ui where your model, in very specific circumstances, boils down to a few words that most people understand without computer programming experience.
In many cultures you address someone differently depending on whether they are younger or older than you.
> This enum could have been replaced with data model where you set of a bunch of relationship links:
How is that going to look on the user side? Most people just want to label their contact "Mom" and be done with it, they don't want to construct a family tree and say "this person is an older female parent" or maybe even "older elder female parent" if they have two moms.
You might think "well Mom is clearly an exception" but that's a very North America point of view. A lot of cultures would find it weird if you could label someone as 어머니 but not 장모 because they're equally important.
This enum could have been replaced with data model where you set of a bunch of relationship links:
Relationship:
- type: parent (up), child (down), sibling (sideways)
- gender: male, female, ...
I am confused by the "younger" denotation, because it seems strangely specific to just the last relationship, rather than all of the links.
If you have a lot of relations, it would be easier to just create a family tree then you can skip having to have multiple duplicate links being created for say each cousin.