Files
crewli/dev-docs/FORM_BUILDER_SCOPE_POLICY.md
bert.hausmans 2b16d4fd8f docs(policy): add Form Builder scope discipline policy
Deferred-work guidance for Form Builder expansions. Prevents
speculative building for hypothetical use cases while preserving
the one justified forward-looking investment (polymorphic subject
picker in S3b). Based on April 2026 coverage analysis of ~60
practical form use cases.
2026-04-24 10:18:44 +02:00

5.5 KiB

Form Builder — Scope Discipline Policy

Status: Guidance policy. Applies to all Form Builder and adjacent module work in Crewli until explicitly superseded.

Context

April 2026: analysis of ~60 practical form use cases against the current Form Builder architecture confirmed that the polymorphic owner/subject model, the 17 field types, and the event-listener integration pattern form a generic foundation that scales. Of the 60 use cases surveyed, ~70% fit the existing architecture with incremental work (new listener or new field type per use case), and ~19% require separate domain architectures outside the Form Builder.

This is reassurance, not a work order. The full coverage of 60 use cases represents 4-5 months of fulltime solo work. Bert's actual near-term needs — his own volunteer organisation plus the first handful of potential SaaS customers — are estimated at 5-8 concrete form types, not 60.

Policy

1. No speculative purpose-specific work

Do not build listeners, field types, purpose enum values, or UI flows for form purposes that no current user (Bert's own organisation or a named prospect) has concretely requested.

This explicitly includes:

  • Artist advance module — defer until a festival with real tech riders needs it
  • Supplier intake module — defer until a supplier-intensive event is in the pipeline
  • Post-event evaluation module — defer until Bert's own event actually finishes and needs retrospective tooling
  • Compliance flows (W9, insurance claims, GDPR workflows beyond existing ARCH §13) — these are separate projects, not Form Builder features
  • Real-time operational forms (meal tickets, inventory counts, live capacity) — these belong to dedicated modules (check-in, inventory), not Form Builder

Any prompt that asks to extend the Form Builder for one of these should be questioned back to Bert with: "Do you have a concrete user who needs this in the next 8 weeks, or is this speculative?"

2. One architectural exception: polymorphic subject picker in S3b

The organiser-facing form creation UI in S3b must include a subject-type picker (dropdown or equivalent) that writes to form_schemas.subject_type when configured, even though only person is functionally wired in S3b.

Options to surface in the picker:

  • Vrijwilliger / deelnemer (subject_type='person') — functional
  • Artiest (subject_type='artist') — disabled / "binnenkort beschikbaar"
  • Leverancier (subject_type='company') — disabled / "binnenkort beschikbaar"
  • Anoniem publiek (subject_type=null) — functional for PUBLIC_COMPLAINT / PUBLIC_RSVP / POST_EVENT_EVALUATION

Why this is the exception: retrofitting a subject-type picker later requires touching the create/edit/list views, the schema configuration form, the binding config UI, and the sibling-endpoint logic — days of rework. Building the UI shell with disabled options now is ~2 extra hours in S3b and eliminates that future refactor.

This is the only forward-looking architectural investment permitted without a concrete user request.

3. Economic triggers for future Form Builder expansion

Unlock categories of work only when one of these signals fires:

Expansion Trigger
FILE_UPLOAD + IMAGE_UPLOAD + SIGNATURE field types A required form (VOG upload, minor consent, press accreditation) has a concrete submitter waiting
Artist advance module A festival with >3 booked artists needs digital tech riders
Supplier intake module An event has >3 suppliers where paper/email intake has become painful
New purpose enum value A concrete form use case requires it AND that use case has a named user
Shift-swap request flow Volunteers have asked for it twice in production

Explicitly do NOT unlock expansions because:

  • The architecture supports it elegantly
  • It would be "nice to have"
  • A competitor has it
  • It appears on an aspirational feature list

4. When reviewing prompts for Form Builder work

If a prompt asks Claude Code to extend the Form Builder in ways not justified by a concrete user or by the S3b subject-picker exception above, push back before implementing. Ask Bert:

  1. Which concrete user needs this in the next 8 weeks?
  2. Is there a simpler path (manual admin action, existing UI, out-of-scope) that would work for now?
  3. If we defer this 6 months, what actually breaks?

Proceed only when answers are concrete (named person / event / deadline), not hypothetical ("a customer might want this").

5. Where this policy does NOT apply

This policy scopes Form Builder and its direct integrations. It does NOT apply to:

  • The S3b organiser UI itself (build it well, it unlocks Category A use cases immediately)
  • Bug fixes and polish on shipped Form Builder features
  • Documentation of existing behaviour
  • Refactors that reduce technical debt in already-shipped code
  • Unrelated modules (check-in, accreditation, briefings, communication, production) — those have their own prioritisation

6. Record of decisions

When this policy causes a feature to be deferred, record it briefly in /dev-docs/BACKLOG.md with the trigger that would unblock it. This keeps the deferred list visible without pretending it's actionable today.

Closing note for Claude Chat

If planning work that would touch Form Builder scope beyond this policy, flag it at the start of the session: "This touches scope-deferred Form Builder work; confirming trigger before proceeding." Then wait for Bert's confirmation. This is a discipline guardrail, not a veto — but the default answer is "not yet" until a concrete trigger exists.