Are OnCollisionStay and OnTriggerStay Reliable?

They work sometimes, other times, they don’t.
If the object doesn’t move, they are only called once.
If the object is moving, sometimes it registers, sometimes it doesn’t.
People always discourage using them.

Do they actually work? Are they intended to work this way?

Apparently, they only work when the object is moving.