Performance
When you build deep relationship trees—like nested folder structures, organization hierarchies, and projects shared with multiple teams—authorization checks can quickly become a performance bottleneck. In naive implementations, answering a question like "Can Alice view this file?" might require querying the database repeatedly to walk the relationship graph, leading to the dreaded N+1 query problem.
Read Scopes & Batching
When you build a dynamic user interface—such as a data grid or a dashboard—you often need to perform several authorization checks in a single page load. For example, you might need to list accessible documents, check if a user can edit a list of items, and explain the permission path for a specific resource.
Consistency
When relationship facts (tuples) are updated in your application, subsequent authorization checks need to know how to read the data. Should they read the live, absolute latest commits, or should they pin their reads to a specific point-in-time snapshot to ensure a coherent view of the graph?