Role Slices
not everyone needs the whole brain
The mistake teams make at this stage: they try to make the team brain useful for everyone, so they cram everything into one folder. The BA gets a folder full of schema docs they don't need; the DBA wades through customer-discovery transcripts to find the runbook; the PM has to skip past API contracts to read the roadmap. The brain becomes a haystack with the team's name on it.
The fix isn't separate brains — that's how you end up with five contradictory customer-context.md files. The fix is role overlays: a thin per-role file that says "load these subset of the shared base for me, plus these role-specific extras." One source of truth. Five role-tuned views of it.
This module is T04 of the Team Brain track. The shared base (T01) is the prerequisite; this is what makes the base scale past five people.
The shared base from T01 is four files: team-identity.md, project-shared.md, state-shared.md, decisions.md. Once your team grows past 5–6 people across different functions, those four aren't enough — but the answer isn't to add 20 more files to one folder and tell everyone to "just load what's relevant." Humans don't, and neither do their AIs.
The answer is a role overlay: a single short file per role that says "for this role, here's the subset of the base to load, here's what to skip, and here are the extras layered on top." The base stays canonical — one source of truth. The overlay is just a view.
Every overlay file follows the same 3-block structure:
// role-{slug}.md template
# Role — {Role Name}
## loads
— from the shared base, read these files in full:
- team-identity.md
- <additional base files for this role>
## skips
— don't load these even if a wrapper points at them:
- <base files that aren't load-bearing for this role>
## extends
— role-specific extras, layered on top of the base:
- <extras-1>.md
- <extras-2>.md
- <extras-3>.md
## prompts (top 3, copy-paste)
1. ...
2. ...
3. ...
Three things matter about the structure:
- Overlays are views, not duplicates. An overlay references the shared base — it never copies content out of it. The day you copy a paragraph from
team-identity.mdintorole-ba.mdis the day the team brain starts dying. - Plain markdown beats a database. Human-editable, diff-able in git, version-controllable, AI-readable without a query layer. A YAML schema or a Notion database adds friction without buying you anything you don't already get from a folder of
.mdfiles. - The role overlay is the only file the AI parses to know your role. Everything else cascades from the three blocks. Which means you only have to keep one file in sync with reality per role.
Anti-pattern: forking the base into role-specific copies. You'll see this when a teammate says "the BA wants their own version of customer-context.md because the technical jargon confuses them," and someone helpfully creates customer-context-ba.md next to the original. Six weeks later the two files have drifted — the PM updates one, the BA updates the other, the architect reads both and notices the contradiction in a meeting. The team brain is now actively worse than no team brain, because it's confidently wrong. The fix isn't a fork; it's a view — a thin layer on top of the canonical file that filters or annotates. We'll come back to this in section 4.
The shape is clearer with two roles than with five. Below: a BA overlay and a DBA overlay walked through in full — chosen because they're maximally different (the BA loads customer context but skips the stack; the DBA inverts it). Same three blocks, opposite contents. Once you see that contrast, the pattern applies to any role your team has — PM, Support, Architect, Security, On-call — not from a canonical PickBits list, but from your team's actual roster.
// BA · Business Analyst
Loads team-identity (always) + customer-context + recent-decisions. Skips stack-map — the BA doesn't need to know the database migration order to do their job, and giving them that file just buries the requirements signal. Extends with the BA's working artifacts: a requirements-rubric, customer-interview templates, jobs-to-be-done framing.
// role-ba.md
# Role — Business Analyst
## loads
- team-identity.md
- customer-context.md
- recent-decisions.md (last 10 entries from decisions.md)
## skips
- stack-map.md (engineering-only; not load-bearing for requirements work)
- incident-runbooks.md
## extends
- requirements-rubric.md (acceptance-criteria checklist + INVEST test)
- customer-interview-templates.md (5 templates: discovery, validation, pain, JTBD, churn)
- jobs-to-be-done.md (current JTBD map for this product)
## prompts (top 3)
1. Draft acceptance criteria for {feature}
2. Convert this customer quote into a Job To Be Done
3. Review this PRD against requirements-rubric.md
The two prompts a BA's AI runs every week:
// BA prompt 1 · draft acceptance criteria
You have role-ba.md loaded.
Draft acceptance criteria for: {feature name}.
Constraints:
- One Given/When/Then per criterion. No compound conditions.
- Each criterion must be testable by someone who has not read the PRD.
- Cite the customer-context.md section that motivates each criterion.
- Run the INVEST test from requirements-rubric.md after drafting; surface any
criterion that fails Independent, Negotiable, or Testable.
- If a criterion would require info that isn't in customer-context.md or
recent-decisions.md, mark [NEEDS INPUT] instead of guessing.
// BA prompt 2 · PRD review against rubric
You have role-ba.md loaded.
Review this PRD against requirements-rubric.md.
For each rubric item:
- Pass / fail / partial. One line of evidence (quote from the PRD).
- If fail or partial: the one change that would fix it.
Then cross-check:
- Does the PRD contradict anything in recent-decisions.md? Quote both.
- Does it miss a stakeholder named in customer-context.md? Name them.
- Is there a jobs-to-be-done entry this PRD addresses? Name the job; if there
isn't one, flag that the PRD lacks a clear JTBD anchor.
Output as a single review block I can paste back into the PRD's comments.
// DBA · Database Administrator
Loads team-identity + stack-map (deep — the DBA needs every detail of it) + recent-decisions. Skips customer-context — not because customers don't matter, but because customer-discovery transcripts and persona docs are noise when the question is "is this migration safe to run at 2am Sunday?" Extends with schema-history, incident-runbooks, migration-checklist.
// role-dba.md
# Role — Database Administrator
## loads
- team-identity.md
- stack-map.md (full — every service, every dependency, every owner)
- recent-decisions.md (last 20 entries; longer window than BA because schema
decisions ripple for years)
## skips
- customer-context.md (not load-bearing for schema / migration / incident work)
- jobs-to-be-done.md
## extends
- schema-history.md (every migration in order: date, table, change, why)
- incident-runbooks.md (one runbook per known incident class: lock contention,
replica lag, disk pressure, runaway query, bad index)
- migration-checklist.md (pre-flight + post-flight gates for any schema change)
## prompts (top 3)
1. Pre-flight this migration: {migration plan}
2. Triage this incident from the symptoms: {symptoms}
3. Why did we pick {choice} for {schema decision}? — cite schema-history.md
// DBA prompt 1 · migration pre-flight
You have role-dba.md loaded.
Pre-flight this migration plan: {paste plan}.
Walk through migration-checklist.md gate by gate. For each gate:
- Pass / fail / unclear. One-line evidence.
- For fail / unclear: the question I need to answer before running.
Then cross-check against schema-history.md:
- Has this table been touched in the last 90 days? By what migration?
- Are there known indices or constraints that this migration assumes?
- Is there a prior migration that established a pattern (locking, batching,
online vs offline) we should match here for consistency?
End with one sentence: "Ship as-is" / "Ship with these N changes" / "Don't ship
yet — here's what to resolve first."
// DBA prompt 2 · incident triage from symptoms
You have role-dba.md loaded.
Symptoms reported: {symptoms}. Time window: {when}. Affected service(s): {svc}.
Match these symptoms to incident-runbooks.md:
- Most likely class. Second-most. Third.
- For each: the 3 fastest checks (commands or dashboard queries) that confirm
or rule it out.
Cross-reference stack-map.md:
- Which downstream services depend on the affected one? Who owns each?
- Are there known cascade patterns from prior similar incidents (cite
schema-history.md or recent-decisions.md if relevant)?
Output the runbook entry to follow next. If no runbook matches, draft a new
runbook stub I can fill in after the incident is resolved.
// the same pattern, other roles
The shape is identical. Three blocks, swapped contents. Pick the role; ask what context they need to load, what they can safely skip, and what role-specific artifacts they extend the brain with. A few your team probably has:
- PM — loads customer-context + recent-decisions + who-is-who; skips deep stack-map; extends with roadmap.md, customer-interview-archive.md, prioritization-rubric.md.
- Support — loads customer-context + who-is-who; skips deep stack-map and prioritization rubrics; extends with ticket-playbooks.md, escalation-tree.md, common-customer-blockers.md.
- Architect — loads the whole base (the only role that does); extends with design-history.md, trade-off-rubrics.md, future-state-roadmap.md.
- Security / On-call / Marketing / Sales — same drill. Start from the role closest in shape (Security ≈ DBA; Marketing ≈ PM; Sales ≈ Support), copy that overlay, walk the three blocks, ship.
Section 5 walks through spinning up a new overlay end-to-end with a Security Engineer worked example. The lesson is the method, not a 5-role canon.
None of this works without the composition prompt — the short instruction the AI runs at session start that tells it how to combine the role overlay with the base. It's a two-step: read the overlay, then read what the overlay says to read.
// composition prompt · paste at session start (or wrap in CLAUDE.md / AGENTS.md)
Load my Team Brain for this session.
Step 1: Read role-{slug}.md. Parse its three blocks: loads, skips, extends.
Step 2: For every file listed in "loads" and "extends", read it into your
working context. Skip every file listed in "skips" — do not load it
even if another wrapper points at it.
Step 3: Confirm with one line summarizing what's loaded: role name, count of
loaded files, count of extends files, anything in skips that you
would normally have loaded by default.
If a file referenced by the overlay is missing or empty, flag it; don't
substitute a guess. If two loaded files contradict each other, surface the
contradiction with a quote from each — do not silently pick one.
After confirm, wait for my first task.
Why the two-step matters: the role overlay is the only file the AI has to parse to know what role you're working as. Everything else cascades from the three blocks — loads, skips, extends. If you decide tomorrow that the BA should also load the stack-map, you change one line in one file and every BA session picks it up. No re-training, no re-prompting, no team-wide Slack message.
Variants — task overlays. Role overlays answer "who are you?" Task overlays answer "what are you doing right now?" Both compose:
task-design-review.md— layered on top ofrole-architect.md, adds the design-review checklist + the last 5 reviewed designs.task-incident-response.md— layered on top ofrole-dba.mdorrole-support.md, adds the live incident channel pointer + the last 24h of state-shared.md.task-launch-week.md— layered on top ofrole-pm.md, adds the launch runbook + the marketing/comms hand-off doc.
The composition prompt for a task overlay just gets one more step: "Then read task-{slug}.md and apply its loads/skips/extends on top of the role overlay. Task skips win over role loads — if the task says skip something the role loads, skip it." Roles are stable; tasks are situational.
The whole pattern depends on one rule:
// the rule
- No fact lives in more than one file. Overlays are views of the base. If a fact appears twice, one of the copies is already drifting.
This rule sounds easy until the BA says "can I have a version of customer-context.md with the technical jargon stripped, because I keep losing the thread?" The wrong move is to fork the file. The right move is to add a view: views/customer-context-plain.md that says "this is the customer-context, with the ‹technical-detail› spans collapsed and the jargon replaced via the glossary in team-identity.md." The plain-English view doesn't store facts — it stores a transformation. Update the base; the view stays correct.
The 3-question test before forking anything:
- Is this NEW information, or a different VIEW of existing information? If view: don't fork; add a view layer. If new info: it belongs in the base or in an overlay's extends, not as a fork of an existing file.
- If the underlying fact changes, do both copies need updating? If yes: it's a fork waiting to drift. Refuse.
- Is there a teammate who needs both views? If yes (the architect always needs both views): the views must be derived from the same base, not maintained independently.
Anti-pattern catalog — what forks look like in the wild:
- Silent forks. The BA's
customer-context.mdin their personal context-stack drifts from the PM's over three months because nobody syncs them. By month four they confidently disagree on what the customer cares about, and the team finds out in a stakeholder meeting. - Naming-collision forks.
customer-context.mdinteam-brain/andcustomer-context-ba.mdnext to it. New hires read both. The AI loads both. Two sources of truth in the same folder is worse than zero. - Retired forks that stay in git. Someone made
customer-context-v2.mdlast year and the team moved back to v1, but v2 never got deleted. New hires search the repo, find v2, assume it's current. The fix isn't to leave it in git "in case" — the fix is to delete it and rely on git history. - Role-specific reformats. The PM made a slide deck out of the customer-context for an exec review and saved it as
customer-context-exec.md. Now there's a third copy of the same facts, none of them synced. Solution: presentations are renders of the truth, not copies of it.
A security engineer joins the team. You don't have a role-security.md. The pattern is designed so spinning one up takes 15 minutes — before the new hire's first day. Here's the drill.
// 15-minute new-role drill
- Step 1 · 2 min · name it. Lowercase, hyphenated, one word per concept.
role-security.md. Notrole-secops-engineer.md, notrole-cyber.md. The slug becomes the filename, the breadcrumb, the prompt argument — pick one form and stick with it. - Step 2 · 3 min · copy the closest template. Security looks more like DBA (deep technical, incident-flavored) than like BA (requirements-flavored). Copy
role-dba.mdtorole-security.md. Change the heading, then walk the loads/skips/extends:- loads: keep team-identity, stack-map, recent-decisions. Maybe add who-is-who (security needs every owner).
- skips: customer-context? probably yes. jobs-to-be-done? definitely.
- extends: replace DBA's extras with security's. (Step 3.)
- Step 3 · 5 min · name the 1–3 role-specific extras and stub them. For security:
compliance-frameworks.md(which frameworks the team is on the hook for — SOC2, ISO, HIPAA, etc.),threat-models.md(the current threat model for each major surface),incident-runbooks-security.md(security-flavored runbooks: data exposure, credential leak, supply-chain). Don't try to fill them in this 15-minute drill — just create the files with a one-line TBD header. The new hire will fill them as part of week one onboarding (T03's "first 30 days" arc). - Step 4 · 3 min · write the 3 most likely Day-1 prompts. Cross-reference T03's onboarding format. For security, those are probably: (1) "Walk me through the current threat model for {surface} citing threat-models.md", (2) "Which compliance framework controls does {decision} affect? cite compliance-frameworks.md", (3) "Pre-flight this change for security risk — quote any related decision from recent-decisions.md".
- Step 5 · 2 min · commit, announce, link. Commit the new overlay and the three stubbed extras in one PR. Drop a one-liner in the team channel: "Spun up role-security.md ahead of {new hire} starting Monday. Stubs to flesh out: compliance-frameworks, threat-models, incident-runbooks-security. {new hire} will fill these in week 1." Add the new role to the table in
who-is-who.md(so the architect's overlay surfaces them).
The "is this its own role?" decision tree. Not every new hire needs a new overlay. The cheap test: would the new hire's daily AI session load a meaningfully different set of files from any existing role's? If yes — new overlay. If no — extend an existing one with the personal context-stack from T03 (Module 01-style personal extras layered on top of an existing role).
- New role: security engineer, technical writer, SRE, designer, data scientist — load different bases, want different extras.
- Same role, personal extras: a second BA, a senior vs. junior engineer, a contractor backfilling for a teammate — same overlay, personal context-stack carries the individual difference.
- Hybrid (a task overlay, not a role): "we need a launch coordinator for Q3 only" — that's a task overlay, not a permanent role. Spin up
task-launch-q3.md, retire it when Q3 ships.
Two role overlays will eventually disagree. The BA's customer-context.md view says the top customer pain is onboarding friction; the PM's customer-interview-archive.md rolls up "pricing confusion" as the most-mentioned theme. Both citations are real. Who's wrong?
Usually: neither. The disagreement is a signal that the base is missing a fact — a fact both overlays would have used if it had been in the base. The conflict prompt surfaces these:
// conflict prompt · weekly steward task
Compare role-{a}.md and role-{b}.md.
For each base file they BOTH load or BOTH extend, check whether their use
of that file is consistent. Examples of inconsistency:
- They cite the same file but draw opposite conclusions.
- One quotes a section the other treats as missing.
- They reference the same person but assign different ownership.
For each file one loads and the other skips, decide whether the exclusion
is deliberate (different roles, different needs — fine) or accidental
(this role probably should be loading it — surface for review).
For each conflict found, output:
- Files in conflict.
- One-sentence summary of the disagreement.
- Quote from {a}; quote from {b}.
- One question I should answer to resolve it.
Do not silently pick a winner. Do not invent a resolution.
Resolution rules — facts vs. preferences:
- Facts live in the base. "Customer X is on the Enterprise plan." "The auth service is owned by the Platform team." "We decided in Sprint 42 to deprecate the v1 API." If two overlays disagree on a fact, the bug is in the base — one or both overlays have inferred a fact that should be canonical. Move the fact into the base; both overlays then pull from the same source.
- Preferences live in overlays. "The BA prefers customer feedback grouped by JTBD; the PM prefers it grouped by persona." Both can be true; neither is a fork. The base has the raw data; each overlay's extends file specifies its preferred view.
- If they disagree on what the team agreed to: the bug is in
decisions.md. The decision either wasn't logged, was logged ambiguously, or got superseded without a follow-up entry. Add the missing decision; both overlays converge.
The Friday overlay review — 10 minutes a week. The steward picks one overlay (rotate weekly) and audits its loads/skips against actual usage signals from the past week:
- Which files did this role's AI sessions actually need this week? (Skim the role's chat history or the agent's session debriefs.)
- Which files in loads got referenced zero times? Are they still load-bearing, or are they dead weight slowing every session?
- Which files in skips did the role keep asking for? Promote them to loads.
- Which extras in extends are stale? When was the last edit? If >90 days and the role uses the file weekly, that's a tell — either the file is wrong and needs an update, or the role has internalized its content and stopped referencing it.
Five overlays × 10 minutes each = one overlay per week with 3 weeks of breathing room. The brain stays tuned to how the team actually works, not how it worked when the overlays were first written.
// one base, many views
- One base, many views. The shared base (T01's four files + a couple of extras) is canonical. Role overlays are views on it — not duplicates.
- Three-block overlay file.
loads·skips·extends. The whole pattern fits in a 15-line markdown file per role. - The composition prompt is the only entry point. Read
role-{slug}.md, then read what it says to read. One file determines a session; everything else cascades. - No fact lives in more than one file. When tempted to fork, add a view instead. Drift is the only failure mode that kills a team brain.
- Conflicts mean the base is missing a fact. Don't pick a winner; surface the disagreement, fix the base, both overlays converge.