Building a Findings Library Your Team Actually Uses
How to build a pentest findings library your team actually uses: what an entry should hold, what to leave out, and how to grow it from real reports.
A findings library your team actually uses is one that grows out of real reports: entries saved at the moment somebody writes something good on an engagement, and pulled back in one step on the next. Every consultancy has tried the other way, a fortnight spent writing up the fifty findings the team raises most often, and within two months everybody is typing descriptions from scratch again.
The library was not wrong. It was in the wrong place, and it was built as a project rather than as a by-product of the work.
Why the fortnight project fails
Three reasons, and none of them is laziness.
- It is a detour. Opening a separate document, finding the entry, copying it, pasting it, fixing the formatting and adjusting the specifics is slower than typing a description you have written twenty times. If reuse is slower than writing, nobody reuses.
- It goes stale in silence. The library is written once and improved never, because improvements happen in reports. Six months on, the entries are worse than what the team is producing live, and everybody quietly knows it.
- It was written in a vacuum. Fifty entries composed in a fortnight, away from real engagements, tend to be generic. The value of a house description is its specificity, and specificity comes from the engagement that produced it.
A findings library should be a by-product of writing reports, not a project that precedes them. Every entry should arrive because somebody wrote something good during an engagement and pressed save.
What belongs in an entry
More than the description, and less than a document.
| Field | Why it belongs |
|---|---|
| Title | The way your firm names this weakness, so two testers do not raise it under two names. |
| Description | The general explanation, written once, well. Instance specifics stay on the finding. |
| Remediation | What you actually recommend, including the version you say when the obvious fix is not available. Remediation a developer will action is the standard to write it to. |
| Impact | The paragraph that translates the technical into a consequence. The hardest one to write under time pressure, and the one most worth having ready. |
| Default scoring | The vector your firm has already argued about, so instances start consistent and get adjusted rather than invented. |
| References | The sources you cite, checked once, rather than whatever a search returns at eleven at night. |
What does not belong
- Client-specific detail. Hostnames, screenshots and account names belong on the finding. An entry that carries them will leak one client into another client’s report, and it will happen on the day nobody is checking.
- A severity written as gospel. A default vector is a starting point. Exposure varies by environment, and an entry that pretends otherwise trains people to skip the judgement, which is one of the CVSS scoring mistakes that survives review most often.
- Everything. A library of four hundred entries is a search problem. Cover what you actually raise repeatedly and let the rest be written fresh.
The library is not a reference work. It is your firm’s house voice, kept somewhere it can be reused in one click.
Growing it without a project
- Start empty. Resist the fortnight. The first ten entries should come from the next three engagements.
- Save at the point of writing. When somebody writes a description they are happy with, it goes in the library from the finding, then and there. Any workflow with more steps than that will not survive a busy month.
- Improve in place. When a better version gets written on a later engagement, it replaces the entry rather than forking it. The library should always hold your current best wording.
- Let review feed it. A reviewer who rewrites a paragraph has, by definition, produced the better version. That is exactly the moment to promote it, and it is why the library belongs inside a QA process that survives a busy month rather than beside it.
- Prune annually. Entries nobody has pulled in a year are either dead or badly named. Both are worth ten minutes.
Who owns it
Everybody contributes and one person owns. A library with no owner collects three entries for the same weakness under three names, and testers start to distrust it, which is the beginning of the end. The owner does not write the entries. They merge duplicates, settle naming, and decide which of two competing versions becomes the house wording when the authors disagree.
The owner also keeps the references honest, because references date faster than descriptions. When OWASP revised its Top 10 in 2025, Injection moved from A03 in the 2021 list to A05, and Security Misconfiguration from A05 to A02. Every entry citing the old numbers became quietly wrong on the day the new list appeared, and a reviewer at a client who knows the list will notice. The OWASP Top 10 2025 changes are a good test of whether anyone is looking after yours.
The second-order benefits
Consistency is the obvious one, and it is worth more than it sounds: a client reading two reports from your firm should not be able to tell which tester wrote which. Beyond that:
- Onboarding gets faster. A new tester starts from your standards rather than from an empty box and a guess at house style.
- Scoring drifts less. A shared default vector per weakness removes most of the variance between testers before review ever sees it.
- Review gets cheaper. Reviewers stop correcting the same phrasing and start looking at the specifics, which is where their attention is worth something.
- Quality ratchets. Every improvement made under deadline is captured instead of evaporating with the engagement.
That last one is the real argument. Without a library, the best paragraph your firm has ever written about a weakness exists in one PDF, in one client’s inbox, and will never be seen again.
The findings Library sits next to the work rather than in a separate document. A finding you are happy with is added to the Library from the engagement, and the next tester imports it from the Library into their own engagement instead of rewriting it. Findings are scored with CVSS 3.1 or CVSS 4.0, whichever your firm chooses, with the score calculated from the vector, and custom finding fields hold whatever else your house style needs. See how the findings Library and editor fit together.
Pental Is Built by the People Writing This
Engagement management for testing firms, on a database you own, under your brand, with the AI running on your key.
See how an engagement runs in PentalCommon questions
What should a pentest findings library entry contain?
A title in your firm's naming, a general description, the remediation you actually recommend including a fallback, an impact paragraph, a default CVSS vector your firm has already agreed, and references checked once. Client detail such as hostnames, screenshots and account names stays on the finding, because an entry that carries it will eventually leak one client into another client's report.
How many entries should a findings library have?
Fewer than people expect. Cover the weaknesses your team raises repeatedly, which for most firms is a few dozen, and let rare findings be written fresh. A library of four hundred entries becomes a search problem, and testers who cannot find an entry quickly go back to typing. Entries nobody has imported in a year should be merged, renamed or deleted.
How do you keep a findings library up to date?
Make improvement happen where the writing happens. When a tester or reviewer writes a better version of an entry during an engagement, it replaces the library entry rather than forking it. Give the library one named owner who merges duplicates and refreshes references, and prune it once a year. A library maintained as a separate project goes stale within months.
Should a findings library include CVSS scores?
Yes, as a default vector rather than a verdict. A shared starting vector removes most of the scoring variance between testers, and the instance is then adjusted for the environment it was found in. An entry that presents its score as fixed trains people to skip the judgement that environmental context requires, which is exactly the part a client is paying for.
Related reading
Setup guide
See the product set up, end to end
The whole setup in 12:10, with chapters you can jump to: registering, your own domain, your own database in any of three places, your own mail server, branding, the first sign-in, updating the database on Supabase Cloud, and moving the database if you change your mind.
- 0:00 · Registering, signing in, and the free trial
- 0:51 · Your name and your firm’s name
- 0:57 · Custom domain
- +6 more