Automated summary
This skill ranks a system's parts into four layers (Identifiers, API, Data, Architecture) by how many parties must change when each changes, and flags inversions where a cheap-to-change layer leaks into an expensive one.
Strengths
- Offers a simple, memorable decision grid based on external parties affected rather than on lines of code.
- Names concrete recurring traps: a storage key or version segment hidden inside an identifier, a table shape exposed through an API.
- Gives directly actionable rules: opaque identifiers, additive changes only, higher layer wins when layers conflict.
- Well suited to pre-design reviews and to decisions made just before publishing a schema or contract.
Limitations
- Purely conceptual doctrine: it ships no tooling, script or automated checklist.
- Deciding whether a field is an identifier or part of the API stays a human judgement the skill asks you to record, without mechanical criteria.
- Does not cover concrete migration, versioning or deprecation mechanics beyond the principle.
- A personal restatement of a remembered doctrine, so deliberately opinionated and unsourced.
Use it before locking down identifiers, a REST or package API, a schema or a data model, or when choosing between two design options.
Avoid it for executing a migration, refactoring existing code, or getting automated compliance validation.
Security analysis
SafeThe skill is purely advisory documentation describing a design doctrine. It declares no allowed tools and contains no executable commands, network calls, file operations, or instructions that could cause harm. There is no destructive, exfiltrating, or obfuscated content.
No concerns found
How this analysis is madeExamples
We're about to mint a public record id of the form `eu-west-1/orders/2024/12345`. Apply the IADA ranking and tell me whether this is safe to publish, what to change, and what it would cost to fix later./iada — here is our REST endpoint spec. Check for inversions where the persisted table shape or storage choice has leaked into the published API, and suggest the minimal additive fix.Our enum values for order status are consumed by three partner systems and stored in their databases. Is renaming `pending_review` to `awaiting_review` a safe change? Walk me through which IADA layer it sits in and what path it needs.name: iada description: Rank the parts of a system by how many parties must change when each part changes (Identifiers, then API, then Data, then Architecture) and catch inversions where a cheap-to-change layer has leaked into an expensive one. Use when designing or reviewing identifiers, REST or package APIs, schemas, storage, or a data model; when someone says "/iada" or asks whether a change is safe or a name is stable; or when a design question turns on "what would this cost to change later".
IADA: what is hard to change comes first
A doctrine I worked under for years, restated from memory and in my own words. Four layers, ordered by the cost of changing them. The cost is measured in parties, not lines: how many people or systems outside this repo would have to act if this changed.
| layer | what it holds | who must change if it changes | |---|---|---| | Identifiers | names others store: ids, URIs, paths, enum values, relation names | nobody can; they are permanent | | API | contracts others call: endpoints, package exports, schemas as published, CLI flags | every consumer, but they can be told | | Data | the shape you persist: tables, documents, fixture files, internal schemas | this repo and its migrations | | Architecture | how the work gets done: engine, services, libraries, storage choice | this repo only |
The doctrine is the ordering and one rule that follows from it:
Nothing from a lower layer may appear in a higher one.
A storage key or region inside an identifier, a table shape inside an API, a version segment inside a name, a modelling choice you are still revising inside an id: each is an inversion. Inversions are how systems become brittle. The lower layer can no longer change without dragging the higher one, and the higher one was the part that was never supposed to move.
The consequences
- Effort tracks the ranking. Identifiers get the most care and the slowest review; architecture gets the least. Spend design time at the top, and change freely at the bottom.
- A minted identifier cannot change, ever. It outlives the system that minted it, the API that operated on it, and the team that knew what it meant. It ends up in spreadsheets, emails, printed documents, other people's databases, places nobody imagined. You never get to delete the old ones. At best you keep a table mapping old to new, and you keep it forever. Design every identifier as if it will be dug up as archaeology.
- Identifiers are opaque strings. Consumers compare them for equality and store them; they never parse, split, sort, or infer from them. A prefix or namespace saying who minted it is allowed and useful, since it lets ids from different owners share one space without colliding. Anything about the content is not. The canonical trap is a location in the id read as "where the record lives": the home moves, the record gets replicated or migrated, and one day the authoritative copy sits somewhere the id says it doesn't. The moment anyone interprets an id, every fact it happens to encode becomes a contract that rule 2 then makes permanent. Bend this knowingly and write down that you did.
- Decide what counts as an identifier, on purpose. Whether a field name, a query key, or an enum value is an identifier or part of the API is a labelling choice, and the label sets the change cost. Make it explicitly, in the identifiers doc, before anyone stores the value.
- Additive changes are cheap at every layer. Renames and removals in the top two layers need a version, an adapter, or a deprecation path. Never silently.
- When two layers pull in different directions, the higher wins. A worse table for a stable id is the right trade every time.
- "It was reviewed" is a reason to protect the top two layers, not the bottom two. Caution spent on preserving a data-layer choice is caution in the wrong place.
How to apply it
When invoked on a design question, do this and nothing more:
- List the elements under discussion and assign each a layer. Say which parties would have to act if it changed. Where the layer is arguable, say why and pick one.
- Name any inversion: a lower-layer fact living in a higher layer. Quote the offending element.
- State what the change actually costs, by layer. Most questions resolve here: either the change is in a lower layer and is cheap, or it touches an identifier or contract and needs a path for existing holders.
- Give one recommendation. Do not produce a menu.
Do not turn this into a style guide. UUIDs, contract-first, JSON Schema: all sometimes right, none a consequence of the ordering. Opacity is the exception: it is the doctrine's own rule for the top layer, not a style. Below that, the doctrine says nothing about how to build a layer, only about which layers must not leak into which.
Where it does not apply
Firmware with no external consumer, dotfiles, formal specifications, and one-off scripts have no top two layers worth the ceremony. Do not invoke it there. Projects that publish something others store (a data package, a plugin's paths, a service's URLs) are where it earns its keep; those projects may point at this skill with one line in their CLAUDE.md.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/iada-change-cost-ordering-for-system-parts-mu99jnbe/download' --output '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md.part' && mv '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md.part' '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md' && test -s '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/iada' && cp -R '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe' '.claude/skills/iada'Cursor
test -f '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md' && test -s '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/iada' && cp -R '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe' '.cursor/skills/iada'Codex
test -f '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md' && test -s '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/iada' && cp -R '.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe' '.agents/skills/iada'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe'openskills read 'iada-change-cost-ordering-for-system-parts-mu99jnbe'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/iada-change-cost-ordering-for-system-parts-mu99jnbe/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
React Hook Form Best Practices
Development
Master React Hook Form: avoid anti-patterns, manage subscriptions, and handle reset, dirty state, and controlled inputs correctly.
Emotion to Mantine Migration
Development
Migrate Emotion styled-components to Mantine components with style props and CSS modules. Use when converting .styled.tsx files or removing @emotion imports.
Scope Creep Detector
Development
Analyzes git diffs against a stated intent to detect scope creep, unrelated files, broad PRs, and oversized changes, then suggests keep, split, or justify actions.