If your program can’t answer “what stage is this in?” without opening a thread, you don’t have a workflow—you have folklore.
States should match how decisions happen
We name states after operational reality: submitted, incomplete, under review, approved, waitlisted, appealed—not generic buckets like “open.”
Queues turn volume into throughput
- Role-based queues with SLAs and ownership
- Bulk actions for repetitive corrections
- Escalation paths that preserve context
Events beat screenshots for accountability
A state change should emit an event you can replay: who moved it, from where to where, and what evidence was attached. That is how you answer audits without archaeology, and how you debug “it worked on my machine” class issues in production workflows.
When intake is modeled this way, reporting becomes honest: you can see backlog by reason, not just “how many emails arrived today.”
This pattern is central to housing intake queues and state machines, especially for teams in housing application operations.
For deeper context, compare this with why operations teams need workflow systems over brochure sites and hidden costs of managing operations across too many tools.
Related case study: affordable housing intake at scale case study.

