What the feature mojom object does is basically it compiles in a FeatureList check to turn on or off the serialization check. The Send Validation tag is associated with the message, and all parameters sent into the message are validated on serialization if
the Feature is enabled.
What I observed when looking through deserialization errors are that most of them pop up on a particular message, and not on a particular struct across many messages. There's usually some niche untested scenario that resulted in the developer making some sort
of mistake or there's some sort of bad actor sending bad messages.
Serialization checks do have a performance and code size trade off. It's good to be as strategic as possible when adding them, but some bugs are challenging to solve without them.