Requirements extraction from stakeholder input
NLP pipeline extracts structured technical requirements from unstructured interview notes, emails, and meeting transcripts.
IT processPlanSelectDeployProvisionSupportUpgradeReplaceRetire
By Don, DoneThat’s AI coach · updated
What this workflow produces
An NLP pipeline turns unstructured stakeholder input into a structured requirement table you can review, edit, and trace. Each row represents one candidate requirement with fields such as description, type (functional, non-functional, constraint), affected system or process, and the stakeholder who raised it. The speed outcome is literal: you stop retyping interview notes into spreadsheets and start working from a draft that already points back to where each line came from.
Every populated field carries a citation to a specific utterance, email paragraph, or transcript segment. If the model cannot tie a value to source text, the field stays empty. That is intentional. A blank cell means "not evidenced in the source," not "low priority" and not "probably fine to skip." The BA still signs off on every row before it enters a backlog, RFP, or architecture decision record. Nothing in this workflow auto-approves scope, assigns MoSCoW labels, or fabricates a priority score.
Teams already store notes in Microsoft Teams transcripts, Atlassian Confluence pages, ServiceNow discovery records, or Miro workshop boards. This pattern does not replace those systems. It reads from exports or pasted text and produces a review artifact that sits between raw conversation and formal requirements documents.
Load notes without preprocessing theater
Start with the artifacts you already have. Meeting transcripts (auto-generated or human-edited), interview write-ups, email threads, workshop bullet lists, and chat exports all qualify. You do not need to normalize them into a single template first. Load them as separate source documents with clear labels: date, session name, participants if known.
Keep each source intact. Splitting a transcript into artificial "requirement paragraphs" before extraction removes the utterance boundaries you will need for citations. If a workshop produced sticky-note text exported from Miro, load that export as its own source rather than merging it with a Confluence summary of the same session. Duplicate phrasing across sources is acceptable; the review step handles consolidation.
Name sources so citations remain readable downstream. "2026-03-12 ERP discovery call (transcript)" beats "notes_v3_final." When stakeholders contradict each other across sessions, preserve both sources. Contradiction is data the BA resolves, not something the pipeline should silently merge.
Extract rows with utterance-level citations
Run extraction against the loaded corpus. The model identifies candidate requirements and maps each field to a quoted span in the source: speaker label and timestamp for transcripts, sender and date for email, section heading for Confluence paste-ins. A row might look like this in your review grid:
| Field | Value | Citation | | --- | --- | --- | | Description | Inventory counts must reconcile nightly with the warehouse system | Transcript 2026-03-12, 00:14:22, Maria (Operations) | | Type | Functional | Same utterance | | Affected system | Warehouse integration | Same utterance | | Priority | (empty) | - |
Notice the priority column is empty. No stakeholder said "this is critical" or "must-have" in linked text, so the pipeline does not invent one. That restraint prevents a common failure mode: a sortable priority column that looks authoritative but reflects model guesswork, not stakeholder intent.
Another failure mode is a requirement description with no citation at all. Treat that row as extraction noise until you attach evidence or delete it. A description that sounds plausible but cites nothing is worse than an empty row, because plausible text invites sign-off without scrutiny. Your review rule: no citation, no row.
Leave blanks and reject invented certainty
Empty fields are a feature, not a quality defect. When a stakeholder says "we need better reporting" without naming metrics, systems, or consumers, the description field may populate with that vague phrase while system, data source, and acceptance criteria stay blank. Do not ask the model to fill gaps from general industry knowledge. You are extracting what was said, not what ought to be true for a generic ERP program.
Similarly, resist downstream tooling that auto-scores or auto-prioritizes extracted rows. A vendor shortlist or budget model may need priority inputs later, but those inputs belong in vendor shortlist scoring engine or budget scenario modeler workflows where criteria are explicit and human-approved. Importing NLP-extracted rows with synthetic priority values pollutes both tools.
When two sources state the same requirement differently, create two rows or one row with multiple citations, depending on your traceability standard. Do not collapse them into a polished composite that no single stakeholder actually said. The BA merges wording during sign-off, not the extractor.
BA sign-off before anything becomes scope
The BA review pass is mandatory and structured. For each row: confirm the citation supports the description, fill justified blanks from follow-up questions (not from model inference), mark rows as accepted, rejected, or needs-clarification, and initial the decision. Rejected rows stay in the artifact with reason codes so audit trails remain intact.
Sign-off is not a rubber stamp on the model output. If you treat the extract as approved scope, you inherit every hallucinated edge the model smoothed over. One accepted row without a valid cite becomes scope creep with a paper trail that looks legitimate. Slow down on rows where citation text is shorter or more vague than the description field; that mismatch often signals over-interpretation.
Accepted rows export to your requirements repository, user story backlog, or architecture checklist. They are inputs to later plan-stage work such as benchmark-driven standard config generator runs (where standard packages are mapped against stated needs) or RFP response summarizer passes (where vendor claims are checked against what you actually asked for). None of those downstream steps re-open sign-off; they consume signed requirements as the baseline.
Where this fits in plan-stage IT work
This workflow sits early in plan, after discovery conversations and before baseline configuration or vendor selection hardens. It compresses the transcription-to-spreadsheet phase so BAs spend time on clarification workshops and dependency mapping instead of manual copy-paste.
It pairs naturally with workshop-centric tools. Sticky notes captured in Miro or Confluence decision logs in Atlassian become loadable sources on the same day. ServiceNow discovery interviews feed the same pipeline as Teams recordings from architecture review boards. The common thread is unstructured text in, cited structured rows out.
What it does not do: replace facilitation, resolve political disagreement, or determine build-versus-buy. It makes stakeholder language legible to architects and PMOs who were not in the room. Speed comes from starting every requirement conversation with "show me the cite," not from skipping human judgment. When evidence is thin, the honest output is an empty cell and a clarification ticket, and that is the correct result.
Is this worth automating for you?
Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.
DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.
Measure the baseline first