Use nullability only when necessary
Now, I might look at this from a purist programmer's viewpoint, but this doesn't make sense to me. You see, with Booleans, for example, you don't need a "third case", that is, "true" and "false" are just enough to represent everything you need. Same with pretty much anything. My suggestion: use nullable fields when we are sure that we need that third, "empty" case.
I made some changes regarding this idea to some parts of the schemas, but carefully viewing each and every struct might be necessary to achieve this everywhere (for example, every boolean value). I'd like to take this task by myself.
One more thing related to this: you see, many programming languages initialize variables to their "zero" values, such as Java, C#, Go. Such as numbers become 0
, Booleans become false
, and so on. With that in mind, it would be better to define default values of things (especially Booleans with this change, if it happens) carefully, and make the zero values most useful, which could mean changing the names of some fields to opposite to reflect that (assuming true
makes the most sense for field X, we should make sure the name of X is actually NOT X in meaning).