Walk me through how a user ends up with access to a record.
Testing How you think about the model — as a floor that gets raised, or as a list of features to recite.
Organisation-wide defaults set the floor. If Account is Private, nobody sees anybody else's Accounts to start with, and then access gets added on top: the role hierarchy gives managers their team's records, sharing rules open records up to a group or role, manual sharing handles the one-off case, and Apex sharing covers what none of those can express. Nothing in that list ever takes access away — it only widens.
I hold it as one rule: the org-wide default is the only thing that
restricts, everything else grants. That is why the answer to "why can this
person see it" is a hunt, and why the answer to "why can they not" is
usually the default doing exactly what it was set to. Two parts catch
people. Grant Access Using Hierarchies is a per-object setting and it is
off for some standard objects, so a manager is not automatically seeing
everything below them. And a Master-Detail child has no default of its own
at all — it is Controlled by Parent, so its access is whatever the parent's
is, and changing the child's sharing means changing the parent.
They'll ask next What happens if you tighten the org-wide default later?
Salesforce recalculates sharing across the object, which on a large org is not instant and is not something to run at month end.
They'll ask next Which is evaluated first, a sharing rule or the hierarchy?
Neither, in the sense that matters — access is the union of all of them. There is no precedence to work out, only whether any one of them grants it.