skills/domain-modeller/SKILL.md
--- name: domain-modeller description: Model-first design: map entities, relationships, and boundaries before writing code. user-invocable: false effort: high allowed-tools: - Read - Glob - Grep --- # Domain Modeller Model-first design skill. Maps entities, relationships, and boundaries before code. Prioritises understanding the domain over jumping to implementation. Outputs conceptual models as Mermaid diagrams or Cypher-compatible graph structures. --- ## When This Skill Applies Use
npx skillsauth add jasonwarrenuk/goblin-mode skills/domain-modellerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Model-first design skill. Maps entities, relationships, and boundaries before code. Prioritises understanding the domain over jumping to implementation. Outputs conceptual models as Mermaid diagrams or Cypher-compatible graph structures.
Use this skill when:
Understand the domain before solving it.
Sophistication is not clever code — it's depth of understanding. A well-modelled domain makes implementation obvious. A poorly modelled domain makes every line of code a fight.
The sequence is always: Model → Design → Build
What are the nouns? What things exist in this domain?
Questions to ask:
Example: "Users can enrol on courses and track progress"
Entities: User, Course, Enrolment, Progress
Hidden entity: Enrolment is not just a boolean — it has state (enrolled, active, completed, dropped)
What connects to what? How? With what cardinality?
Questions to ask:
erDiagram
USER ||--o{ ENROLMENT : "enrolls in"
COURSE ||--o{ ENROLMENT : "has"
ENROLMENT ||--|| PROGRESS : "tracks"
COURSE ||--o{ COURSE : "requires (prerequisite)"
Where does one concern end and another begin?
Questions to ask:
Given the model, where does each entity live?
Decision framework (from data-ontologist skill):
Produce a visual representation. Prefer:
erDiagram
ENTITY_A ||--o{ ENTITY_B : "relationship"
ENTITY_B }o--|| ENTITY_C : "relationship"
(:User)-[:ENROLLED_IN {since: date}]->(:Course)
(:Course)-[:REQUIRES]->(:Course)
(:User)-[:COMPLETED {score: float}]->(:Module)
| Entity | Primary Store | Key Properties | Relationships | |--------|--------------|----------------|---------------| | User | PostgreSQL | id, email, name | enrolls in Course, completes Module | | Course | MongoDB | id, title, content | requires Course, has Module |
When in doubt, start with the graph.
Most real-world domains are fundamentally about relationships. Tables and documents are storage optimisations — the graph is the truth. Start by drawing nodes and edges, then decide where to persist them.
Process:
Common graph patterns:
Watch for these — they usually indicate the model needs more thought:
Domain modeller identifies what exists and how it connects. Data-ontologist decides where it lives and how to query it.
The domain model feeds directly into the implementation plan. Model first, plan second, build third.
Certain domain entities (user data, tracking, notifications) trigger ethical review. If the model includes personal data or behavioural tracking, flag it.
A domain model often reveals more complexity than expected. Scope coach helps cut back to what's essential for the first iteration.
✗ "We need a users table with these columns..."
✓ "Users have identities, belong to organisations, and enrol in courses..."
✗ "It's just a CRUD form, no need to model"
✓ Even simple features benefit from 2 minutes of entity mapping
✗ Every possible future entity mapped in detail
✓ Core entities for the current scope, with notes on expansion points
Domain modelling is complete when:
documentation
{{ 𝛀𝛀𝛀 }} Review a pull request and post a comment
development
{{ ƔƔƔ }} Generate an HTML dashboard showing the current state of a project roadmap.
tools
{{ 𝛀𝛀𝛀 }} Review a pull request
development
{{ 𝛀𝛀𝛀 }} Investigate a codebase in detail