skip to content

Deciding What Matters

Findings do not matter equally: reachability, EPSS and the CISA KEV catalog separate the exploitable from the merely present. Interviewers want a prioritization story, not a tool name.

on this pageshow

explore

questions

16

What do you check about an open-source library before adopting it in a production service?

level: juniorimportance: must knowfreq 72%

answer

  1. who is on the other end
  2. count maintainers, not stars
  3. patch cadence, not feature cadence
  4. a private path to report a flaw
  5. scrutiny scales with blast radius

basics

~20 s

Check how many people really maintain it, whether releases and patch fixes still ship, whether it publishes a way to report a flaw privately, what the license is, how large the transitive tree is, and how much of it you actually need.

solid answer

~50 s

I am asking two things: is anyone home, and how much does it matter here. For "is anyone home" I look at how many people hold merge and publish rights and how many actually commit — the bus factor — plus whether patch releases still ship, how quickly the last reported security issue was fixed, and whether there is a `SECURITY.md` or equivalent giving a private reporting path. I also read the license, the size of the transitive tree it drags in, and how much of the library we genuinely use. For "how much does it matter" I look at blast radius: a build-time formatter and a library that will handle production credentials do not deserve the same scrutiny. None of these signals prove the code is safe. They tell me how likely a problem is to be found and fixed, and by whom.

go deeper

for a junior

Be ready to name concrete things you would look up — how many people maintain it, whether patch releases still ship, whether there is a private way to report a flaw, the license — and to say plainly that none of them prove the code is safe.

for a middle

Explain what each signal measures underneath: bus factor versus raw contributor count, patch cadence versus feature cadence, and why download numbers mostly count automated builds rather than human review.

for a senior

Show that you scale the review to what the dependency can reach, including build-time code that runs with pipeline credentials, and that the outcome is a written decision someone owns rather than a verbal yes.

for a principal

Own the policy question: which classes of dependency require a human at all, what evidence you demand for the highest-impact ones, and what the review costs the organisation in delivery time versus the risk it actually removes.

## What adoption vetting is actually for Vetting before adoption is the one moment when a dependency is cheap to refuse. Once a library is in the tree it acquires callers, and the cost of removing it grows every sprint. So the review is not "is this code free of vulnerabilities" — nobody can answer that from the outside — but "if something goes wrong with this package, will it get fixed, by whom, and how badly does it hurt us?" ## The signals, and what each one actually measures **Bus factor.** The number of people who would have to disappear before the project stalls. This is not the same as the contributor count: a project can have two hundred contributors who each fixed a typo and one person who reviews and publishes everything. Look at who merges pull requests and who cuts releases over the last year. A bus factor of one is not disqualifying — enormous amounts of critical infrastructure run on it — but it tells you that a single person's availability, motivation or account is your availability, motivation and account. **Release and patch cadence.** Separate feature releases from patch releases. What you care about is whether a reported security flaw turns into a released fix, and how long that took the last time it happened. A project that ships features monthly but let an advisory sit unfixed for a year is worse than a quiet project that turned a report around in a week. **A published security policy.** A `SECURITY.md`, a disclosure address, or a documented reporting process tells you two things: someone has thought about receiving bad news, and you have somewhere to send it. Its absence means that when you find something, your options are a public issue tracker — which is a disclosure, not a report — or nothing. **License.** Not a security property, but it belongs in the same review because it is the other thing that is expensive to discover late, and because a license that forbids your use case forces a removal under time pressure. **Size and surface.** How many lines, how many transitive dependencies, and how much of it you use. A package you adopt for one function but which pulls in forty transitive packages has expanded your attack surface by forty, not by one. "Could we write the part we need?" is a legitimate question at this point. **Behaviour at install and build time.** Does the package run code during installation, or install a build plugin? That code runs on developer machines and on build runners, which typically hold more credentials than production does. ## Signals people over-trust Star counts and download numbers measure adoption, not review. Downloads are dominated by automated builds; a package can be pulled millions of times a week by machines and read by nobody. Popularity does help in one direction — a widely used package attracts more researchers, so flaws surface sooner — and hurts in another: it is worth more to an attacker. It never means "this has been audited". A clean scanner result is also not vetting. A vulnerability scanner tells you that no *published advisory* currently matches the version you resolved. It says nothing about the maintainer, the review process, or what happens next month. ## Scaling the review to the risk The decisive question is what the dependency can reach. A test-only assertion helper, a build-time formatter, a logging façade, and a library that will hold keys or parse untrusted input are four different risk classes and should get four different amounts of attention. "Dev-only" is not a free pass — build-time code runs with pipeline credentials — but the questions change: what it touches during the build and whether it executes install hooks, rather than its runtime attack surface. ## Writing the decision down A vetting decision that lives in someone's head expires silently. Record what you looked at, what you assumed, and what would change your mind — a change of maintainer, a transfer of ownership, the package growing well beyond the narrow job you adopted it for. That record is what makes the next person's review cheap instead of a repeat from scratch.

  • The library has had no release in eleven months. Abandoned, or simply finished?
    Both are real, so I look for evidence rather than guessing. Are issues and pull requests being answered? Are there open advisories with no fix? Is the surface small and stable, or does it track something that moves — a protocol, a language runtime, a file format? A 300-line utility can genuinely be done. A parser, a crypto wrapper or a protocol client that has gone quiet is a liability, because the world it talks to keeps changing.
  • Does a dev-only or build-time dependency get a lighter review?
    Not a lighter one, a different one. Build-time code runs on runners that usually hold registry credentials, signing keys and cloud tokens — often more privilege than the production service has. So instead of runtime attack surface I ask what it can reach during the build, whether it executes code at install time, and whether it can influence the artifact that gets published.
  • The package has 30,000 stars and millions of weekly downloads. How much does that buy you?
    It buys attention, not assurance. Wide use means flaws tend to be found sooner and that fixes reach an ecosystem quickly, and it means peers have hit the same rough edges. It does not mean anyone has read the code, and it raises the package's value to an attacker. Download counts in particular are mostly automated builds pulling the same version repeatedly.

saying these in an interview costs you the question

  • Says stars and download counts prove a library is safe
  • Treats a clean scanner run as having vetted the dependency
  • Checks only the license and calls security someone else's job
  • Applies identical scrutiny regardless of what the code can reach
  • Assumes no recent release automatically means abandoned
  • Never asks how much of the library is actually used

context

open as a page

What does an EPSS score of 0.08 on a CVE actually tell you about that vulnerability?

level: juniorimportance: must knowfreq 62%

basics

~10 s

EPSS estimates the probability a vulnerability will be exploited in the wild within 30 days. A score of 0.08 means roughly an 8 percent chance. It forecasts likelihood, not how damaging the flaw is.

open as a page

What is the difference between time-boxing a dependency finding's suppression and ignoring it permanently?

level: juniorimportance: must knowfreq 62%

basics

~20 s

A time-boxed suppression hides a finding until an expiry date, after which it returns to the queue for a fresh decision. A permanent ignore removes it for good, so a stale or wrong judgment is never re-examined.

open as a page

What does an SCA scanner actually match on when it flags a vulnerable dependency?

level: juniorimportance: must knowfreq 78%

basics

~20 s

It matches each resolved package version in your dependency tree against an advisory's affected version range for that same package identity. That is version arithmetic. It never inspects whether your code calls the vulnerable function.

open as a page

What is the difference between a reachable dependency finding and an exploitable one?

level: middleimportance: must knowfreq 65%

basics

~10 s

Reachability asks whether your application ever executes the vulnerable code. Exploitability asks whether an attacker in some position can drive that code with input they control. Code can be reachable and still not exploitable.

open as a page

A CVE listed in CISA KEV sits in your internet-facing proxy, rated medium - what do you do?

level: seniorimportance: must knowfreq 56%

basics

~20 s

Treat KEV membership as a hard remediation trigger and work it now. Listing means exploitation has actually been observed in the wild - evidence, not a prediction - and it overrides a severity band, which rates the flaw, not attacker behaviour.

open as a page

One vulnerable library appears in twelve services' scans — how do you dedupe and route it?

level: middleimportance: should knowfreq 56%

basics

~20 s

Deduplicate on the finding's identity — the advisory plus the package identity and affected version — not on the scan result. Track one item with one accountable owner, keeping the twelve service occurrences as child records.

open as a page

Adopt or build: a single-maintainer crate would sign payment settlements through an HSM?

level: seniorimportance: should knowfreq 55%

basics

~20 s

Decide on blast radius and on what compromising that maintainer would later buy an attacker. This code sits on the path that authorises money movement, so either fund real review and vendor it, or write only the narrow part you need.

open as a page

Does a dependency remediation clock start at advisory publication or at first scan detection?

level: seniorimportance: should knowfreq 44%

basics

~20 s

Publication measures real exposure — how long a known flaw ran in production. Detection start hides scanning latency, because a slow or missed scan silently rewinds the clock. Mature programs record both timestamps and drive the deadline from publication.

open as a page

When should you distrust a call-graph analyser's unreachable verdict on a dependency finding?

level: seniorimportance: should knowfreq 46%

basics

~20 s

Whenever the code reaches the dependency by a mechanism the analyser cannot draw an edge for — dynamic imports, reflection, framework wiring, deserialization — or when it modelled the wrong entry points. Unreachable is weak negative evidence, not proof.

open as a page

How do you run dependency-adoption vetting across hundreds of services without it becoming a rubber stamp?

level: principalimportance: should knowfreq 40%

basics

~20 s

Tier the review by blast radius: most dependencies clear on automated signals alone, a smaller set needs a written human review, and the highest-impact set needs a reviewer outside the adopting team plus a recorded decision with an owner and an expiry.

open as a page

Leadership tracks '4,000 open vulnerability findings' as the security metric - how do you reframe it?

level: principalimportance: should knowfreq 39%

basics

~10 s

A raw finding count measures scanner coverage and estate size, not risk. It double-counts one shared component across many services, rises when coverage improves, and treats every finding as equal. Report evidence-driven measures instead.

open as a page

How should you read an OpenSSF Scorecard result when vetting a library for adoption?

level: middleimportance: nice to knowfreq 38%

basics

~20 s

Read the individual checks, not the composite number. Checks such as code review, branch protection, pinned dependencies and a published security policy are evidence about how a project is run — not about whether its code is correct.

open as a page

Your triage cut is 'EPSS above 0.1' - what changes if you cut on EPSS percentile instead?

level: middleimportance: nice to knowfreq 31%

basics

~20 s

An EPSS score is an absolute probability, so a score cut holds a fixed risk bar and lets queue volume float. A percentile ranks a CVE against all others, so a percentile cut holds volume steady instead.

open as a page

Your dependency findings route to code owners, but reorgs leave some unowned — how do you keep the program accountable?

level: principalimportance: nice to knowfreq 30%

basics

~20 s

Resolve ownership at display time from a live service catalogue rather than a name typed once into a ticket, make unowned an explicit visible state rather than silent green, and give that queue a named owner of last resort.

open as a page

Your platform wants to auto-close unreachable dependency findings across 400 services — what do you require first?

level: principalimportance: nice to knowfreq 33%

basics

~20 s

Require that the verdict expires and re-runs on every rebuild, that it is keyed to the exact artifact and analysis that produced it, that each decision carries owner and evidence, and that high-consequence surfaces are carved out.

open as a page