Why a Retrospective Sharing Model is Harder Than a Well-Built One

The typical problem doesn't surface in the first month. It emerges when a regional sales manager notices they can see an opportunity from a competitor's territory, or when a service rep opens a VIP customer's case that should only be accessible to a dedicated team. Both scenarios are a direct result of a reversed workflow: defining objects and fields first, and only at the very end asking who should actually see what.

The visibility model in Salesforce is constructed from layers that operate in concert, not independently: Organization-Wide Defaults (OWD) establish the most restrictive baseline, Role Hierarchy adds vertical access based on the managerial structure, Sharing Rules open up horizontal access based on business criteria, Teams and Manual Sharing address individual cases, and Apex Managed Sharing comes into play when the logic is too complex to be expressed using static rules. This order is crucial: every layer chosen prematurely creates technical debt that is difficult to untangle, because permissions already granted are perceived as an existing right.

Mapping the Layers and When Each is Appropriate

LayerWhat it SolvesWhen to Choose ItRisk of Incorrect Choice
OWDThe baseline: who can't see anything by defaultAlways defined, usually Private for sensitive objectsAn overly open OWD renders all other layers redundant
Role HierarchyVertical access for a manager to subordinates' informationWhen the management structure also reflects the need for data oversightA "political" hierarchy that doesn't align with actual data ownership
Sharing RulesOpening horizontal access based on fixed criteria (role, group, field value)A cross-hierarchy team needing access to the same record typeA multitude of overlapping rules making it hard to determine who opened what
Public GroupsGrouping users for sharing purposes, irrespective of the hierarchyWhen a workgroup doesn't align with a single organizational roleGroups that aren't updated when employees change roles
Account/Case TeamsDynamic access to a single record based on its team compositionWhen each customer or case has a unique, changing teamManual maintenance that is forgotten when the team changes
Territory ManagementAssigning access based on dynamic, multi-dimensional rulesVariable assignment based on several attributes simultaneously, parallel access for multiple repsMaintenance complexity not justified below a certain organizational threshold
Apex Managed SharingSharing derived from dynamic logic that cannot be expressed staticallyCriteria dependent on calculation, external events, or field combinationsUnmonitored code that continues to run after business requirements change

OWD: The Decision That Determines All Others

OWD isn't just a technical security setting—it's an organizational statement about who truly owns the information. The practical rule: set OWD based on the most stringent requirement truly needed, and then open it up using Sharing Rules, not the other way around. The reason is that expanding access specifically is easy and documented, whereas restricting existing access requires organizational communication, because users perceive a loss of access as an infringement, even if it's a correction of a historical error.

A point that often doesn't receive enough attention: OWD is set separately for each object, and dependent objects (Master-Detail) inherit visibility from the primary object. When building a new data model, examine the full dependency chain before setting OWD—otherwise, a "secondary" object mistakenly configured as Public can expose information from the primary object through it.

Role Hierarchy vs. Actual Management Structure

The most common mistake is duplicating the organizational chart into the Role Hierarchy as-is, without verifying if it accurately reflects the flow of data ownership. A regional manager needs to see their team's opportunities—that's a managerial role. But a CFO doesn't automatically need to see every service case just because they are high up in the overall hierarchy; if such a need exists, it should be addressed with a targeted Sharing Rule, not an overly broad hierarchy.

A sharing hierarchy separated from the organizational reporting hierarchy is a legitimate and often preferable solution, especially in organizations with a matrix structure where managerial reporting doesn't align with customer data ownership.

Decision Matrix: What Triggers Each Sharing Mechanism

  • Need varies by persistent, predictable role → Role Hierarchy.
  • Need is shared by a cross-functional workgroup → Public Group + Sharing Rule.
  • Need varies by team composition on a single record → Account Team or Case Team.
  • Need depends on a combination of dynamic conditions (geography, product, customer size) → Territory Management.
  • Need is derived from a calculation, external event, or condition that cannot be expressed statically → Apex Managed Sharing.
  • Need is a specific, temporary exception for a single record → Manual Sharing, with oversight and documentation.

This matrix should be drafted before working with the tools, not concurrently—otherwise, a mechanism will be chosen based on what the development team is familiar with, rather than what suits the requirement.

Illustrative Scenario: An Industrial Equipment Manufacturer with Three Sales Channels

Imagine a hypothetical industrial equipment manufacturer with roughly 180 Salesforce users, operating through three channels: direct sales by geographical region, sales through distributors, and sales to global strategic accounts managed concurrently by several reps in different countries.

An initial attempt to use only Role Hierarchy failed: a global strategic account didn't belong to a single regional hierarchy, and a rep in Germany couldn't see updates from their colleague in Brazil on the exact same account. The chosen solution combined three layers: OWD for Account and Opportunity was set to Private; Role Hierarchy was used for regular managerial access within each region; and for strategic accounts, a dynamic Account Team was configured to update automatically via Flow when the "Strategic Account Owner Region" field changed. Distributors received separate access through a Sharing Rule based on a dedicated Public Group, to prevent exposure to direct sales accounts.

The result: Sharing Recalculation time remained stable because most access is derived from a static structure (Role, Public Group), and only a minority of accounts—the strategic ones—depend on dynamic updates. The core lesson: there isn't one "correct" mechanism for the entire organization; rather, the mechanism should be tailored to the type of dependency for each sub-group of records. Further discussion on selecting integration patterns and a supportive data model is available in the CRM Architecture Guide.

Specific Risks in Visibility Planning and Preventive Actions

RiskHow It ManifestsPreventive Action
OWD "temporarily" open during pilot phaseThe openness persists after the system goes live into productionEstablish a predefined closure date and document it as a Go-Live item, not a recommendation
Multiple overlapping Sharing RulesIt's impossible to definitively know why a user sees a particular recordStandardized naming for each rule that includes the business reason, and periodic review of unused rules
Apex Sharing without load testingSharing calculation delays as data volume growsConduct load testing on Sharing Recalculation before doubling record volume in production
Sharing hierarchy copied from a political organizational hierarchyManagers see data they have no business need forSeparate the Role hierarchy for sharing purposes from the official reporting hierarchy when they are not identical
Manual Sharing accumulates without ownershipExceptional permissions remain active after the reason for sharing is no longer relevantImplement an expiration process or quarterly review of manual shares
User role change without Public Group updatesOld access remains open, and new access is missingIntegrate group and role updates as a single step in the employee status change process

Checklist Before Finalizing the Sharing Model

  • ☐ OWD configured for the most restrictive required state, not for development convenience
  • ☐ Dependency chain between Master-Detail objects reviewed against the primary object's OWD
  • ☐ Role Hierarchy reviewed against actual data ownership, not just an organizational chart
  • ☐ Each Sharing Rule has documented business reason and an owner responsible for its validity
  • ☐ Assessed whether Territory Management is actually needed or if it introduces unnecessary complexity
  • ☐ Apex Sharing code tested under realistic data volume, not just in a small Sandbox environment
  • ☐ Process in place for updating Public Groups and permissions upon role change or termination
  • ☐ Defined a periodic review cadence for Manual Sharing and inactive Sharing Rules
  • ☐ Impact of the sharing model on report performance and large batch runs analyzed
  • ☐ Response plan in place for discovering over-exposure in production

How to Know the Model Withstands Load

The first metric is Sharing Recalculation time after structural changes—a consistent increase over time indicates the model is approaching unmanageable complexity. The second metric is the number of support requests for "I lack access" versus "I have unnecessary access"—a sharp skew in one direction suggests that OWD or Sharing Rules are not properly calibrated. A third metric, particularly crucial in organizations with multiple systems, is the alignment between Salesforce permissions and permissions in synchronized systems—especially concerning event-driven integration architecture, as described in the Salesforce Event-Driven Architecture Guide.

In organizations operating multiple Orgs, the sharing model issue often intersects with the question of whether more than one production environment is even necessary—the full discussion can be found in Salesforce Single Org vs. Multi Org, and in selecting compatible integration patterns in the Salesforce Integration Patterns Guide.

Summary

A good sharing and visibility model isn't measured on launch day—it's measured as the organization grows, when a user changes roles, and when someone asks, "Why can't I see this?" The way to achieve this is not to pick one tool and apply it to everything, but rather to map each group of records according to its type of dependency—permanent, horizontal, dynamic, or exceptional—and choose the appropriate mechanism for each. A closed OWD by default, a Role Hierarchy reflecting true ownership, Sharing Rules with documented reasons, and Apex Sharing only when the logic justifies it—this is the combination that endures even when the organization doubles in volume and complexity.