Feature Canvas¶
The Feature Canvas follows Nikita Efimov's framework (CC BY-SA 4.0) for defining and validating features before implementation.
Overview¶
The Feature Canvas helps teams articulate:
- Why the feature is needed (problems, situations)
- What value it provides (benefits, capabilities)
- What constraints exist (restrictions, limitations)
Grid Layout¶
| Idea Statement (spans full width) | |
|---|---|
| Situations | Restrictions |
| Problems | Limitations |
| Value | |
| Capabilities |
Structure¶
type FeatureCanvas struct {
Metadata Metadata
IdeaStatement string // Top banner
// Problem Area
Situations []Situation // When/where does problem occur?
Problems []Problem // What problems to solve?
Value []ValueItem // What value does it provide?
Capabilities []Capability // What must the solution do?
// Solution Area
Restrictions []string // Hard constraints
Limitations []string // Known limitations
}
type Capability struct {
ID string
Description string
Priority string // must, should, could, wont (MoSCoW)
}
Example¶
fc := canvas.NewFeatureCanvas("feat-export", "Data Export Feature")
fc.IdeaStatement = "Enable users to export their data in multiple formats"
fc.Situations = []canvas.Situation{
{ID: "s1", Description: "User needs to share data with external tools"},
}
fc.Problems = []canvas.Problem{
{ID: "p1", Description: "No way to get data out of the system"},
}
fc.Value = []canvas.ValueItem{
{ID: "v1", Description: "Users can integrate with existing workflows"},
}
fc.Capabilities = []canvas.Capability{
{ID: "c1", Description: "Export to CSV", Priority: "must"},
{ID: "c2", Description: "Export to JSON", Priority: "must"},
{ID: "c3", Description: "Scheduled exports", Priority: "should"},
}
fc.Restrictions = []string{"Must comply with GDPR data export requirements"}
fc.Limitations = []string{"Initial release limited to 10,000 rows per export"}
// Render
c := canvas.NewFeature(fc)
d2Output, _ := render.Render(c, render.FormatD2, render.FeatureOptions())
MoSCoW Priorities¶
| Priority | Meaning |
|---|---|
must | Essential for release |
should | Important but not critical |
could | Nice to have |
wont | Not in this release |
Examples¶
See examples/canvas/feature/ for complete examples.