Skill Tracer
Skills › Skills For Real Engineers › software-factory › EXAMPLE-TASKS.md

EXAMPLE-TASKS.md

80 lines · skills/in-progress/software-factory/EXAMPLE-TASKS.md at 4ae2317

Open on GitHub
1# Example tasks
2
3Tasks grouped by the problem they solve. Each names the trigger that starts its runs, what a run does, and what it triggers next. Most factories start as one of these and grow by chaining the next.
4

Example tasks

Tasks grouped by the problem they solve. Each names the trigger that starts its runs, what a run does, and what it triggers next. Most factories start as one of these and grow by chaining the next.

Raw lines 1 to 4
5## Untriaged tickets pile up
6
7**Explore task**
8- Trigger: a ticket is created, or a human labels it.
9- Does: checks the ticket against the codebase and sorts it into a category (easy call, needs a human, not a bug).
10- Triggers: an implementer run for easy calls. Anything else ends with the ticket labelled as waiting for a human.

Untriaged tickets pile up

Explore task

  • Trigger: a ticket is created, or a human labels it.
  • Does: checks the ticket against the codebase and sorts it into a category (easy call, needs a human, not a bug).
  • Triggers: an implementer run for easy calls. Anything else ends with the ticket labelled as waiting for a human.
Raw lines 5 to 11
12## Ready tickets wait for someone to build them
14**Implementer task**
15- Trigger: a ticket is labelled ready, by a human or an explore run.
16- Does: builds the ticket until the automated checks pass, and opens a draft PR.
17- Triggers: an automated review run.

Ready tickets wait for someone to build them

Implementer task

  • Trigger: a ticket is labelled ready, by a human or an explore run.
  • Does: builds the ticket until the automated checks pass, and opens a draft PR.
  • Triggers: an automated review run.
Raw lines 12 to 18
19## PRs wait for review
21**Automated review task**
22- Trigger: a PR opens with no automated review yet, or a human labels it.
23- Does: reviews the diff against the codebase's standards and the ticket it came from.
24- Triggers: a rework run on a fail. On a pass it ends, and the PR waits for human review before a human merges it.

PRs wait for review

Automated review task

  • Trigger: a PR opens with no automated review yet, or a human labels it.
  • Does: reviews the diff against the codebase's standards and the ticket it came from.
  • Triggers: a rework run on a fail. On a pass it ends, and the PR waits for human review before a human merges it.
Raw lines 19 to 25
26## Failed automated reviews sit unfixed
28**Rework task**
29- Trigger: an automated review run fails a PR.
30- Does: fixes only what the automated review named, and pushes.
31- Triggers: an automated review run. After a set number of fails, it ends with the PR labelled as waiting for a human.

Failed automated reviews sit unfixed

Rework task

  • Trigger: an automated review run fails a PR.
  • Does: fixes only what the automated review named, and pushes.
  • Triggers: an automated review run. After a set number of fails, it ends with the PR labelled as waiting for a human.
Raw lines 26 to 32
33## Specs are too big for one run
35**Decompose task**
36- Trigger: a spec ticket is labelled.
37- Does: splits the spec into tickets, each recording which tickets it depends on.
38- Triggers: an implementer run.
40The implementer run here picks the next ticket whose dependencies are all closed, and triggers itself again until no ticket is left.

Specs are too big for one run

Decompose task

  • Trigger: a spec ticket is labelled.
  • Does: splits the spec into tickets, each recording which tickets it depends on.
  • Triggers: an implementer run.

The implementer run here picks the next ticket whose dependencies are all closed, and triggers itself again until no ticket is left.

Raw lines 33 to 41
42## Migrating to a stricter automated check
44A new lint rule (or a stricter type setting) is switched on, but only some files pass it. The rule enforces on the passing files, and the failing ones sit on an exception list.
46**Ratchet task**
47- Trigger: a daily clock.
48- Does: takes one file off the exception list, fixes it until the stricter check passes, and opens a PR.
49- Triggers: an automated review run. Once the exception list is empty, the ratchet run has nothing to take and the migration is done.
51One small PR a day keeps human review cheap, and the check only ever gets stricter.

Migrating to a stricter automated check

A new lint rule (or a stricter type setting) is switched on, but only some files pass it. The rule enforces on the passing files, and the failing ones sit on an exception list.

Ratchet task

  • Trigger: a daily clock.
  • Does: takes one file off the exception list, fixes it until the stricter check passes, and opens a PR.
  • Triggers: an automated review run. Once the exception list is empty, the ratchet run has nothing to take and the migration is done.

One small PR a day keeps human review cheap, and the check only ever gets stricter.

Raw lines 42 to 52
53## Users report bugs nobody reads
55A feedback button in the app is a ticket source: it files each report as a ticket with the explore label already on it. The explore run does the rest.

Users report bugs nobody reads

A feedback button in the app is a ticket source: it files each report as a ticket with the explore label already on it. The explore run does the rest.

Raw lines 53 to 56
57## Production problems are found late
59A monitor (slow queries, error rates) is a ticket source. It files a ticket per problem, and comments on the open ticket instead when it sees the same problem again. After a fix merges, it reopens the ticket if the problem persists.

Production problems are found late

A monitor (slow queries, error rates) is a ticket source. It files a ticket per problem, and comments on the open ticket instead when it sees the same problem again. After a fix merges, it reopens the ticket if the problem persists.

Raw lines 57 to 60
61## The factory's own runs fail
63**Fix task**
64- Trigger: the orchestrator reports a failed run.
65- Does: files the failing log as a ticket, and attempts a fix as a PR when the failure is fixable.
66- Triggers: an automated review run. A failure in a fix run's own work triggers nothing, so fixes never chain. Because the fix changes the factory itself, it always gets human review.

The factory's own runs fail

Fix task

  • Trigger: the orchestrator reports a failed run.
  • Does: files the failing log as a ticket, and attempts a fix as a PR when the failure is fixable.
  • Triggers: an automated review run. A failure in a fix run's own work triggers nothing, so fixes never chain. Because the fix changes the factory itself, it always gets human review.
Raw lines 61 to 67
68## The codebase drifts
70**Architecture task**
71- Trigger: a nightly clock.
72- Does: scans recent changes for refactoring candidates and files them as one ticket.
73- Triggers: nothing. A human picks a candidate and labels it, which starts the usual chain.

The codebase drifts

Architecture task

  • Trigger: a nightly clock.
  • Does: scans recent changes for refactoring candidates and files them as one ticket.
  • Triggers: nothing. A human picks a candidate and labels it, which starts the usual chain.
Raw lines 68 to 74
75## The same mistakes keep coming back
77**Retro task**
78- Trigger: a PR merges, throttled to one merged PR in ten.
79- Does: reads the PR, its ticket, its automated reviews and its run logs, and proposes changes to the factory's own instructions as a PR.
80- Triggers: an automated review run.

The same mistakes keep coming back

Retro task

  • Trigger: a PR merges, throttled to one merged PR in ten.
  • Does: reads the PR, its ticket, its automated reviews and its run logs, and proposes changes to the factory's own instructions as a PR.
  • Triggers: an automated review run.
Raw lines 75 to 80