PREVIEW This is a preview release. sparQ is in active development. Some features on this page are still being built. We're building in the open, the repo goes public soon.

The blocker data model

Architecture

Blockers in sparQ are not properties of tasks. They're their own table. A blocker has a task FK and a person FK; both are required.

The reason is escalation. A blocker that has been open for more than its threshold escalates to the person's manager. If blockers were properties of tasks, the escalation path would have to be inferred from the task's project, which is brittle.

The migration that almost broke us was when we changed the threshold field from a server-set default to a teamspace-configured value. The migration ran fine. The bug was that existing blockers kept their old threshold and new ones got the new value, and the inconsistency surfaced as escalations firing at the wrong time. We caught it within a day, but the fix required backfilling.