---
name: data-model-first
description: "Applies “The data model comes first” as a repeatable product-quality gate. Use during architecture work when schema before endpoints — constraints in the database, not in hope."
---

# The data model comes first

Apply this skill during **Architecture** work. It supports Node / API, Python, Any stack.

Schema before endpoints — constraints in the database, not in hope.

## Instructions

Design the data model before writing endpoints or UI: name the entities, their relations, and who owns each row. Enforce invariants in the schema itself — NOT NULL, unique, foreign keys, and check constraints are not optional garnish; app-level validation is a convenience layer, not the defense. Every table carries created_at/updated_at, and the deletion strategy (hard vs soft) is an explicit decision, not an accident. Write every migration with a tested rollback and rehearse against production-shaped data volumes. Maintain a PII inventory (field, purpose, retention, deletion path) and challenge every new personal field: do we truly need it?

## Detect the problem

- Validation living only in the API layer
- Tables without created_at
- 'We'll add the foreign key later'

## Hold the gate

Do not declare this phase complete until every item passes:

- [ ] Entities, relations, and ownership drawn before any endpoint exists
- [ ] Invariants live in the schema: NOT NULL, unique, foreign keys, checks
- [ ] Every table: created_at/updated_at; deletion strategy (hard/soft) decided explicitly
- [ ] Migrations are reversible and rehearsed against production-shaped data
- [ ] PII is inventoried: field, purpose, retention, deletion path

## Verify the result

Insert invalid data straight into the database — the schema itself must reject it.
