@haus-tech/haus-workflow 5.6.1 → 5.7.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/CHANGELOG.md +2 -0
- package/library/global/agents/request-assessor.md +52 -51
- package/library/global/agents/request-scorer.md +52 -52
- package/library/global/agents/request-specifier-eskalerad.md +46 -44
- package/library/global/agents/request-specifier.md +43 -40
- package/library/global/skills/request/SKILL.md +1415 -1360
- package/library/global/skills/request/scripts/contract-check.mjs +17 -1
- package/library/global/skills/request/scripts/kontroll.mjs +7 -5
- package/library/global/skills/request/scripts/korning.mjs +16 -3
- package/library/global/skills/request/scripts/lib.mjs +289 -17
- package/library/global/skills/request/scripts/precheck.mjs +105 -40
- package/library/global/skills/request-assess-impact/SKILL.md +144 -140
- package/library/global/skills/request-score/SKILL.md +290 -266
- package/library/global/skills/request-sync/SKILL.md +246 -245
- package/library/global/skills/request-write-spec/SKILL.md +63 -61
- package/library/global/skills/request-write-spec/references/specformat.md +64 -60
- package/package.json +1 -1
|
@@ -1,126 +1,128 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: request-write-spec
|
|
3
|
-
description:
|
|
3
|
+
description: Write a spec in the Haus spec format from a raw customer request, without asking questions back. Always use when the user wants to "speca", "skriv en spec", "gör en spec av det här", pastes a customer request or ticket that should become a spec, or runs requests through the maintenance model's flow. Also for rewriting an existing spec into the format. Output is finished specs plus a reviewer block for human validation, never follow-up questions.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# request-write-spec
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
You turn a raw customer request into one or more specs in the Haus spec format. The spec is the decision point with the customer: the customer reads it, sees the price (set later, by the scoring, never by you) and answers yes, no, or revises. A human at Haus validates your spec before it reaches the customer.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
The most important thing to understand: **you never ask questions back.** The flow is built for fast iteration: the customer files a request, you spec it directly, the human validates. A question from you stops the line. When the source material is not enough, you make the best reasonable assumption, write the spec as if the assumption holds, and state the assumption openly in the reviewer block. The reviewer corrects you in seconds; an unanswered question costs days. A wrong assumption, visibly stated, is therefore a _good_ outcome. That is how the system is meant to work.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Read `references/specformat.md` before you write your first spec in a session. It contains the complete format with examples. The core follows here.
|
|
13
13
|
|
|
14
|
-
**
|
|
14
|
+
**If the file cannot be read: write no spec.** Say that `references/specformat.md` is missing and that the skill cannot run without it. The headings are listed below and the temptation to run anyway is strong, but the examples and edge cases exist only in the reference file, and a spec that looks right but misses them cannot be caught in review.
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## The format
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Every spec has exactly these headings, in this order. The last three only when needed. Each heading is shown as its Swedish / English literal (see The customer's language below).
|
|
19
19
|
|
|
20
|
-
**
|
|
20
|
+
**Title**: the changed state, not the task. "Verksamheter sätter upp sin egen teamstruktur", not "Bygg adminvy för team". The customer prioritises on the title; a task title makes them prioritise work instead of outcomes.
|
|
21
21
|
|
|
22
|
-
**Problem
|
|
22
|
+
**Problem**: one or two sentences: how things are today and what it costs in everyday work. Only the problem. Do not write "det här löser vi genom att…": that is the next heading's job.
|
|
23
23
|
|
|
24
|
-
**Lösning**
|
|
24
|
+
**Lösning** / **Solution**: 2–4 sentences that let the reader picture the change: what appears, where, how it is used. The solution as it is _experienced_, never as it is built; technology, data model and work steps belong in the impact analysis, not here. Write in declarative form. Words like "förslagsvis", "alternativt", "beroende på" do not belong in a spec: they mean a decision is missing.
|
|
25
25
|
|
|
26
|
-
**När det är klart**
|
|
26
|
+
**När det är klart** / **Done when**: numbered list, 2–5 points. Each point is something the customer can verify for themselves afterwards. If a consequence is permanent or irreversible ("deleted data cannot be restored", point 3 in the example at the end), it goes here as its own point: that is what the customer needs to know before approving.
|
|
27
27
|
|
|
28
|
-
**Ingår inte**
|
|
28
|
+
**Ingår inte** / **Not included**: only what could reasonably be mistaken for included. Usually one line.
|
|
29
29
|
|
|
30
|
-
**Utseende** _(
|
|
30
|
+
**Utseende** / **Appearance** _(when needed)_: when the item has a visible surface: which existing pattern it follows, or that it gets a new one.
|
|
31
31
|
|
|
32
|
-
**Kräver** _(
|
|
32
|
+
**Kräver** / **Requires** _(when needed)_: what must be done first.
|
|
33
33
|
|
|
34
|
-
**Villkor** _(
|
|
34
|
+
**Villkor** / **Conditions** _(when needed)_: when the item rests on something that cannot be verified in advance: "Bygger på att X. Faller det avbryter vi utan kostnad."
|
|
35
35
|
|
|
36
|
-
##
|
|
36
|
+
## The rules
|
|
37
37
|
|
|
38
|
-
**
|
|
38
|
+
**One decision per spec.** If the customer might want to say yes to half of it, it is two specs: then write two. A request that contains several user stories or several independent changes (a staff view _and_ a statistics view _and_ a TV mode) becomes several specs, and you note in the reviewer block that they belong together as a bundle.
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
The obvious case is several things that barely belong together. The hard case is a cohesive feature where one part still carries value of its own: "the notification can be dismissed and is marked as read" looks like one thing but is two. The test question: **can part one be deployed and used without part two?** Yes, and it has value of its own for the user → two specs, where part two gets `Kräver: del ett`. No, the part is meaningless alone → one spec.
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
The question is not aesthetic. The score is set per item, so an unsplit item accumulates criteria and can be priced one step higher than the same work split. Split too aggressively and you lower the price below what the work costs; do not split at all and you raise it. Ask the question on every request that has more than one requirement, and state in the reviewer block when you split, or when you considered splitting and chose not to.
|
|
43
43
|
|
|
44
|
-
**
|
|
44
|
+
**No "or" in the list.** An "or" (`eller`) in an outcome point is an undecided choice in disguise. Settle it (see below); never write it in.
|
|
45
45
|
|
|
46
|
-
**
|
|
46
|
+
**Look for hidden outcome choices.** Some questions look like technical details but decide what the user actually gets: "should it come back on the next device?", "does it apply only to this user or to everyone?", "is the change visible immediately or at the next login?". Such questions are spec questions, not build decisions, and they must be answered here: as an acceptance criterion if the answer is given, under _Not included_ if the boundary is the answer, and as an open question in the reviewer block if it cannot be decided from the source material.
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
The test question: **would the user notice a difference between the alternatives?** Yes → spec question, answer it. No → build decision, it is taken in the impact analysis and you must not touch it.
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
If you miss such a question, it becomes a silent choice further down the chain, made by someone who judges technology and not needs, and then something gets priced that nobody decided.
|
|
51
51
|
|
|
52
|
-
**
|
|
52
|
+
**The solution points to the list.** Every sentence under Solution must correspond to a point under Done when. A solution sentence without a point is either a missing outcome or a separate item that has crept in; in the latter case, break it out into its own spec.
|
|
53
53
|
|
|
54
|
-
**
|
|
54
|
+
**No time, no price.** Hours, estimates and kronor do not exist in the spec. The price is set by the scoring and meets the customer in the proposal. If the customer's request contains time words or amounts: discard them, they affect nothing.
|
|
55
55
|
|
|
56
|
-
**
|
|
56
|
+
**One screen.** If the spec needs scrolling, it almost always contains two decisions.
|
|
57
57
|
|
|
58
|
-
**
|
|
58
|
+
**The customer's language.** The spec is read by the customer. No internal terms (protocol terms, repo names, "backlog-post"), no story template ("Som X vill jag Y"). The spec is written in the request's language, Swedish or English, and the headings are taken from the spec format's heading table in the same language as the body text, never mixed. The reviewer block is internal and always written in English. Its heading is `## For the reviewer` and its row labels are the English ones in the template under Output. If the prompt gives `SPRÅK:`, the spec's language is settled there.
|
|
59
59
|
|
|
60
|
-
##
|
|
60
|
+
## The normal case: a title and one sentence
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
Do not count on prepared source material. The customer's request usually looks like this:
|
|
63
63
|
|
|
64
64
|
> _Administratörsvy för verksamheter_
|
|
65
65
|
> Administratör i projektet (t.ex. Ann-Sofie) kan själv lägga till nya verksamheter
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
That is the whole input. Your job is the preparation: growing a spec out of it. A human writing a spec does it with knowledge of the project, the customer and the codebase, and it is that knowledge that makes the guesses qualified. Do the same:
|
|
68
68
|
|
|
69
|
-
**
|
|
69
|
+
**Search before you assume.** Take stock of what the session gives you access to and use it. Which sources exist depends on the assignment: in an existing system the codebase is best (does the view already exist? which pattern is used for similar lists? what are the concepts called in the code?), followed by earlier specs and tickets for the same customer (how were similar items solved? which terms does the customer use, "skattning", "skift", "verksamhet"?). In a new project there is no codebase; then the brief, the quote material or other project material is the source, and the solution is anchored in what that material says about the audience, flows and the customer's existing systems. What you find in the sources is not assumptions, it is facts, and they make the spec genuinely accurate. Only when a question cannot be answered from what exists does it become an assumption in the reviewer block. Preferably write in the reviewer block _where_ you got the most important facts ("the pattern exists in the user management view", "per the brief, page 2"); it lets the reviewer tell verified from guessed in a second.
|
|
70
70
|
|
|
71
|
-
**
|
|
71
|
+
**Look for what already exists before you write the Solution.** Search the source manifest (`KÄLLOR:`) and, with Grep, the repo for a built-in feature of the platform or an already installed package that does what the request asks for: a picker, a menu, an export, a permission model that already exists. Report the finding in the reviewer block under _Decisions I made_ or _Price-decisive open choice_, even when you found nothing ("no built-in surface for X found in KÄLLOR or the repo"). What you have not looked for you cannot deliberately rule out, and an unwitting custom build is the most expensive choice the spec can make for the customer (see the rule under Output).
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
Then, for the writing itself:
|
|
74
74
|
|
|
75
|
-
**
|
|
75
|
+
**Derive the problem from the request.** "Kan själv lägga till" means that someone today cannot do it themselves: it is done via Haus or not at all. That is the problem line. You do not need to know the details; write the most likely everyday situation and state it as an assumption if you are unsure.
|
|
76
76
|
|
|
77
|
-
**
|
|
77
|
+
**Anchor the solution in what exists.** If there is a known pattern in the system (an existing admin view, a list, a picker), hang the new capability on it. In a new project: anchor in the brief's description of flows and users. If you know nothing at all: choose the simplest conventional pattern and state the choice. Never write "en lämplig vy": that pushes the decision onto the reader.
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
The same format also works as quote material: a bundle of specs from a brief is in practice a scope, and the rules (no "or", consequences visible, boundaries under Not included) do the same job there. Change nothing in the way you work: write specs as usual, one per decision.
|
|
80
80
|
|
|
81
|
-
**
|
|
81
|
+
**Do not inflate the list.** Thin source material is not a mandate to invent. "Kan lägga till verksamheter" gives an outcome list about adding and about what is added becoming usable; not editing, not deletion, not permission administration. The neighbouring features belong under **Ingår inte** / **Not included**, where they do double duty: they protect the scope and they show the customer what it might also want to order. A spec from a one-liner typically has 2–3 outcome points and a full reviewer block, not the other way round.
|
|
82
82
|
|
|
83
|
-
**
|
|
83
|
+
**Uncertainty lives in the reviewer block, not in the spec.** The spec is read by the customer and must be equally confident in tone however thin the source material was. The difference between rich and thin source material must show in the reviewer block's length, not in the spec's.
|
|
84
84
|
|
|
85
|
-
##
|
|
85
|
+
## When the source material is not enough
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
Three situations, three different ways of handling them, and none of them is to ask:
|
|
88
88
|
|
|
89
|
-
**
|
|
89
|
+
**A choice you can reasonably decide** (e.g. "numbered teams or freely named?"): choose what is most likely right for the customer, write the spec accordingly, and state the choice under _Decisions I made_ in the reviewer block with a one-line rationale. The reviewer changes it if you chose wrong.
|
|
90
90
|
|
|
91
|
-
**
|
|
91
|
+
**A value someone else should decide** (e.g. "a limit at 12, 18 or 24 months?"): make the value configurable in the solution so that the question stops being a question. "Gränsen ändras utan nytt bygge" is an outcome point; the exact value is a setting, not a spec decision.
|
|
92
92
|
|
|
93
|
-
**
|
|
93
|
+
**A choice that cannot be decided without the customer** (design questions, UX direction, an unknown cause of a fault, or a choice that affects other items): do NOT write a pretend spec. Write the item in the **candidate form** (see `references/specformat.md`, section Candidate form): the title, directly under it the marker line `**Koncept-kandidat**` (form unknown) or `**Diagnos-kandidat**` (cause unknown), in English `**Concept candidate**` / `**Diagnosis candidate**`, then **Problem** and what is known under Not included, Requires or Conditions. No Solution and no Done when: a candidate has no outcome to promise, and with a Solution it is no longer a candidate. The form is unambiguous on purpose: the form check reads the marker and the flow stops the item as KONCEPT or DIAGNOS without analysis or score. Also name the candidate under _Flags_ in the reviewer block, with what needs to be decided.
|
|
94
94
|
|
|
95
95
|
## Output
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
Write each spec as its own block, exactly per the format. After EVERY spec: its own **reviewer block** (`## For the reviewer`) for that spec alone, internal, never sent to the customer. In a bundle each block carries only what concerns its own spec; what concerns the bundle as a whole (that the parts belong together, their order) goes under Flags in the first spec's block. A block shared across several specs is rejected by the form check (ADR-0118):
|
|
98
98
|
|
|
99
99
|
```
|
|
100
100
|
---
|
|
101
|
-
##
|
|
102
|
-
|
|
103
|
-
**
|
|
104
|
-
**
|
|
105
|
-
|
|
106
|
-
**
|
|
107
|
-
**
|
|
108
|
-
**
|
|
101
|
+
## For the reviewer
|
|
102
|
+
|
|
103
|
+
**Assumptions:** [interpretations of unclear source material, one line each; "none" if none]
|
|
104
|
+
**Decisions I made:** [decisions you took on your own authority + a one-line rationale; mark the ones that affect what the user gets, they are spec decisions and those are what the reviewer must look at]
|
|
105
|
+
**Open outcome choices:** [questions about what the user gets that could not be decided from the source material; "none" if none. Pure build decisions do not belong here]
|
|
106
|
+
**Price-decisive open choice:** [no · or "yes: <the choice in one sentence, in the customer's language>" when the alternatives differ in what must be built and you cannot pick one without guessing the customer's intent. Built-in feature versus custom build is ALWAYS a yes with both alternatives named, see below. A yes stops the item before analysis until the choice is settled; a choice already listed under "## Avgjorda val" in KÄLLOR is never flagged]
|
|
107
|
+
**Flags:** [Concept/Diagnosis candidate with reason (the spec itself carries the marker line, this is the reviewer's summary) · suspected bundle/dependency on another item · anything that appears to touch permissions, payment, irreversible data or personal data]
|
|
108
|
+
**Struck from the source:** [time words, amounts, internal notes that do not belong in a spec]
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
**
|
|
111
|
+
**Settled choices in KÄLLOR.** Under `## Avgjorda val` in KÄLLOR are choices a human has already made. They are fixed input: write the spec from them and never flag them as open or price-decisive.
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
The permissions/payment/data flag exists because the scoring weighs such items more heavily; the reviewer should not have to discover that on their own.
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
The two choice rows are separate because they ask different things of the reviewer: the first is decisions already taken that only need confirming, the second is holes in the spec that must be filled before the item moves on. An open outcome choice left in the first row looks like a decision taken and passes review.
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
Price-decisive open choice is the only thing in the reviewer block that stops the item. Ordinary open outcome choices are resolved by the scorer's four-step rule; this row is for the choice where two alternatives give two different prices and only the customer can choose.
|
|
118
118
|
|
|
119
|
-
**
|
|
119
|
+
**Custom solution versus platform feature.** If the source manifest, or your own search of the repo, turns up a built-in feature of the platform or an already installed package that covers the request, and you choose to build a custom surface instead, or conversely rule out a working built-in surface in favour of a custom one, it is ALWAYS `Price-decisive open choice: yes` with both alternatives named (built-in feature and custom build respectively), never an entry under Decisions I made. The price difference between the two is at its largest exactly there, and only the customer can choose. A custom build that does not even mention the built-in surface looks like the only way, and the customer pays three times the price without having chosen it.
|
|
120
120
|
|
|
121
|
-
##
|
|
121
|
+
## Example in brief
|
|
122
122
|
|
|
123
|
-
|
|
123
|
+
Raw request:
|
|
124
|
+
|
|
125
|
+
> _"Som chef vill jag själv kunna radera en skattning så att olämpligt innehåll kan tas bort direkt utan att ringa Haus."_
|
|
124
126
|
|
|
125
127
|
> **Chefer raderar olämpliga skattningar själva**
|
|
126
128
|
>
|
|
@@ -136,6 +138,6 @@ Rått önskemål: _"Som chef vill jag själv kunna radera en skattning så att o
|
|
|
136
138
|
> 2. Radering kräver en bekräftelse först
|
|
137
139
|
> 3. Raderat går inte att återskapa
|
|
138
140
|
|
|
139
|
-
|
|
141
|
+
Note point 3: it was not in the request; it is the consequence the customer needs before approving. The reviewer block flags: _touches irreversible data handling_.
|
|
140
142
|
|
|
141
|
-
|
|
143
|
+
More complete examples, including the cases with several specs from one request and the open question that became a setting, are in `references/specformat.md`.
|
|
@@ -1,46 +1,48 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Spec format
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
_Draft v0.3 · Internal. The form of the spec: the document that describes what we have understood and what will be different. The spec triggers analysis and pricing; the price belongs to the proposal the customer then takes a position on, never to the spec itself. Classification and technical analysis do not appear here either._
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## What the spec is
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
The customer submits a request, well or poorly described. We reformulate it into our understanding of what is to be achieved: that is the spec. The analysis sets the price from it, and the customer gets spec and price together as a proposal: approve, decline or revise, where a revision triggers new pricing.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
The spec is also the scope boundary. The price never changes after the build starts, which makes the spec what decides what was included, in everyday work, every time someone wonders whether something was part of it.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
You will read many and the customer will read many. That is why the form is fixed (the same headings in the same order every time, so the eye knows where to land) and brevity is a rule, not an ambition.
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## The form
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Every spec has exactly these headings, in this order. The last three appear only when needed. Each heading is shown as its Swedish / English literal (see Language below).
|
|
20
20
|
|
|
21
|
-
**
|
|
21
|
+
**Title**: the changed state, not the task. "Verksamheter sätter upp sin egen teamstruktur", not "Bygg adminvy för team". The title is what the customer prioritises on in the backlog.
|
|
22
22
|
|
|
23
|
-
**Problem
|
|
23
|
+
**Problem**: one or two sentences on how things are today and what it costs in everyday work. Only the problem; what we do about it goes under the next heading.
|
|
24
24
|
|
|
25
|
-
**Lösning**
|
|
25
|
+
**Lösning** / **Solution**: 2–4 sentences that let the reader picture the change: what appears, where, and how it is used. The solution as it is experienced, never as it is built; technology, data model and work steps live in the impact analysis. A statement, not a proposal: if the solution has not been chosen, the item is a KONCEPT, not a spec.
|
|
26
26
|
|
|
27
|
-
**När det är klart**
|
|
27
|
+
**När det är klart** / **Done when**: numbered list, 2–5 points. Each point is something the customer can verify for themselves afterwards. No "or" (`eller`).
|
|
28
28
|
|
|
29
|
-
**Ingår inte**
|
|
29
|
+
**Ingår inte** / **Not included**: only what could reasonably be misunderstood as included. Usually one line, sometimes none at all.
|
|
30
30
|
|
|
31
|
-
**Utseende** _(
|
|
31
|
+
**Utseende** / **Appearance** _(when needed)_: when the item has a visible surface: which existing pattern it follows, or that it gets a new one.
|
|
32
32
|
|
|
33
|
-
**Kräver** _(
|
|
33
|
+
**Kräver** / **Requires** _(when needed)_: what must be done first.
|
|
34
34
|
|
|
35
|
-
**Villkor** _(
|
|
35
|
+
**Villkor** / **Conditions** _(when needed)_: when the item rests on something we cannot verify in advance. "Bygger på att X. Faller det avbryter vi utan kostnad."
|
|
36
36
|
|
|
37
|
-
###
|
|
37
|
+
### Language
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
The spec is written in the request's language, Swedish or English. The headings
|
|
40
|
+
are taken from the table below in the same language as the body text, never
|
|
41
|
+
mixed: the customer sees the headings, and an English spec under Swedish
|
|
42
|
+
headings reads as a copy-paste error. The reviewer block is internal and always
|
|
43
|
+
written in English. Its heading is `## For the reviewer` and its row labels are
|
|
44
|
+
the English ones (`**Assumptions:**`, `**Decisions I made:**`, and so on).
|
|
45
|
+
The form check knows both columns and rejects a spec that mixes them.
|
|
44
46
|
|
|
45
47
|
| Svenska | English |
|
|
46
48
|
| ---------------- | ------------ |
|
|
@@ -52,26 +54,26 @@ Formkontrollen känner båda kolumnerna och fäller en spec som blandar dem.
|
|
|
52
54
|
| Kräver | Requires |
|
|
53
55
|
| Villkor | Conditions |
|
|
54
56
|
|
|
55
|
-
###
|
|
57
|
+
### Candidate form
|
|
56
58
|
|
|
57
|
-
|
|
58
|
-
UX
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
When the form or the cause cannot be decided without the customer (a design
|
|
60
|
+
question, UX direction, an unknown cause of a fault), no pretend spec is
|
|
61
|
+
written. The item is written in candidate form: the title, a marker line
|
|
62
|
+
directly under it, then Problem. Solution and Done when do not exist, and that
|
|
63
|
+
is the whole point: a candidate has no outcome to promise yet. Not included,
|
|
64
|
+
Requires and Conditions may be included when they are known.
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
The marker line is one of two, as a bold line of its own:
|
|
65
67
|
|
|
66
|
-
| Svenska | English |
|
|
67
|
-
| ---------------------- | ------------------------- |
|
|
68
|
-
| `**Koncept-kandidat**` | `**Concept candidate**` | KONCEPT,
|
|
69
|
-
| `**Diagnos-kandidat**` | `**Diagnosis candidate**` | DIAGNOS,
|
|
68
|
+
| Svenska | English | Outcome |
|
|
69
|
+
| ---------------------- | ------------------------- | ------------------------------------------------------ |
|
|
70
|
+
| `**Koncept-kandidat**` | `**Concept candidate**` | KONCEPT, the form must be worked out with the customer |
|
|
71
|
+
| `**Diagnos-kandidat**` | `**Diagnosis candidate**` | DIAGNOS, the cause must be investigated first |
|
|
70
72
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
A candidate never goes to analysis or scoring. The form check reads the marker
|
|
74
|
+
and the flow stops the item as KONCEPT or DIAGNOS directly, so that it reaches
|
|
75
|
+
the customer dialogue without costing an assessment. If you write a candidate
|
|
76
|
+
with a Solution, it is no longer a candidate, and the form check rejects it.
|
|
75
77
|
|
|
76
78
|
> **Förhandsgranskning visar ändringen innan den publiceras**
|
|
77
79
|
>
|
|
@@ -84,27 +86,27 @@ en Lösning är det ingen kandidat längre, och formkontrollen fäller den.
|
|
|
84
86
|
|
|
85
87
|
---
|
|
86
88
|
|
|
87
|
-
##
|
|
89
|
+
## The rules
|
|
88
90
|
|
|
89
|
-
**
|
|
91
|
+
**One decision per spec.** If the customer might conceivably want to say yes to half, it is two specs. If they still belong together, they are delivered as a bundle, but they are written separately, because the spec is what the customer answers.
|
|
90
92
|
|
|
91
|
-
**
|
|
93
|
+
**The solution points to the list.** Every sentence under Solution must correspond to a point under Done when. A solution sentence without a point is either an outcome missing from the list, or a separate item that has crept in.
|
|
92
94
|
|
|
93
|
-
**
|
|
95
|
+
**No "or" in the list.** If a point needs an _or_ (`eller`), the decision has not been taken, and then it is not a spec. What is missing is either a choice (then a KONCEPT goes to the customer instead) or a value someone else should decide, and then we make the value configurable so that the question stops being a question.
|
|
94
96
|
|
|
95
|
-
**
|
|
97
|
+
**The consequence goes in the list.** If something is permanent, irreversible or replaces something existing, it belongs to what the customer gets, not to a note at the bottom.
|
|
96
98
|
|
|
97
|
-
**
|
|
99
|
+
**The list is the negotiation surface.** If the customer wants a lower price, it strikes a point, and the item is repriced. Hence numbered, hence short points, hence one thing per point.
|
|
98
100
|
|
|
99
|
-
**
|
|
101
|
+
**No time, no price.** Hours do not exist in the format. The price is set by the analysis and meets the customer in the proposal, never in the spec.
|
|
100
102
|
|
|
101
|
-
**
|
|
103
|
+
**One screen.** If the spec needs scrolling, it almost always contains two decisions.
|
|
102
104
|
|
|
103
105
|
---
|
|
104
106
|
|
|
105
|
-
##
|
|
107
|
+
## Examples
|
|
106
108
|
|
|
107
|
-
###
|
|
109
|
+
### The smallest possible
|
|
108
110
|
|
|
109
111
|
> **Chefer raderar olämpliga skattningar själva**
|
|
110
112
|
>
|
|
@@ -120,7 +122,7 @@ en Lösning är det ingen kandidat längre, och formkontrollen fäller den.
|
|
|
120
122
|
> 2. Radering kräver en bekräftelse först
|
|
121
123
|
> 3. Raderat går inte att återskapa
|
|
122
124
|
|
|
123
|
-
###
|
|
125
|
+
### With a dependency
|
|
124
126
|
|
|
125
127
|
> **Verksamheter sätter upp sin egen teamstruktur**
|
|
126
128
|
>
|
|
@@ -143,7 +145,7 @@ en Lösning är det ingen kandidat längre, och formkontrollen fäller den.
|
|
|
143
145
|
> **Kräver**
|
|
144
146
|
> Administratörsvyn för verksamheter.
|
|
145
147
|
|
|
146
|
-
###
|
|
148
|
+
### Where an open question became a setting
|
|
147
149
|
|
|
148
150
|
> **Gammal skattningsdata raderas automatiskt**
|
|
149
151
|
>
|
|
@@ -162,24 +164,26 @@ en Lösning är det ingen kandidat längre, och formkontrollen fäller den.
|
|
|
162
164
|
> **Ingår inte**
|
|
163
165
|
> Att återskapa raderad data.
|
|
164
166
|
|
|
165
|
-
|
|
167
|
+
The question of whether the limit should be at 12, 18 or 24 months is not in the spec. It became point 2.
|
|
166
168
|
|
|
167
169
|
---
|
|
168
170
|
|
|
169
|
-
##
|
|
171
|
+
## Open
|
|
170
172
|
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
-
|
|
173
|
+
- Whether Appearance should be a heading the customer sees or a position we only take internally
|
|
174
|
+
- What happens to a revised spec: a new version or a new item
|
|
175
|
+
- How the proposal (spec + class + price) is presented to the customer: the next step once the format has settled
|
|
174
176
|
|
|
175
177
|
---
|
|
176
178
|
|
|
177
|
-
##
|
|
179
|
+
## Calibration example: several specs from one request
|
|
178
180
|
|
|
179
|
-
|
|
181
|
+
Raw request (real, abbreviated):
|
|
180
182
|
|
|
181
|
-
|
|
183
|
+
> _"Som medarbetare på en stor verksamhet vill jag kunna ange team för skattningen så att arbetslagen kan följas upp var för sig. Som chef vill jag filtrera statistik per team men även se alla team aggregerat. Ingen team-uppdelning i tv-skärmsläget. Om teams finns ska val vara obligatoriskt. Öppen fråga: team per skattning eller per inloggning?"_
|
|
182
184
|
|
|
183
|
-
|
|
185
|
+
This is at least two decisions: the employee's flow for filling in a skattning and the manager's statistics view. The TV screen restriction is a Not included line on the statistics spec, not a spec of its own. The open question (per skattning or per login) is a choice that can be decided: per skattning is most likely (it matches how shifts already work), so it is chosen and stated in the reviewer block. Result: two specs + a reviewer note that they are delivered as a bundle and share the dependency on the team administration.
|
|
184
186
|
|
|
185
|
-
|
|
187
|
+
## Calibration example: internal material to be struck
|
|
188
|
+
|
|
189
|
+
Raw material often contains internal notes: hour estimates ("2-4h"), solution notes ("kontrollera att vi gör backup först"), priority markings ("behöver estimat (prio)"). None of this belongs in the spec. Estimates and amounts are always struck; internal work notes are recorded under "Struck from the source" in the reviewer block so that the reviewer sees they were caught and can move them where they belong (the impact analysis or nowhere).
|