Skip to content
/ bits Public

Commit c643a05

Browse files
committed
Add Linear docs
1 parent 90cee78 commit c643a05

1 file changed

Lines changed: 201 additions & 0 deletions

File tree

docs/linear.org

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
#+title: Linear
2+
#+startup: content
3+
4+
We use Linear to keep on top of the backlog of tasks associated with new
5+
features, improvements, and bugs we need to squash.
6+
7+
* Estimation
8+
:PROPERTIES:
9+
:CUSTOM_ID: estimation
10+
:END:
11+
We use Fibonacci-scale story points to estimate the relative size of
12+
work. Points measure complexity and effort, not time. A task that takes
13+
one person a day might be a 2 for an expert or an 8 for someone learning
14+
the domain.
15+
16+
** Quick Reference
17+
| Pts | Size | Layers | Tests | Example |
18+
|-----+---------------+--------+----------------+--------------------------------------|
19+
| 1 | Single file | 1 | None/minimal | Fix typo, config tweak |
20+
| 2 | Few files | 1 | Few unit tests | Add schema attr, new spec |
21+
| 3 | One feature | 1 | Some tests | New Hiccup component, action handler |
22+
| 5 | Multi-file | 1--2 | Good coverage | New tab view, component lifecycle |
23+
| 8 | Cross-cutting | 3+ | Comprehensive | Schema + middleware + config + tests |
24+
| 13 | *Decompose* | --- | --- | Session hardening, OAuth provider |
25+
| 21 | *Decompose* | --- | --- | Per-tenant DBs, GDPR excision |
26+
27+
*Rule of thumb:* If it touches 3+ layers with comprehensive tests, it's an 8. If
28+
it's bigger than that, decompose it.
29+
30+
** The Scale
31+
| Points | Complexity | Status |
32+
|--------+-------------+---------------------------|
33+
| 1 | Trivial | Ready to work |
34+
| 2 | Small | Ready to work |
35+
| 3 | Moderate | Ready to work |
36+
| 5 | Significant | Ready to work |
37+
| 8 | Large | Ready to work |
38+
| 13 | Too large | Decompose before starting |
39+
| 21 | Epic | Decompose before starting |
40+
41+
Issues estimated at 13 or 21 must be broken down into smaller tasks before work
42+
begins. Filter Linear for =estimate >= 8= to find decomposition candidates
43+
during planning.
44+
45+
** Point Definitions
46+
*** 1 Point --- Trivial
47+
Single-file fix, typo, config tweak, no coordination needed.
48+
49+
- Fix a typo in documentation
50+
- Update a dependency version in deps.edn
51+
- Add a missing environment variable to devenv.nix
52+
- Suppress a logging warning in configuration
53+
54+
*** 2 Points --- Small
55+
Small, well-understood change with minimal testing impact.
56+
57+
- Add a new Tailwind color token to the theme template
58+
- Add a new attribute to Datomic schema
59+
- Fix a CSS layout issue in a Hiccup component
60+
- Add a missing spec to bits.spec
61+
62+
*** 3 Points --- Moderate
63+
Single feature in one layer, requires some tests.
64+
65+
- Add a new Hiccup UI component in bits.ui.*
66+
- Add a new action handler in bits.next
67+
- Implement a form with Malli coercion validation
68+
- Add a new middleware function with tests
69+
70+
*** 5 Points --- Significant
71+
Multi-file feature, requires good test coverage, may touch a couple of layers.
72+
73+
- Add a new tab view with components and actions
74+
- Implement a new component with lifecycle (record + factory + spec)
75+
- Add PostgreSQL migration with queries and session integration
76+
- Create a UI namespace with multiple related components
77+
78+
*** 8 Points --- Large
79+
Cross-cutting feature, multiple layers, comprehensive testing, may require
80+
domain knowledge or iteration.
81+
82+
- Migrate database backend (schema, deps, config, tests)
83+
- Add multi-step modal with SSE state transitions
84+
- Implement tenant-scoped feature with middleware, schema, and tests
85+
- Build real-time feature with client/server coordination
86+
87+
*** 13 Points --- Too Large
88+
Architectural change, new subsystem, significant coordination. *Must be
89+
decomposed before work begins.*
90+
91+
- Session security hardening (tenant scoping, hashing, drift detection)
92+
- Add OAuth/OIDC identity provider (Sign in with Bits)
93+
- Implement horizontal scaling for real-time features
94+
- Major refactor affecting multiple components and their dependencies
95+
96+
*** 21 Points --- Epic
97+
Fundamental restructuring or new capability. *Must be decomposed before work
98+
begins.*
99+
100+
- Per-tenant Datomic databases with connection pooling
101+
- GDPR excision infrastructure with deletion workflows
102+
- Complete redesign of a core user flow
103+
- Adding payment processing with multiple providers
104+
105+
** Estimation Guidelines
106+
*** Issues Must Be Deliverables
107+
Each issue must represent a complete, measurable piece of value. An issue is
108+
done when it is *implemented, tested, and documented*.
109+
110+
Do not create separate issues for:
111+
112+
- "Write the tests"
113+
- "Write the documentation"
114+
- "Implement the feature"
115+
116+
These are parts of one deliverable---the working, tested, documented
117+
feature.
118+
119+
*** Decomposition Means Zero Points on Parent
120+
Sub-issues are for *decomposition only*. When you decompose an issue:
121+
122+
- All work moves to the sub-issues
123+
- The parent becomes a tracking container with *0 points*
124+
- Each sub-issue is a complete deliverable
125+
126+
*Strict rule:* A parent with sub-issues always has 0 points.
127+
128+
| Situation | Action |
129+
|-------------------------------------------+-----------------------------------------------|
130+
| Decomposing a large issue | Create sub-issues, set parent to 0 points |
131+
| Estimating a sub-issue | Estimate normally; verify parent has 0 points |
132+
| Found parent with estimate AND sub-issues | Remove the parent's estimate |
133+
134+
*Don't use sub-issues for associated tasks.* If you have a reminder or follow-up
135+
that isn't part of decomposition, use Linear's "Related issues" feature instead.
136+
Related issues are separate deliverables with their own estimates---no
137+
double-counting risk.
138+
139+
*** Compare, Don't Calculate
140+
Estimate by comparing to known tasks, not by adding up hours. Ask: "Is this
141+
bigger or smaller than our 8-point reference?"
142+
143+
*** Uncertainty Increases Points
144+
If you don't fully understand the problem space, estimate higher. A "probably
145+
simple" task with unknowns might be a 5 instead of a 3.
146+
147+
*** Include Testing
148+
Points include all work: implementation, tests, documentation, code review
149+
iterations. A feature with comprehensive test requirements is larger than one
150+
without.
151+
152+
*** Avoid Anchoring on Time
153+
"This will take a day" is not estimation. Two people might take different
154+
amounts of time on the same 5-point task based on familiarity with the code.
155+
156+
*** Re-estimate When Scope Changes
157+
If requirements change mid-task, update the estimate. This helps calibrate
158+
future estimates.
159+
160+
** Velocity
161+
:PROPERTIES:
162+
:CUSTOM_ID: velocity
163+
:END:
164+
Velocity measures how many points a developer completes per week. Use
165+
this to forecast project target dates.
166+
167+
*** Adjusting Velocity
168+
Re-calculate velocity after each completed sprint:
169+
170+
#+begin_example
171+
velocity = points_completed / weeks_elapsed
172+
#+end_example
173+
174+
Update project target dates using =/forecast= when velocity changes
175+
significantly (±20% or more).
176+
177+
*** Scaling
178+
Adding developers doesn't double velocity due to coordination overhead. Rough
179+
multipliers:
180+
181+
| Team size | Effective multiplier |
182+
|-----------+----------------------|
183+
| 1 | 1.0× |
184+
| 2 | 1.7× |
185+
| 3 | 2.2× |
186+
187+
** Decomposition
188+
When an issue is estimated at 13 or 21:
189+
190+
1. Identify independent deliverables within the work
191+
2. Create child issues for each deliverable
192+
3. Estimate each child issue (should be 8 or less)
193+
4. Keep the parent as an epic or project for tracking
194+
195+
Signs that decomposition is needed:
196+
197+
- Multiple unrelated acceptance criteria
198+
- Work spans more than two major system layers
199+
- Requires sequential phases (research, then implementation, then
200+
migration)
201+
- Different people could work on different parts independently

0 commit comments

Comments
 (0)