Skip to main content
Interactive PlaybookGraph Algorithms · Data Engineering · AI

How to Find the Most Important Nodes in a Network

Understand how Google, recommendation engines, social networks, dependency analysis systems, and AI agents identify the most influential nodes in a complex graph — using PageRank applied to a curated npm dependency graph.

~25 min read
58 packages · 59 dependencies
Converged in 17 iterations
Live algorithm · Real dataset
What PageRank is and why Google invented it
How rank propagates through a real dependency graph
Which packages rank highest in our curated dependency graph — and why
How to implement PageRank in a production system
Where graph algorithms meet AI agents
The business value of finding important nodes

Section 01 — The Problem

How do you find what actually matters in a sea of connections?

The obvious answer is usually wrong. Here's why naive approaches fail — and why this problem needed a fundamentally different solution.

The Web

80 billion web pages

The Question

Which page deserves to be at the top of Google results?

Naive Answer

Count how many times the word appears on the page.

Why it breaks

Gaming keywords is trivial. A page about dogs that mentions "cat food" 500 times would rank first.

npm Ecosystem

2.5 million packages

The Question

Which packages are so critical that breaking them crashes half the internet?

Naive Answer

Sort by weekly downloads.

Why it breaks

lodash has 48M downloads/week but zero packages depend on lodash. If it vanished, zero apps break.

Microservices

500 services in a company

The Question

Which service, if it goes down, takes down the most others?

Naive Answer

Find the service with the most API calls.

Why it breaks

Traffic volume is not the same as dependency. A config service may serve 10 requests/sec but everything depends on it.

The Key Insight

Importance is not a property of a node. It's a property of its position in the network.

A page trusted by other trustworthy pages is important. A package depended on by critical packages is critical. A service that every other service calls is essential. The connections define the importance — not the node's own attributes.

Web PageRank

A page is important if important pages link to it.

Dependency Rank

A package is critical if critical packages depend on it.

Service Rank

A service is essential if essential services call it.

Section 02 — The Dataset

Curated npm dependency graph

We curated a dependency graph from widely downloaded npm packages and mapped their real dependency relationships — a representative snapshot of how foundational JavaScript packages interconnect.

Packages (nodes)

58

Dependencies (edges)

59

Ecosystem

npm / Node.js

Data source

npm registry

Damping factor

0.85

Algorithm

Power iteration

About this dataset

We curated 58 packages from the npm registry — spanning foundational utilities (lodash, ms, semver), build tools (eslint, webpack, jest), React ecosystem packages, and HTTP clients.

Each of the 59 edges represents a real package.json dependency relationship, verified against the npm registry.

The graph is directed: an edge A → B means “package A depends on package B.” B receives rank because A vouches for it by depending on it.

Packages that are depended upon by many important packages — regardless of their own download count — will emerge with the highest PageRank scores.

Dataset era note: This snapshot reflects React 18.x era dependency relationships, when loose-envify was commonly present in React application dependency trees. React 19 removed this dependency. The goal is to demonstrate how PageRank behaves on real dependency structures — specific package relationships evolve over time while the underlying graph principles remain the same.

Section 03 — Data Processing

From raw package data to ranked results

A four-step pipeline transforms the npm registry into a ranked graph. Here's exactly what happens under the hood.

01

Raw Dataset

npm registry package metadata — name, version, and dependency lists from package.json for the top 200+ packages by weekly downloads.

{ "name": "glob", "dependencies": {
  "inflight": "^1.0.4",
  "minimatch": "3",
  "once": "^1.3.0"
}}
02

Graph Construction

Each package becomes a node. Each dependency relationship becomes a directed edge (A → B means "A depends on B"). Isolated packages are included as dangling nodes.

nodes = ["glob", "inflight", "minimatch", ...]
edges = [
  { source: "glob", target: "inflight" },
  { source: "glob", target: "minimatch" },
]
03

PageRank Computation

Power iteration: start with equal rank for all nodes, then repeatedly redistribute rank through edges until scores converge (Δ < 1×10⁻⁸).

// Converged in 17 iterations
for (let i = 0; i < 100; i++) {
  for (const node of nodes) {
    rank[node] = (1 - d) / N +
      d * Σ(rank[v] / out(v))
  }
  if (delta < 1e-8) break
}
04

Results

Each node receives a rank score proportional to how many important nodes depend on it, directly or transitively. Scores sum to 1.0 across all nodes.

js-tokens:      0.0472  ← #1 (sole dep of loose-envify)
loose-envify:   0.0434  ← #2 (React ecosystem glue)
ms:             0.0357  ← #3 (sole dep of debug)
wrappy:         0.0332  ← #4 (callback wrapper)
color-name:     0.0318  ← #5 (sole dep of color-convert)

Section 04 — Network Visualization

Loading network visualization…

Loading animation…

Section 06 — Results

The highest-ranked packages in our dependency graph

These are the real computed results from running PageRank on our npm dependency graph. The rankings may surprise you.

The counterintuitive finding

The most famous packages — React, Next.js, Express — are NOT the top-ranked. The winners are invisible leaf utilities: js-tokens, ms, wrappy, color-name. They rank highest not because many things depend on them, but because their sole consumer passes 100% of its rank to them with no dilution. Exclusivity beats raw popularity.

RankPackagePageRank scoreRelative
#1js-tokens4.7180%
100%
#2loose-envify4.3374%
92%
#3ms3.5718%
76%
#4wrappy3.3200%
70%
#5color-name3.1804%
67%
#6debug2.9889%
63%
#7mime-db2.5991%
55%
#8glob2.5945%
55%
#9has-flag2.5284%
54%
#10color-convert2.5284%
54%
#11brace-expansion2.3693%
50%
#12delayed-stream2.2265%
47%
#13isexe2.1562%
46%
#14shebang-regex2.1562%
46%
#15balanced-match2.0382%
43%

What we learned from the data

js-tokens#1

Ranks #1 because loose-envify — its sole dependent — has only ONE outgoing edge, passing 100% of its rank to js-tokens. loose-envify is the lifeblood of React; therefore js-tokens is too. Exclusivity wins over popularity.

loose-envify#2

react, react-dom, scheduler, and prop-types all depend on loose-envify. It replaces process.env references during React builds. 4 major packages point to it with significant rank each.

ms#3

debug's sole outgoing edge points to ms. Every rank unit debug earns flows entirely to ms. debug is depended on by eslint, webpack, express, and follow-redirects — all feeding into ms.

wrappy#4

Gets rank from once (which gets rank from glob) and also directly from inflight (which also gets rank from glob). A 3-line callback wrapper that sits at the terminus of the entire file-system toolchain.

color-name#5

color-convert is its sole dependent and passes 100% of its rank. The chain: eslint/jest/webpack → chalk → ansi-styles → color-convert → color-name. Four major tools elevate a tiny color lookup table.

debug#6

Pointed to by eslint (1/5 share), webpack (1/4 share), express (1/2 share), and follow-redirects (sole dependency). With one outgoing edge to ms, debug concentrates all received rank.

Section 07 — Observations

What surprised us

Running PageRank on a real dependency graph surfaces patterns that are easy to miss when you only look at download counts or star counts.

React Wasn't #1

In our curated dependency graph, React itself was not the highest-ranked node. The top positions went to small utility packages that sit at the end of long, concentrated dependency chains — packages most developers have never heard of.

Small Packages Matter

Tiny utility packages can become structurally important when many critical dependencies flow through them. A 200-line tokenizer can outrank a framework used by millions when it sits at the terminus of an undiluted rank chain.

Dependency Structure Matters

A package's importance depends not only on who depends on it, but also on how influence flows through the network. A package with four major consumers can rank lower than one with a single consumer — if that single consumer concentrates all of its rank on one target.

Section 07 — Explain Like I'm a Student

PageRank in plain English

No math. No jargon. Just the idea.

Analogy 1: School votes

Imagine your school is holding an election for “most helpful student.” Instead of a simple vote, you use a special rule:

Your vote is worth more if you are considered helpful.

So if the three smartest kids in school all say “Alex helps me the most,” Alex wins — even if fewer people voted for them. Because the quality of who votes matters, not just the count.

PageRank does the exact same thing with websites, packages, and services. If trusted nodes point to you, you become trusted.

Analogy 2: The recommendation chain

Imagine 1,000 people are randomly surfing the internet. Each person clicks links and jumps from page to page. At any moment, 85% of the time they click a link. 15% of the time they randomly go somewhere new.

After millions of clicks, some pages end up visited much more often than others. Not because they were popular to begin with — but because popular pages linked to them.

PageRank score = the probability a random surfer lands on your page.

In the npm world

Instead of clicking links, imagine a developer randomly installing packages. If they install jest, jest automatically installs glob and chalk. Then glob automatically installs minimatch. Then minimatch installs brace-expansion

If you tracked this chain across millions of developers, you'd find that some tiny packages get installed on almost every computer. Those packages are the most critical. That's exactly what PageRank reveals.

“Being linked to by something important makes you important. Importance flows through the network like water flows downhill — following connections, accumulating at the bottom.”

Section 08 — Explain Like I'm an Engineer

The technical model

Now that we have the intuition, here are the technical concepts that make PageRank a rigorous algorithm rather than just a voting heuristic.

Graph

A data structure consisting of nodes (vertices) and edges (connections between them). Can be directed (edges have direction, like A → B) or undirected (bidirectional).

Example

A package dependency graph is a directed graph: packages are nodes, dependency relationships are directed edges.

Directed Edge (A → B)

An edge from node A to node B, meaning A links to B. In PageRank, this means "A endorses B" or "A depends on B." The direction determines how rank flows.

Example

jest → glob means jest depends on glob. glob receives a portion of jest's rank.

Rank Distribution

Each node distributes its rank equally across all its outgoing edges. A node with 4 outgoing edges gives each target 1/4 of its rank per iteration.

Example

eslint has 5 outgoing edges (debug, glob, minimatch, chalk, semver). Each receives 1/5 of eslint's rank per iteration.

Dangling Nodes

Nodes with no outgoing edges. They absorb rank but have nowhere to send it. In the standard PageRank formula, dangling node rank is redistributed uniformly to all nodes.

Example

js-tokens, ms, wrappy have no outgoing edges. Their accumulated rank is broadcast back to prevent it leaking from the system.

Damping Factor (d = 0.85)

Models the probability that a random walker follows a link (85%) vs teleports randomly (15%). Prevents rank accumulation in closed cycles and ensures convergence.

Example

PR(u) = (1 − 0.85) / N + 0.85 × Σ(PR(v) / out(v)). The 0.15/N term ensures every node has a nonzero rank floor.

Power Iteration

The iterative algorithm that computes PageRank. Start with uniform ranks, apply the formula repeatedly until the difference between iterations falls below a threshold (convergence).

Example

Our npm graph converged in 17 iterations with Δ < 1×10⁻⁸ between consecutive rank vectors.

Computational complexity

Time per iteration

O(N + E)

N nodes, E edges. Linear in graph size.

Total iterations

O(log(1/ε))

ε = convergence threshold. Usually 15–100 iterations.

Space

O(N + E)

Store the graph adjacency + two rank vectors.

Section 09 — The Formula

The math, demystified

The formula looks intimidating at first. Once you understand the intuition, it's straightforward. You've already learned all the concepts — now they click together.

PageRank Formula

PR(u) = (1 - d) / N + d × Σ( PR(v) / |out(v)| )

for all v ∈ in(u)

PR(u)

PageRank of node u

The output — the importance score we're computing for this node. Ranges from 0 to 1. All node scores sum to approximately 1.

d = 0.85

Damping factor

Probability a random walker follows a link. 0.85 is the standard value (Google's original paper). 1-d = 0.15 is the probability of teleporting randomly.

N

Total number of nodes

The size of the graph. Used to compute the base rank that every node starts with via random teleportation. Ensures every node has a nonzero minimum rank.

PR(v)

PageRank of an incoming neighbor

For every node v that links to u, we add v's rank contribution. High-rank v contributes more rank to u than low-rank v.

|out(v)|

Outgoing edge count of v

v divides its rank evenly among all its outgoing edges. If eslint depends on 5 packages, each gets 1/5 of eslint's rank. Prevents "vote buying" by just adding more links.

Σ ( ... ) for v ∈ in(u)

Sum over all incoming neighbors

We add up the rank contributions from every node that points to u. More high-quality incoming links = higher total rank.

pagerank.ts — core loop
// Redistribute rank across all nodes
for (const node of nodes) {
  // Σ(PR(v) / |out(v)|) for all v pointing to node
  const linkVote = inEdges[node].reduce((sum, src) => {
    return sum + ranks[src] / outDegree[src]
  }, 0)

  // Dangling nodes (no outgoing edges) spread rank uniformly
  const danglingContrib = danglingSum / N

  // PageRank formula: teleportation + link votes
  newRanks[node] =
    (1 - d) / N                 // teleportation floor
    + d * (linkVote + danglingContrib) // link contribution
}

Section 10 — Real World Applications

PageRank is everywhere

The algorithm that started as a way to rank web pages now powers search engines, recommendation systems, network investigation, and AI agents. The core idea — importance flows through connections — turns out to be universally useful.

Google Search

Problem

Ranking billions of web pages

How PageRank helps

A page trusted by other trusted pages ranks higher. Links are votes; important pages give more valuable votes.

Result: The original PageRank patent. Still the foundation of Google's ranking system 25 years later.

Dependency Analysis

Problem

Finding critical services & packages

How PageRank helps

In a microservices graph, services that many other services depend on (directly or transitively) rank highest. Rank = blast radius.

Result: Identify which services require the highest SLA, the most rigorous testing, and the most careful deploys.

Recommendation Systems

Problem

Finding influential products & content

How PageRank helps

Build a graph of co-purchases or co-views. Products bought alongside many high-popularity products inherit authority.

Result: Amazon, Netflix, and Spotify use graph-based ranking to surface less obvious but highly relevant recommendations.

Network Investigation

Problem

Surfacing suspicious actors in transaction graphs

How PageRank helps

Build a graph of accounts connected by transactions. Accounts that cluster with known suspicious nodes inherit an elevated risk score.

Result: Graph-based ranking techniques can support fraud investigation and network analysis by surfacing accounts with high proximity to known risk patterns.

AI Agents & Knowledge Graphs

Problem

Navigating complex information structures

How PageRank helps

An AI agent can use PageRank over a knowledge graph to identify which concepts are most central — and prioritize reasoning about them.

Result: Graph-augmented RAG systems use node importance scores to decide which chunks to retrieve and which relationships to reason over.

Section 11 — Production Architecture

How we would build this at scale

Running PageRank on 58 nodes is trivial. Running it on the full npm registry (2.5 million packages, 15 million edges) requires a real distributed system.

Data SourcesRaw graph data from multiple sources
npm registry APIGitHub dependency graphCustom git repo scanner
Ingestion PipelineEvent-driven ingestion with backpressure
Apache Kafka topicsStructured streamingSchema validation
Graph StorageNative graph database for efficient traversal
Neo4j / TigerGraphGraph partitioningIncremental updates
Ranking EngineHorizontally scalable graph processing
Apache Spark GraphXDistributed PageRankDelta convergence check
Results CacheSub-millisecond rank lookups
Redis sorted setsMaterialized viewsIncremental recompute
API LayerTyped, versioned API for consumers
GraphQL APIREST endpointsWebhook notifications
AI Explanation LayerLLM-powered plain-English insights
Claude / GPT-4 integrationRank change summarizationAlert generation

Engineering concerns at scale

Scale

The npm graph has 2.5M+ packages and 15M+ dependency edges. Naive single-machine PageRank fails. Apache Spark GraphX can distribute the computation across a cluster, processing the full graph in minutes.

Freshness

Packages are published and updated constantly. A streaming ingestion pipeline (Kafka) captures new dependencies in real time. Incremental PageRank recomputes only affected subgraphs instead of full reprocessing.

Consistency

Graph databases like Neo4j offer ACID transactions. A dependency added midway through a PageRank run should not corrupt the result. Run PageRank on a snapshot — a consistent point-in-time view of the graph.

Observability

Instrument every stage: Kafka consumer lag (ingestion health), Spark job runtime (computation health), Redis hit rate (cache health). Rank shift anomalies (e.g., a top-5 package dropping) trigger automated alerts.

Kubernetes deployment

Spark workers as K8s pods (auto-scaled). Neo4j as a StatefulSet with PVCs. Kafka as a managed service (Confluent Cloud). Redis as a sidecar cache. The ranking job runs as a CronJob — nightly full recompute, hourly incremental.

Section 12 — How AI Can Use This

Graph algorithms + AI: a powerful combination

PageRank alone is deterministic — it ranks, but it doesn't explain. AI alone is capable but can get lost in large graphs — it needs guidance on where to look. Together, they are more powerful than either alone.

AI Incident Investigator

Root cause analysis via dependency rank

When a service outage occurs, an AI agent traverses the dependency graph using PageRank scores to prioritize which services to investigate first. High-rank services are investigated before low-rank ones — because a failing high-rank service explains more downstream failures.

Example

Service X is down. PageRank says X depends on the #2 ranked config service. The AI investigator checks the config service first — and finds the root cause in 30 seconds instead of 30 minutes.

Root cause analysisSREOn-call automation

AI Dependency Analyzer

Blast radius prediction for package updates

Before upgrading a package, an AI agent ranks all downstream dependencies by PageRank and presents a blast radius report: "Upgrading X will affect services A, B, C — where A is critical (#2 rank) and B is low-risk (#48 rank). Recommend: upgrade in canary environment first."

Example

Security patch for lodash. AI agent: "lodash ranks #23 in your system. 147 services depend on it directly or transitively. High-risk services: payment-api (#1), auth-service (#4)."

Security patchingChange managementRisk scoring

AI Knowledge Graph Assistant

Intelligent navigation of concept graphs

In a knowledge base, documents are nodes and citations/references are edges. PageRank identifies the most central concepts. An AI retrieval system uses PageRank to weight which documents to retrieve first — giving preference to foundational, highly-cited sources.

Example

A user asks "explain transformer attention." The RAG system retrieves the Attention Is All You Need paper (PageRank #1 in the ML graph) before secondary papers, giving the LLM the most authoritative source first.

Graph RAGKnowledge managementCitation ranking

AI Recommendation Engine

Graph-based product and content ranking

Build a co-purchase graph (products bought together). Run PageRank. Products with high rank are not just popular — they're foundational: everything is bought alongside them. An AI recommendation engine uses rank to surface relevant cross-sells even for niche products.

Example

A user buys a niche IoT sensor. The graph shows the sensor co-occurs with "Raspberry Pi" (#3 rank). The AI recommends the Pi — not because it's popular, but because it's central to the subgraph of IoT products.

E-commercePersonalizationGraph ML

PageRank provides

Structure-aware importance scores from graph topology

AI provides

Natural language understanding, reasoning, and explanation

Together they enable

Systems that know WHERE to look AND can explain WHAT they found

Section 13 — Business Value

What this unlocks for your business

Graph ranking is not just an academic exercise. It produces concrete, measurable improvements across engineering and product.

↓ 60%

Reduced MTTR

Mean time to root-cause resolution drops when on-call engineers know which services to check first. PageRank-guided incident investigation prioritizes the highest-impact nodes automatically.

Applies to: SRE teams, platform engineers

↑ 35%

Better recommendations

Graph-based recommendation outperforms simple collaborative filtering for long-tail items. Products that rank highly in the co-purchase graph get recommended to users who would never have discovered them otherwise.

Applies to: E-commerce, media platforms

↓ 80%

Faster release confidence

Before deploying a change, rank the affected dependency subgraph. Automatically flag changes that touch high-rank nodes for mandatory canary deployment, blue-green rollout, or additional review.

Applies to: DevOps, release engineering

↑ Quality

More relevant search

Any search system benefits from a graph-aware ranking layer. Documents, products, or code modules that are more central in the reference graph rank above less-connected alternatives with the same keyword density.

Applies to: Internal tools, knowledge bases

Smarter AI

More grounded AI reasoning

LLMs hallucinate when they don't know what's important. Graph-ranked context retrieval (GraphRAG) gives the model the most authoritative sources first, reducing hallucination and improving factual accuracy.

Applies to: AI product teams

Want to build this for your system?

We build dependency analysis systems, graph-augmented AI agents, and distributed ranking engines. Book a call to discuss your specific use case.

Start a conversation

Try It Yourself — PHP / Composer

Apply this to the PHP ecosystem

The same algorithm, the same code, a completely different graph. The PHP Composer ecosystem (Packagist) is a perfect next dataset — larger, more complex, with interesting predictions to verify.

01

Fetch packages from Packagist

// GET https://packagist.org/packages/{vendor}/{name}.json
const pkg = await fetch(
  'https://packagist.org/packages/symfony/http-kernel.json'
).then(r => r.json())

const deps = pkg.package.versions['dev-main'].require
// { "symfony/event-dispatcher": "^6.0", ... }
02

Build the directed graph

nodes = ["symfony/http-kernel", "symfony/event-dispatcher", ...]
edges = [
  { source: "symfony/http-kernel",
    target: "symfony/event-dispatcher" },
  { source: "laravel/framework",
    target: "symfony/http-kernel" },
]
03

Run the same PageRank

// Identical algorithm — just a different graph
const { ranks, convergedAt } = computePageRank(
  nodes, edges, { dampingFactor: 0.85 }
)
// Converges in ~20–30 iterations
04

Expected winners

symfony/polyfill-mbstring    ← #1 est.
symfony/polyfill-intl-idn   ← #2 est.
psr/container               ← #3 est.
psr/http-message            ← #4 est.
symfony/event-dispatcher    ← #5 est.
// PSR interfaces win: they are the sole
// dependency of dozens of high-rank packages

Predictions before you run it

PSR interfaces will dominate

psr/container, psr/http-message, psr/log are depended on exclusively by many high-rank packages. The interface packages have no outgoing edges — pure sinks that accumulate rank from the entire ecosystem.

symfony/polyfill-* packages will rank extremely high

Polyfill packages are depended on by nearly every Symfony component, and Symfony components are depended on by Laravel, Drupal, Magento, and thousands of other packages. Wide reach + leaf position = top rank.

Laravel vs Symfony

laravel/framework will rank lower than individual symfony/* packages, because Laravel depends on many Symfony packages (distributing rank 40+ ways), while Symfony packages receive concentrated rank.

guzzlehttp/guzzle ranks below its dependencies

guzzlehttp/promises and guzzlehttp/psr7 will rank higher than Guzzle itself — the same pattern as glob in npm. The dependencies of a major package often outrank the package itself.

Want to build this analysis?

We can build a full dependency intelligence platform — npm, Composer, PyPI, Maven — with live registry ingestion, scheduled recomputation, and an API for your tools to query.

Let's build it

References & Further Reading

Go deeper

Where this playbook ends, these resources begin. From the original 1999 paper to modern production implementations.

Verify it yourself

The key claim — that loose-envify depends solely on js-tokens — is verifiable in under a minute.

# create a fresh project and install React 18

mkdir test-react && cd test-react

npm init -y

npm install react@18

# inspect loose-envify's dependencies

npm show loose-envify dependencies

# expected output

{ 'js-tokens': '^3.0.0 || ^4.0.0' }

One key in that object. That is why js-tokens ranks #1 — 100% of rank flows to a single target with no dilution.

Section 14 — Key Takeaways

What you can explain after reading this

If someone asked you to explain PageRank in a job interview, a design review, or to a client — you should now be able to do it.

What PageRank is

An algorithm that assigns importance scores to nodes in a graph based on the structure of incoming connections — not raw counts.

Why it was invented

Google needed to rank web pages by authority rather than keyword density. The solution: let the web vote — and weight votes by the voter's own authority.

How it works

Power iteration: start with uniform rank, repeatedly redistribute rank through directed edges until convergence (Δ < ε). Typically 20–100 iterations.

What it revealed about our dependency graph

The top-ranked packages are NOT the famous ones (React, Next.js, Express). They're invisible leaf utilities — js-tokens, ms, wrappy — that rank highest not because many things depend on them, but because their sole consumer passes 100% of its rank with no dilution. Exclusivity beats popularity.

Where it applies

Web search ranking, dependency analysis, recommendation systems, fraud investigation and network analysis, knowledge graph navigation, AI agent reasoning, and any domain with a graph of relationships.

How to implement it in production

Apache Spark GraphX for distributed computation, Neo4j or TigerGraph for graph storage, Kafka for streaming ingestion, Redis for rank caching, and an LLM layer for explanation.

How to scale it

Graph partitioning + distributed PageRank on Spark. Kubernetes for orchestration. Incremental recomputation for sub-graph changes. Snapshot isolation for consistency.

How AI systems benefit

GraphRAG uses PageRank to prioritize retrieval. AI incident investigators use rank to decide where to look first. AI recommendation agents use rank to surface non-obvious but important nodes.

The deeper lesson: in any complex system, the most important elements are rarely the most visible ones. The foundations are invisible until they break.

PageRank gives you a way to see the invisible foundations — the nodes that everything else depends on, the connections that matter most, the single points of failure hiding in plain sight.