

# Best practices
<a name="best-practices"></a>

Analyze your most-used components first. In a distributed system, in-house shared packages often have many components depending on them. A transitive dependency conflict in one of these shared packages can block progress across every component that uses it.

Run the transitive dependency analysis on your application's most-used, customer-facing components first. Analyzing several complex components surfaces the shared lower-level dependencies that block the most other work. Migrating those shared dependencies first unblocks the largest amount of progress for the least effort.

Treat every pinned version as work you still owe. Pinning unblocks a release, but it leaves the conflict in place. Record a revisit date when you pin. Automate reanalysis in your build pipeline. Add the dependency analysis script as a CI step that runs on pull requests touching package configuration files. Automated checks surface new conflicts before they reach the main branch.

Set version-range policies for shared packages. Define whether shared packages accept minor-version ranges or require exact pins. A written policy reduces ad-hoc decisions during migrations and makes pinning exceptions visible.

Document your dependency governance model. Record who owns each shared package, who approves version bumps, and how cross-team migrations are coordinated. This removes ambiguity when multiple teams share the same dependency tree.