@ggdna/dna-design-layers 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +35 -0
- package/dna/_dna.json +11 -0
- package/dna/_generated.json +101 -0
- package/dna/_vars.json +3 -0
- package/dna/doc/guides/layers/conceptual-model-guide.md +67 -0
- package/dna/doc/guides/layers/domain-guide.md +56 -0
- package/dna/doc/guides/layers/interaction-flow-guide.md +67 -0
- package/dna/doc/guides/layers/observed-behaviour-guide.md +52 -0
- package/dna/doc/guides/layers/orient-guide.md +56 -0
- package/dna/doc/guides/layers/product-strategy-guide.md +60 -0
- package/dna/doc/guides/layers/surface-guide.md +63 -0
- package/dna/doc/guides/layers/user-needs-guide.md +55 -0
- package/dna/doc/guides/layers-guide.md +65 -0
- package/dna/dot-claude/skills/layers-conceptual-model/SKILL.md +12 -0
- package/dna/dot-claude/skills/layers-domain/SKILL.md +12 -0
- package/dna/dot-claude/skills/layers-interaction-flow/SKILL.md +12 -0
- package/dna/dot-claude/skills/layers-intro/SKILL.md +9 -0
- package/dna/dot-claude/skills/layers-observed-behaviour/SKILL.md +12 -0
- package/dna/dot-claude/skills/layers-orient/SKILL.md +12 -0
- package/dna/dot-claude/skills/layers-product-strategy/SKILL.md +12 -0
- package/dna/dot-claude/skills/layers-surface/SKILL.md +12 -0
- package/dna/dot-claude/skills/layers-user-needs/SKILL.md +12 -0
- package/package.json +41 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) ggdna
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# dna_design_layers
|
|
2
|
+
|
|
3
|
+
DNA layer: the seven layers of product design — guides and `/layers-*`
|
|
4
|
+
skills.
|
|
5
|
+
|
|
6
|
+
## What it ships
|
|
7
|
+
|
|
8
|
+
- `doc/guides/layers-guide.md` — the layer system, design as decision
|
|
9
|
+
making, how to use the skills, where results are recorded
|
|
10
|
+
- `doc/guides/layers/*-guide.md` — one short guide per layer plus the
|
|
11
|
+
orient audit
|
|
12
|
+
- `.claude/skills/layers-*` — nine skills that load the matching guide
|
|
13
|
+
|
|
14
|
+
The guides follow
|
|
15
|
+
[layers-skills](https://github.com/jamiemill/layers-skills) by Jamie Mill
|
|
16
|
+
(MIT). [dna_plan](https://github.com/ggdna/dna_plan) tells where the
|
|
17
|
+
results of a design session land in a project management repo.
|
|
18
|
+
|
|
19
|
+
## Layers
|
|
20
|
+
|
|
21
|
+
Orthogonal: this layer carries only its own topic and is combined with the
|
|
22
|
+
other layers by [dna_ggdna](https://github.com/ggdna/dna_ggdna). It declares no
|
|
23
|
+
parent, and it must not — the umbrella lists every topic layer, so taking the
|
|
24
|
+
umbrella back would close a cycle, and a parent here would reach every consumer
|
|
25
|
+
of this topic whether that repo asked for it or not.
|
|
26
|
+
|
|
27
|
+
## Variables
|
|
28
|
+
|
|
29
|
+
- `dnaCopyrightHolder` — the name in the license header of every file
|
|
30
|
+
|
|
31
|
+
## Development
|
|
32
|
+
|
|
33
|
+
The `dna/` folder is hand-authored source and is never generated. The repo
|
|
34
|
+
instantiates its own DNA — run `dart test` after changes; commit first, a file
|
|
35
|
+
the DNA would overwrite must not carry uncommitted work.
|
package/dna/_dna.json
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
// This package is a DNA layer: dna/ is hand-authored source and is the
|
|
3
|
+
// last layer of its own instantiation.
|
|
4
|
+
"version": 1,
|
|
5
|
+
|
|
6
|
+
// No parent DNA. This layer is orthogonal: it carries only its own topic
|
|
7
|
+
// and is combined with the other layers by dna_ggdna. It stays parent-less
|
|
8
|
+
// on purpose — the umbrella lists this layer, so a parent here would close
|
|
9
|
+
// a cycle, and a parent would reach every consumer of this topic.
|
|
10
|
+
"layers": []
|
|
11
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"layers": [
|
|
4
|
+
{
|
|
5
|
+
"name": "base",
|
|
6
|
+
"package": "helix",
|
|
7
|
+
"ecosystem": null,
|
|
8
|
+
"resolvedVersion": "1.7.1",
|
|
9
|
+
"via": null,
|
|
10
|
+
"hash": "0x6883da335b415f9d"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "self",
|
|
14
|
+
"package": null,
|
|
15
|
+
"ecosystem": null,
|
|
16
|
+
"resolvedVersion": null,
|
|
17
|
+
"via": null,
|
|
18
|
+
"hash": "0x299cd5817d7063f2"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"claude": {
|
|
22
|
+
"claudeMdInclude": null,
|
|
23
|
+
"claudeMdFromDna": false
|
|
24
|
+
},
|
|
25
|
+
"baseVersion": "1.7.1",
|
|
26
|
+
"baseHash": "0x6883da335b415f9d",
|
|
27
|
+
"instances": [
|
|
28
|
+
{
|
|
29
|
+
"path": ".claude/skills/layers-conceptual-model/SKILL.md",
|
|
30
|
+
"hash": "0xda240030955579b8"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"path": ".claude/skills/layers-domain/SKILL.md",
|
|
34
|
+
"hash": "0xda08f4d45ff49767"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"path": ".claude/skills/layers-interaction-flow/SKILL.md",
|
|
38
|
+
"hash": "0x796a950f8a179288"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"path": ".claude/skills/layers-intro/SKILL.md",
|
|
42
|
+
"hash": "0x06c1d26e36f43472"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": ".claude/skills/layers-observed-behaviour/SKILL.md",
|
|
46
|
+
"hash": "0x4108cd91e4e773cd"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"path": ".claude/skills/layers-orient/SKILL.md",
|
|
50
|
+
"hash": "0xec099416bd393283"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"path": ".claude/skills/layers-product-strategy/SKILL.md",
|
|
54
|
+
"hash": "0xe88cb0659fdbafce"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"path": ".claude/skills/layers-surface/SKILL.md",
|
|
58
|
+
"hash": "0x3629176c7b400675"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"path": ".claude/skills/layers-user-needs/SKILL.md",
|
|
62
|
+
"hash": "0x78edeebd96aba9bc"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"path": "doc/guides/layers-guide.md",
|
|
66
|
+
"hash": "0x83e39ffe86369c5e"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"path": "doc/guides/layers/conceptual-model-guide.md",
|
|
70
|
+
"hash": "0x3c0656b53f857fb8"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"path": "doc/guides/layers/domain-guide.md",
|
|
74
|
+
"hash": "0x106bb263eb05982a"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"path": "doc/guides/layers/interaction-flow-guide.md",
|
|
78
|
+
"hash": "0xd5d3fb1b895d633c"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"path": "doc/guides/layers/observed-behaviour-guide.md",
|
|
82
|
+
"hash": "0x056a0821aa714763"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"path": "doc/guides/layers/orient-guide.md",
|
|
86
|
+
"hash": "0x8cb92c6b4f366acb"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"path": "doc/guides/layers/product-strategy-guide.md",
|
|
90
|
+
"hash": "0x299f8885030cfc02"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"path": "doc/guides/layers/surface-guide.md",
|
|
94
|
+
"hash": "0x9281d6ca67379aa9"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"path": "doc/guides/layers/user-needs-guide.md",
|
|
98
|
+
"hash": "0x90e00fcd4243afda"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
package/dna/_vars.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@license
|
|
3
|
+
Copyright (c) dnaCopyrightHolder
|
|
4
|
+
|
|
5
|
+
Use of this source code is governed by terms that can be
|
|
6
|
+
found in the LICENSE file in the root of this package.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# Conceptual model guide
|
|
10
|
+
|
|
11
|
+
Layer 5 of 7, solution space. Skill: `/layers-conceptual-model`.
|
|
12
|
+
|
|
13
|
+
## Know what this layer is
|
|
14
|
+
|
|
15
|
+
- The objects the product recognises, their relations, states and
|
|
16
|
+
vocabulary — independent of any interface
|
|
17
|
+
- The most neglected load-bearing layer; give it more attention than feels
|
|
18
|
+
comfortable
|
|
19
|
+
- Not the users' mental model, not a database schema
|
|
20
|
+
|
|
21
|
+
## Decide
|
|
22
|
+
|
|
23
|
+
- Which objects exist and where their boundaries are
|
|
24
|
+
- How objects relate: cardinality and named roles
|
|
25
|
+
- What a user can do with each object
|
|
26
|
+
- Which states and transitions matter
|
|
27
|
+
- One name per concept, one concept per name
|
|
28
|
+
|
|
29
|
+
## Keep it honest
|
|
30
|
+
|
|
31
|
+
- Real objects only: instanceable, structured, useful; "CAC" is an
|
|
32
|
+
instance of Metric
|
|
33
|
+
- Model an attribute that names another object as a relationship
|
|
34
|
+
- No speculative additions; every element traces to a stated need
|
|
35
|
+
- Can-be-an-object is not should-be-first-class; justify persistence by a
|
|
36
|
+
concrete flow, mark bets as provisional
|
|
37
|
+
- Split generic verbs that hide different consequences: correct an address
|
|
38
|
+
vs register a move
|
|
39
|
+
- Redirect implementation talk to what the user can do
|
|
40
|
+
|
|
41
|
+
## Pick a technique
|
|
42
|
+
|
|
43
|
+
| Situation | Technique |
|
|
44
|
+
| ------------------------------ | ------------------------------------- |
|
|
45
|
+
| Material to mine | Noun foraging, OOUX |
|
|
46
|
+
| One object unclear | Object definition |
|
|
47
|
+
| Objecthood uncertain | Sketch the flow first, then formalise |
|
|
48
|
+
| Relations to check | Relational object map (`erDiagram`) |
|
|
49
|
+
| Status changes what is allowed | State diagram (`stateDiagram-v2`) |
|
|
50
|
+
| Verbs inconsistent | Action inventory across all objects |
|
|
51
|
+
| Naming contested | Ubiquitous language list |
|
|
52
|
+
| Redesign | Walk the existing product |
|
|
53
|
+
|
|
54
|
+
Probe the temporal decisions: intermediate states, read lag, relationship
|
|
55
|
+
over time, deletion semantics, history.
|
|
56
|
+
|
|
57
|
+
## Capture
|
|
58
|
+
|
|
59
|
+
- Settled object definitions, provisional ones marked
|
|
60
|
+
- Diagrams that encode a real relation or lifecycle
|
|
61
|
+
- Vocabulary decisions with rejected alternatives
|
|
62
|
+
- Open questions for engineering
|
|
63
|
+
|
|
64
|
+
## Continue
|
|
65
|
+
|
|
66
|
+
When objects and actions are stable, design how users move through them:
|
|
67
|
+
[interaction flow](interaction-flow-guide.md).
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@license
|
|
3
|
+
Copyright (c) dnaCopyrightHolder
|
|
4
|
+
|
|
5
|
+
Use of this source code is governed by terms that can be
|
|
6
|
+
found in the LICENSE file in the root of this package.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# Domain guide
|
|
10
|
+
|
|
11
|
+
Layer 2 of 7, problem space. Skill: `/layers-domain`.
|
|
12
|
+
|
|
13
|
+
## Know what this layer is
|
|
14
|
+
|
|
15
|
+
- What exists in the real world before any product: concepts, terms,
|
|
16
|
+
processes, mental models
|
|
17
|
+
- Observation, not design
|
|
18
|
+
|
|
19
|
+
## Decide
|
|
20
|
+
|
|
21
|
+
- Which key concepts exist and how they relate
|
|
22
|
+
- Which words people use, and where they conflict
|
|
23
|
+
- Where the seams are: groups using the same word differently
|
|
24
|
+
- Which events and processes structure the domain over time
|
|
25
|
+
|
|
26
|
+
## Keep it honest
|
|
27
|
+
|
|
28
|
+
- Record contradictions, do not resolve them; resolution belongs to the
|
|
29
|
+
conceptual model
|
|
30
|
+
- Stay in the real world; push back on product or interface talk
|
|
31
|
+
- Mark nouns as object / attribute / instance / unclear, filter little
|
|
32
|
+
- Say when you map team beliefs instead of researched fact
|
|
33
|
+
|
|
34
|
+
## Pick a technique
|
|
35
|
+
|
|
36
|
+
| Situation | Technique |
|
|
37
|
+
| ------------------------------- | ------------------------------ |
|
|
38
|
+
| Relations unclear | Concept map (`graph TD`) |
|
|
39
|
+
| Language contested | Terminology audit |
|
|
40
|
+
| Groups diverge | Bounded-context mapping |
|
|
41
|
+
| Process-heavy domain | Domain event storming |
|
|
42
|
+
| Knowledge lives in people | Expert interviews, shadowing |
|
|
43
|
+
| Domain produces forms, invoices | Document and artefact analysis |
|
|
44
|
+
| Established market | Competitive analysis |
|
|
45
|
+
|
|
46
|
+
## Capture
|
|
47
|
+
|
|
48
|
+
- Concept map, if it earned its place
|
|
49
|
+
- Terminology conflicts and bounded contexts
|
|
50
|
+
- Key events
|
|
51
|
+
- Noun harvest
|
|
52
|
+
|
|
53
|
+
## Continue
|
|
54
|
+
|
|
55
|
+
The noun harvest is the raw material of the
|
|
56
|
+
[conceptual model](conceptual-model-guide.md).
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@license
|
|
3
|
+
Copyright (c) dnaCopyrightHolder
|
|
4
|
+
|
|
5
|
+
Use of this source code is governed by terms that can be
|
|
6
|
+
found in the LICENSE file in the root of this package.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# Interaction flow guide
|
|
10
|
+
|
|
11
|
+
Layer 6 of 7, solution space. Skill: `/layers-interaction-flow`.
|
|
12
|
+
|
|
13
|
+
## Know what this layer is
|
|
14
|
+
|
|
15
|
+
- The places a user moves through, the affordances in each, the content
|
|
16
|
+
shown, the flow between states
|
|
17
|
+
- Above the model (what exists), below the surface (how it looks)
|
|
18
|
+
- Always for one user in one situation doing one job
|
|
19
|
+
|
|
20
|
+
## Decide
|
|
21
|
+
|
|
22
|
+
- Which places the flow moves through
|
|
23
|
+
- What the user can do in each place, and where it leads
|
|
24
|
+
- What content each place shows
|
|
25
|
+
- What happens on failure, empty and edge cases
|
|
26
|
+
- Whether the flow is as simple as it can be
|
|
27
|
+
|
|
28
|
+
## Keep it honest
|
|
29
|
+
|
|
30
|
+
- Every affordance has a named destination
|
|
31
|
+
- Edges are required steps: validation, server error, disconnect, timeout,
|
|
32
|
+
concurrent edit, empty, loading, post-action, cancel
|
|
33
|
+
- No broken objects: attributes and actions of an object stay together
|
|
34
|
+
- No isolated objects: every relation is navigable or deliberately not
|
|
35
|
+
- Vocabulary matches the ubiquitous language
|
|
36
|
+
- Name places for users; more than 5–6 places per job is a signal
|
|
37
|
+
|
|
38
|
+
## Pick a technique
|
|
39
|
+
|
|
40
|
+
| Situation | Technique |
|
|
41
|
+
| ------------------------ | ------------------------- |
|
|
42
|
+
| Default | Breadboarding |
|
|
43
|
+
| Finding unmade decisions | Walk the flow as the user |
|
|
44
|
+
| Much to plan, many users | User story mapping |
|
|
45
|
+
| Redesign | Task analysis |
|
|
46
|
+
| Channels and backstage | Service blueprinting |
|
|
47
|
+
| Orientation only | Flow diagram (`graph LR`) |
|
|
48
|
+
|
|
49
|
+
Breadboard notation:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
Place name
|
|
53
|
+
- affordance → destination place
|
|
54
|
+
[ content shown in this place ]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Capture
|
|
58
|
+
|
|
59
|
+
- The breadboard: places, affordances, destinations, content, conditions
|
|
60
|
+
- A flow diagram, if it aids orientation
|
|
61
|
+
- Open decisions and unresolved edge cases
|
|
62
|
+
- Risks that depend on unsettled lower layers
|
|
63
|
+
|
|
64
|
+
## Continue
|
|
65
|
+
|
|
66
|
+
Check that the [conceptual model](conceptual-model-guide.md) is stable,
|
|
67
|
+
then move to the [surface](surface-guide.md).
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@license
|
|
3
|
+
Copyright (c) dnaCopyrightHolder
|
|
4
|
+
|
|
5
|
+
Use of this source code is governed by terms that can be
|
|
6
|
+
found in the LICENSE file in the root of this package.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# Observed behaviour guide
|
|
10
|
+
|
|
11
|
+
Layer 1 of 7, problem space. Skill: `/layers-observed-behaviour`.
|
|
12
|
+
|
|
13
|
+
## Know what this layer is
|
|
14
|
+
|
|
15
|
+
- What users actually do, said and did — not what the team believes
|
|
16
|
+
- The source of everything above; all other layers interpret it
|
|
17
|
+
|
|
18
|
+
## Decide
|
|
19
|
+
|
|
20
|
+
- Which 2–3 questions about users need an answer
|
|
21
|
+
- Which evidence exists and how reliable it is
|
|
22
|
+
- How to gather what is missing
|
|
23
|
+
- Which patterns hold with confidence, which stay assumptions
|
|
24
|
+
|
|
25
|
+
## Keep it honest
|
|
26
|
+
|
|
27
|
+
- Stay close to raw data: quotes, actions, feelings
|
|
28
|
+
- Mark every finding: observed / inferred / assumed
|
|
29
|
+
- Name research gaps instead of papering over them
|
|
30
|
+
- Treat workarounds as strong signal
|
|
31
|
+
|
|
32
|
+
## Pick a technique
|
|
33
|
+
|
|
34
|
+
| Situation | Technique |
|
|
35
|
+
| -------------------------------- | -------------------------------------- |
|
|
36
|
+
| No research yet | Define the learning goal, then a study |
|
|
37
|
+
| Triggers and motivations unclear | JTBD interviews about a real past case |
|
|
38
|
+
| Saying differs from doing | Contextual inquiry, shadowing |
|
|
39
|
+
| Existing product | Support tickets, analytics, usability |
|
|
40
|
+
| Material exists | Extract observations, group patterns |
|
|
41
|
+
|
|
42
|
+
## Capture
|
|
43
|
+
|
|
44
|
+
- Key raw observations with their source
|
|
45
|
+
- Patterns with supporting evidence
|
|
46
|
+
- Candidate job stories with confidence
|
|
47
|
+
- Named research gaps
|
|
48
|
+
|
|
49
|
+
## Continue
|
|
50
|
+
|
|
51
|
+
Refine the candidate job stories in the [user needs](user-needs-guide.md)
|
|
52
|
+
layer; feed the nouns you heard into the [domain](domain-guide.md) layer.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@license
|
|
3
|
+
Copyright (c) dnaCopyrightHolder
|
|
4
|
+
|
|
5
|
+
Use of this source code is governed by terms that can be
|
|
6
|
+
found in the LICENSE file in the root of this package.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# Orient guide
|
|
10
|
+
|
|
11
|
+
The front door of the layer system. Skill: `/layers-orient`.
|
|
12
|
+
|
|
13
|
+
## Know what orient is
|
|
14
|
+
|
|
15
|
+
- A rapid audit across all seven layers, not a deep dive into one
|
|
16
|
+
- Answers one question: which layer needs attention most urgently?
|
|
17
|
+
- Output: a short audit table and one recommendation
|
|
18
|
+
|
|
19
|
+
## Ask three questions
|
|
20
|
+
|
|
21
|
+
- Which product or feature is this about?
|
|
22
|
+
- Which design challenge prompted this?
|
|
23
|
+
- How far along is the work: early exploration, active design, fixing an
|
|
24
|
+
existing product?
|
|
25
|
+
|
|
26
|
+
## Audit every layer
|
|
27
|
+
|
|
28
|
+
Ask one or two targeted questions per layer and rate it:
|
|
29
|
+
strong / partial / assumed / weak / not started / n/a.
|
|
30
|
+
|
|
31
|
+
| Layer | Ask |
|
|
32
|
+
| ------------------ | ---------------------------------------------------- |
|
|
33
|
+
| Observed behaviour | Research, analytics, or team belief? |
|
|
34
|
+
| Domain | How well is the space understood before the product? |
|
|
35
|
+
| User needs | Can you state the job and why it matters? |
|
|
36
|
+
| Product strategy | Which need, which business outcome, explicit? |
|
|
37
|
+
| Conceptual model | Clear, shared objects and vocabulary? |
|
|
38
|
+
| Interaction flow | Key journeys with places, steps, decision points? |
|
|
39
|
+
| Surface | Existing design system or visual language? |
|
|
40
|
+
|
|
41
|
+
## Find the bottleneck
|
|
42
|
+
|
|
43
|
+
- The bottleneck is the lowest layer rated weak, assumed or not started
|
|
44
|
+
- Name it, the missing decisions, and the risk for the layers above
|
|
45
|
+
- Flag assumed layers separately: they look solid and hide the risk
|
|
46
|
+
- Acknowledge deadlines that change the calculus; name the trade-off
|
|
47
|
+
|
|
48
|
+
## Recommend one next step
|
|
49
|
+
|
|
50
|
+
- Name the layer guide to work next and why
|
|
51
|
+
- Ask whether to run it now or to push back on the picture first
|
|
52
|
+
|
|
53
|
+
## Capture
|
|
54
|
+
|
|
55
|
+
- The audit table
|
|
56
|
+
- The bottleneck and the recommendation, one line each
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@license
|
|
3
|
+
Copyright (c) dnaCopyrightHolder
|
|
4
|
+
|
|
5
|
+
Use of this source code is governed by terms that can be
|
|
6
|
+
found in the LICENSE file in the root of this package.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# Product strategy guide
|
|
10
|
+
|
|
11
|
+
Layer 4 of 7, first layer of the solution space. Skill:
|
|
12
|
+
`/layers-product-strategy`.
|
|
13
|
+
|
|
14
|
+
## Know what this layer is
|
|
15
|
+
|
|
16
|
+
- Where understanding turns into choices: which needs to serve, which
|
|
17
|
+
business outcome to target
|
|
18
|
+
- Bets, not certainties
|
|
19
|
+
|
|
20
|
+
## Decide
|
|
21
|
+
|
|
22
|
+
- The business outcome this work serves
|
|
23
|
+
- Which opportunities connect to that outcome
|
|
24
|
+
- Which solution bets to place on them
|
|
25
|
+
- How to test the riskiest assumption cheaply
|
|
26
|
+
- Which bets come first, and why
|
|
27
|
+
|
|
28
|
+
## Keep it honest
|
|
29
|
+
|
|
30
|
+
- One measurable, bounded outcome per tree
|
|
31
|
+
- Opportunities are first-person needs anchored to a journey moment, not
|
|
32
|
+
features; apply the flip test
|
|
33
|
+
- Every opportunity connects to the outcome
|
|
34
|
+
- Every bet names its riskiest assumption; more than one bet per opportunity
|
|
35
|
+
- Every experiment is the cheapest test: days, not months
|
|
36
|
+
|
|
37
|
+
## Pick a technique
|
|
38
|
+
|
|
39
|
+
| Situation | Technique |
|
|
40
|
+
| --------------------------- | -------------------------------------- |
|
|
41
|
+
| Default | Opportunity solution tree |
|
|
42
|
+
| Chosen opportunity | Solution bets plus experiments |
|
|
43
|
+
| Many candidate features | Kano analysis, jobs portfolio |
|
|
44
|
+
| Choosing the outcome metric | HEART, North Star |
|
|
45
|
+
| Shared timeline needed | Now / next / later roadmap |
|
|
46
|
+
| Positioning, build or buy | Wardley mapping, bundling / unbundling |
|
|
47
|
+
| Which flow first | Critical user journeys |
|
|
48
|
+
|
|
49
|
+
## Capture
|
|
50
|
+
|
|
51
|
+
- The outcome
|
|
52
|
+
- The opportunity tree, grouped by journey moment
|
|
53
|
+
- The top 2–3 bets with their experiments
|
|
54
|
+
- Deferred bets and untested assumptions
|
|
55
|
+
|
|
56
|
+
## Continue
|
|
57
|
+
|
|
58
|
+
The chosen bets define what to model next in the
|
|
59
|
+
[conceptual model](conceptual-model-guide.md). Goals of a quarter live in
|
|
60
|
+
`goals` of the PM repo.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@license
|
|
3
|
+
Copyright (c) dnaCopyrightHolder
|
|
4
|
+
|
|
5
|
+
Use of this source code is governed by terms that can be
|
|
6
|
+
found in the LICENSE file in the root of this package.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# Surface guide
|
|
10
|
+
|
|
11
|
+
Layer 7 of 7, solution space. Skill: `/layers-surface`.
|
|
12
|
+
|
|
13
|
+
## Know what this layer is
|
|
14
|
+
|
|
15
|
+
- Where everything below becomes what a person encounters: words, visuals,
|
|
16
|
+
motion, feedback
|
|
17
|
+
- Surface problems are often symptoms of deeper layers
|
|
18
|
+
|
|
19
|
+
## Decide
|
|
20
|
+
|
|
21
|
+
- Whether the surface honours the model's vocabulary and objects
|
|
22
|
+
- Whether every affordance of the breadboard is present, and nothing exists
|
|
23
|
+
without a model behind it
|
|
24
|
+
- Whether the emotional register fits the users' jobs
|
|
25
|
+
- How users know what happened, is in progress, or failed
|
|
26
|
+
- What is most prominent, and whether it should be
|
|
27
|
+
- Whether everything is accessible to the users who need it
|
|
28
|
+
|
|
29
|
+
## Keep it honest
|
|
30
|
+
|
|
31
|
+
- Tell surface fixes from deeper issues; route deeper ones back to their
|
|
32
|
+
layer
|
|
33
|
+
- Terms match the ubiquitous language
|
|
34
|
+
- No shapeshifters, no masked objects
|
|
35
|
+
- Errors diagnose, explain and offer recovery
|
|
36
|
+
- Prominence reflects importance
|
|
37
|
+
- Accessibility is decided, not defaulted
|
|
38
|
+
|
|
39
|
+
## Pick a technique
|
|
40
|
+
|
|
41
|
+
| Situation | Technique |
|
|
42
|
+
| --------------------------- | -------------------------------------------- |
|
|
43
|
+
| Terms feel off | Vocabulary check |
|
|
44
|
+
| Same object looks different | Object-consistency check |
|
|
45
|
+
| Something missing or extra | Completeness check vs breadboard |
|
|
46
|
+
| Tone misaligned | Emotional-register check |
|
|
47
|
+
| Users unsure what happened | Feedback and error inventory |
|
|
48
|
+
| Too much competes | Hierarchy review |
|
|
49
|
+
| Left to defaults | Accessibility pass |
|
|
50
|
+
| Producing surface | Mockups, style tiles, prototypes, copy first |
|
|
51
|
+
|
|
52
|
+
## Capture
|
|
53
|
+
|
|
54
|
+
- Findings, each tagged surface fix or deeper-layer issue
|
|
55
|
+
- Open surface decisions with options and constraints
|
|
56
|
+
- Cross-layer issues to resolve first
|
|
57
|
+
- What already works well
|
|
58
|
+
|
|
59
|
+
## Continue
|
|
60
|
+
|
|
61
|
+
Revisit the surface after every significant change to the
|
|
62
|
+
[conceptual model](conceptual-model-guide.md) or
|
|
63
|
+
[interaction flow](interaction-flow-guide.md).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@license
|
|
3
|
+
Copyright (c) dnaCopyrightHolder
|
|
4
|
+
|
|
5
|
+
Use of this source code is governed by terms that can be
|
|
6
|
+
found in the LICENSE file in the root of this package.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# User needs guide
|
|
10
|
+
|
|
11
|
+
Layer 3 of 7, problem space. Skill: `/layers-user-needs`.
|
|
12
|
+
|
|
13
|
+
## Know what this layer is
|
|
14
|
+
|
|
15
|
+
- What users try to achieve, and why — an interpretation of observed
|
|
16
|
+
behaviour and domain knowledge
|
|
17
|
+
- Output: opportunities — needs, pains, desires
|
|
18
|
+
|
|
19
|
+
## Decide
|
|
20
|
+
|
|
21
|
+
- Who exactly the users are, and in which situation
|
|
22
|
+
- Which jobs they do: functional, emotional, social
|
|
23
|
+
- Which needs are grounded, which are assumed
|
|
24
|
+
- Which needs matter most, and why
|
|
25
|
+
|
|
26
|
+
## Keep it honest
|
|
27
|
+
|
|
28
|
+
- State the need, not the solution; push past "I want to export CSV"
|
|
29
|
+
- Strip the mechanism: the "when" must not name your current system
|
|
30
|
+
- Make the "when" picturable: an event, a feeling, a threshold
|
|
31
|
+
- Ask for emotional and social jobs explicitly
|
|
32
|
+
- Mark confidence: observed / inferred / assumed
|
|
33
|
+
|
|
34
|
+
## Pick a technique
|
|
35
|
+
|
|
36
|
+
| Situation | Technique |
|
|
37
|
+
| --------------------- | ------------------------------------------ |
|
|
38
|
+
| Default | Job stories: when, I want, so I can |
|
|
39
|
+
| Team works role-based | User stories |
|
|
40
|
+
| Large user base | Top tasks analysis |
|
|
41
|
+
| Stakeholder alignment | Persona plus scenario |
|
|
42
|
+
| Measurability matters | ODI desired outcomes |
|
|
43
|
+
| Many needs | Prioritise: importance × how poorly served |
|
|
44
|
+
|
|
45
|
+
## Capture
|
|
46
|
+
|
|
47
|
+
- Prioritised needs with confidence
|
|
48
|
+
- Surfaced but unprioritised needs
|
|
49
|
+
- Gaps and contradictions between user types
|
|
50
|
+
|
|
51
|
+
## Continue
|
|
52
|
+
|
|
53
|
+
The needs are the opportunities of the
|
|
54
|
+
[product strategy](product-strategy-guide.md). If most are assumed, go back
|
|
55
|
+
to [observed behaviour](observed-behaviour-guide.md) first.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@license
|
|
3
|
+
Copyright (c) dnaCopyrightHolder
|
|
4
|
+
|
|
5
|
+
Use of this source code is governed by terms that can be
|
|
6
|
+
found in the LICENSE file in the root of this package.
|
|
7
|
+
-->
|
|
8
|
+
|
|
9
|
+
# Layers guide
|
|
10
|
+
|
|
11
|
+
## Know the layer system
|
|
12
|
+
|
|
13
|
+
- "Layers of Product Design" splits design work into seven layers in
|
|
14
|
+
three zones; these guides follow
|
|
15
|
+
[layers-skills](https://github.com/jamiemill/layers-skills) by Jamie
|
|
16
|
+
Mill (MIT)
|
|
17
|
+
- Lower layers are foundations for upper ones; a weak lower layer creates
|
|
18
|
+
debt in every layer above
|
|
19
|
+
- Enter at any layer, but check the layers below before building upward
|
|
20
|
+
|
|
21
|
+
Problem space — knowledge gathered from reality:
|
|
22
|
+
|
|
23
|
+
- 1 [Observed behaviour](layers/observed-behaviour-guide.md) — what users
|
|
24
|
+
actually do
|
|
25
|
+
- 2 [Domain](layers/domain-guide.md) — what exists before our product
|
|
26
|
+
- 3 [User needs](layers/user-needs-guide.md) — what users try to achieve,
|
|
27
|
+
and why
|
|
28
|
+
|
|
29
|
+
Solution space — deliberate decisions about what to build:
|
|
30
|
+
|
|
31
|
+
- 4 [Product strategy](layers/product-strategy-guide.md) — which needs we
|
|
32
|
+
serve, for which outcome
|
|
33
|
+
- 5 [Conceptual model](layers/conceptual-model-guide.md) — which objects,
|
|
34
|
+
relations and words
|
|
35
|
+
- 6 [Interaction flow](layers/interaction-flow-guide.md) — which places,
|
|
36
|
+
actions and paths
|
|
37
|
+
- 7 [Surface](layers/surface-guide.md) — what users see, read and hear
|
|
38
|
+
|
|
39
|
+
## Treat design as decision making
|
|
40
|
+
|
|
41
|
+
- Every layer makes decisions; artefacts only record them
|
|
42
|
+
- Four kinds of progress: make a decision, uncover an unmade one, evaluate
|
|
43
|
+
a risky one, prioritise
|
|
44
|
+
- Work one layer at a time; do not mix problem space and solution space
|
|
45
|
+
- Flag bad decisions, not only missing ones
|
|
46
|
+
- Capture decisions, not transcripts; keep the record short
|
|
47
|
+
|
|
48
|
+
## Use the skills
|
|
49
|
+
|
|
50
|
+
- Load `/layers-intro` at the start of every design session
|
|
51
|
+
- Run `/layers-orient` when unsure which layer needs attention, see the
|
|
52
|
+
[orient guide](layers/orient-guide.md)
|
|
53
|
+
- Run the skill of the layer you work on: `/layers-observed-behaviour`,
|
|
54
|
+
`/layers-domain`, `/layers-user-needs`, `/layers-product-strategy`,
|
|
55
|
+
`/layers-conceptual-model`, `/layers-interaction-flow`, `/layers-surface`
|
|
56
|
+
- Each skill reads its guide; a guide is a library of techniques, not a
|
|
57
|
+
script: pick one technique for the live decision, work it, capture the
|
|
58
|
+
residue
|
|
59
|
+
|
|
60
|
+
## Record the results
|
|
61
|
+
|
|
62
|
+
- Write the residue of a session into the project management repo, see the
|
|
63
|
+
[PM repo guide](pm-repo-guide.md#use-the-design-layers)
|
|
64
|
+
- One decision per file in `concepts/decisions`; everything else in the
|
|
65
|
+
topic, ux or goal file it belongs to
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layers-conceptual-model
|
|
3
|
+
description: Define the product's objects, relationships, states and vocabulary independently of any interface
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /layers-conceptual-model
|
|
7
|
+
|
|
8
|
+
Read
|
|
9
|
+
[conceptual-model-guide.md](../../../doc/guides/layers/conceptual-model-guide.md)
|
|
10
|
+
and work by it. Read
|
|
11
|
+
[layers-guide.md](../../../doc/guides/layers-guide.md) first if this is the
|
|
12
|
+
first layer skill in the session.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layers-domain
|
|
3
|
+
description: Map a domain's concepts, terminology conflicts and bounded contexts — the raw material of the conceptual model
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /layers-domain
|
|
7
|
+
|
|
8
|
+
Read
|
|
9
|
+
[domain-guide.md](../../../doc/guides/layers/domain-guide.md)
|
|
10
|
+
and work by it. Read
|
|
11
|
+
[layers-guide.md](../../../doc/guides/layers-guide.md) first if this is the
|
|
12
|
+
first layer skill in the session.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layers-interaction-flow
|
|
3
|
+
description: Map places, affordances, edge cases and failure paths of a flow without committing to visual form
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /layers-interaction-flow
|
|
7
|
+
|
|
8
|
+
Read
|
|
9
|
+
[interaction-flow-guide.md](../../../doc/guides/layers/interaction-flow-guide.md)
|
|
10
|
+
and work by it. Read
|
|
11
|
+
[layers-guide.md](../../../doc/guides/layers-guide.md) first if this is the
|
|
12
|
+
first layer skill in the session.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layers-intro
|
|
3
|
+
description: Framework orientation for Layers of Product Design — load this first; provides the context all other layers skills depend on
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /layers-intro
|
|
7
|
+
|
|
8
|
+
Read [layers-guide.md](../../../doc/guides/layers-guide.md) and work by it
|
|
9
|
+
for the rest of the session.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layers-observed-behaviour
|
|
3
|
+
description: Plan user research and synthesise it into confidence-rated findings about what users actually do
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /layers-observed-behaviour
|
|
7
|
+
|
|
8
|
+
Read
|
|
9
|
+
[observed-behaviour-guide.md](../../../doc/guides/layers/observed-behaviour-guide.md)
|
|
10
|
+
and work by it. Read
|
|
11
|
+
[layers-guide.md](../../../doc/guides/layers-guide.md) first if this is the
|
|
12
|
+
first layer skill in the session.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layers-orient
|
|
3
|
+
description: Diagnostic audit across all seven layers — identifies the bottleneck layer and recommends where to focus
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /layers-orient
|
|
7
|
+
|
|
8
|
+
Read
|
|
9
|
+
[orient-guide.md](../../../doc/guides/layers/orient-guide.md)
|
|
10
|
+
and work by it. Read
|
|
11
|
+
[layers-guide.md](../../../doc/guides/layers-guide.md) first if this is the
|
|
12
|
+
first layer skill in the session.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layers-product-strategy
|
|
3
|
+
description: Connect user opportunities to business outcomes and solution bets, and test the riskiest assumptions cheaply
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /layers-product-strategy
|
|
7
|
+
|
|
8
|
+
Read
|
|
9
|
+
[product-strategy-guide.md](../../../doc/guides/layers/product-strategy-guide.md)
|
|
10
|
+
and work by it. Read
|
|
11
|
+
[layers-guide.md](../../../doc/guides/layers-guide.md) first if this is the
|
|
12
|
+
first layer skill in the session.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layers-surface
|
|
3
|
+
description: Audit and decide the surface against the layers below — vocabulary, consistency, feedback, hierarchy, accessibility
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /layers-surface
|
|
7
|
+
|
|
8
|
+
Read
|
|
9
|
+
[surface-guide.md](../../../doc/guides/layers/surface-guide.md)
|
|
10
|
+
and work by it. Read
|
|
11
|
+
[layers-guide.md](../../../doc/guides/layers-guide.md) first if this is the
|
|
12
|
+
first layer skill in the session.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layers-user-needs
|
|
3
|
+
description: Elicit and prioritise user needs, pains and desires — the opportunities that feed product strategy
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /layers-user-needs
|
|
7
|
+
|
|
8
|
+
Read
|
|
9
|
+
[user-needs-guide.md](../../../doc/guides/layers/user-needs-guide.md)
|
|
10
|
+
and work by it. Read
|
|
11
|
+
[layers-guide.md](../../../doc/guides/layers-guide.md) first if this is the
|
|
12
|
+
first layer skill in the session.
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ggdna/dna-design-layers",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "DNA layer: the seven layers of product design - guides and /layers-* skills",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"dna",
|
|
7
|
+
"helix",
|
|
8
|
+
"conventions",
|
|
9
|
+
"scaffolding"
|
|
10
|
+
],
|
|
11
|
+
"homepage": "https://github.com/ggdna/dna_design_layers",
|
|
12
|
+
"bugs": "https://github.com/ggdna/dna_design_layers/issues",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/ggdna/dna_design_layers.git"
|
|
17
|
+
},
|
|
18
|
+
"type": "module",
|
|
19
|
+
"files": [
|
|
20
|
+
"dna",
|
|
21
|
+
"README.md",
|
|
22
|
+
"LICENSE"
|
|
23
|
+
],
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=22"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"test:dart": "dart test",
|
|
32
|
+
"test": "pnpm run test:dart",
|
|
33
|
+
"prepublishOnly": "pnpm run test",
|
|
34
|
+
"format": "prettier --write .",
|
|
35
|
+
"format:check": "prettier --check ."
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^26.4.1",
|
|
39
|
+
"prettier": "^3.9.6"
|
|
40
|
+
}
|
|
41
|
+
}
|