A Software Product
The worked example Eidos ships: a subset of YouTube — watching a video, resuming it, uploading to a channel, subscribing to one. Enough product to be real, small enough to read in one sitting.
The tree
Section titled “The tree”DirectoryBlueprints/
- README.md
Directory_eidos/
Directoryshapes/
- frame.architecture.md
- frame.audience.md
- frame.criteria.md
- frame.market.md
- spec.full.md
- spec.micro.md
Directoryroles/ framework-owner, developer, designer, project-manager, stakeholder
- …
- Framework.md
- me.md personal, gitignored
Directoryframes/
- index.md
- architecture.md
- audience.md
- criteria.md
- market.md
Directoryspecs/
- index.md
Directoryplayback/
- watch-a-video.md
- resume-playback.md
Directorychannels/
- upload-a-video.md
- subscribe-to-a-channel.md
- roadmap.md a top-level doc
- blueprint-map.canvas generated
What the framework declares
Section titled “What the framework declares”### specs
The product's units, one per blueprint, grouped by domain.
- **Leaf:** [specs/index.md](../specs/index.md)- **Flavors:** - [full](shapes/spec.full.md) — the complete spec shape (default). - [micro](shapes/spec.micro.md) — Intent, Open Questions, ACs, Out of Scope.- **Canvas:** card from `## Intent`- **Domains:** - **playback** — watching a video, and picking up where you left off. - **channels** — publishing to a channel, and following one.Two domains, so specs/ has two sub-folders and every spec carries
domain: playback or domain: channels matching its folder exactly.
The spec shape
Section titled “The spec shape”spec.micro |
spec.full |
|---|---|
## Intent |
## Intent |
### Assumptions |
### Assumptions |
| — | ### Implementation Notes |
## Open Questions |
## Open Questions |
## Behaviors & Acceptance Criteria |
## Behaviors & Acceptance Criteria |
| — | ### Functional · ### Performance · ### Design · ### External interface · ### Quality attributes |
## Out of Scope |
## Out of Scope |
| — | ## Dependencies · ## Testing · ## Constraints & Decisions |
Its custom properties
Section titled “Its custom properties”| Name | Type | Applies To | Meaning |
|---|---|---|---|
status |
Text | all | Draft / Intake / In Progress / Done / Archived / Deprecated |
date_created · date_modified |
Date | all | YYYY-MM-DD |
tags |
List | all | Free tags |
domain |
Text | specs |
The grouping, matching the sub-folder |
depends_on |
List | specs |
Blueprints this needs, each a link |
type |
Text | specs |
Soft label — feature, capability, integration |
A real blueprint
Section titled “A real blueprint”---id: watch-a-videotitle: Watch a Videosummary: play a video reliably, signed in or not, adapting to the connection.type: featuredomain: playbackstatus: Intakedepends_on: [video-catalog, cdn-delivery]tags: [playback]---
# Watch a Video
## Intent
A view is the core action of the whole product. If a video is slow to startor stalls, the viewer leaves — so what "playing a video" means, and what aviewer can count on, is the first thing to pin down. It must hold whether theviewer is signed in or arrived from a shared link.
### Assumptions
Assuming adaptive-bitrate delivery over the CDN is available and affordableat launch scale — if it isn't, the whole playback approach changes.
## Open Questions
- How long should a signed playback URL stay valid before it has to refresh?- Does a view count on play start, or only after a watch-time threshold?
## Behaviors & Acceptance Criteria
### Functional
- **AC1:** A viewer opens a video and the player loads with its title, channel, and controls.- **AC3:** A signed-out viewer who opens a shared link can still watch.
### Quality attributes
- **AC7:** A stalled segment recovers by dropping quality rather than stopping playback.- **AC8:** A view is counted at most once per viewer per video within a window — replays and seeks don't inflate it.
## Out of Scope
- No comments, ratings, or next-up recommendations on the watch page.What the non-goals are doing
Section titled “What the non-goals are doing”The sibling spec, resume-playback.md, carries one line:
## Out of Scope
- Cross-account resume. A shared TV is one device, not one person.Twelve words that stop a plausible feature request being filed as a bug, record the reasoning so a future reader can tell whether it still holds, and end an argument before it happens. Why non-goals carry the most weight →
Read it in full
Section titled “Read it in full”The whole root is in the repository:
examples/Blueprint/.
- A Research Programme — the same machinery, other words.
- A Book