NL
All work
01

Saved Triggers

Trigger logic built once, published, and attached across any number of flows. The owner decides exactly how much a downstream author is allowed to change.

Research + interaction design Workflow Studio & Flow Designer Yokohama → Zurich → Australia 7 internal BUs · 5 enterprise customers

Customer problem

Every flow in Flow Designer begins with a trigger: the condition that decides when it runs. Triggers were tightly coupled to their flow. If five flows needed to fire on “Incident created, priority = high”, that logic had to be typed out five separate times. There was no link between the copies, so a mistake could only ever be fixed in one place at a time.

Triggers are tightly coupled with a flow. Users have to duplicate the trigger logic across flows that have the same trigger logic. This is time consuming, repetitive… may cause inconsistencies and errors.

Original problem brief

Research across seven internal business units and five enterprise customers split that into two costs. One is the time spent re-authoring. The other is the inconsistency risk of copies that drift apart silently. State of Colorado put it most sharply: they needed a single place to fix “outdated logic that applies in multiple places.”

The brief

Make a trigger a standalone, publishable asset. Authored independently of any flow, discoverable and attachable from any flow, and propagating every edit to all its consumers.

Do it without breaking either audience. The platform owner needs control over what a downstream author can touch. The downstream author needs it to just work.

Personas

One quote from research did more design work than anything else. Eric Riemer described the feature before it existed:

As an admin, I see this feature as a quick way to create triggers… If I have citizen devs, I want them to use the trigger as is. Without changing trigger definition.

Eric Riemer, research interview

That is not a feature request. It is a permission model, handed over by a user. It says the trigger owner and the trigger consumer are different people with different needs.

Trigger owner

Platform admin / architect
Needs
To standardise trigger logic once, and to see the blast radius before every change.
Fear
Silently breaking dozens of downstream flows they don’t own.

Citizen developer

Low-code builder
Needs
A trigger that works as handed over. Trigger complexity hidden entirely.
Gap
No platform depth to evaluate whether a condition set is correct.

Junior & pro developer

NN Group, State of Colorado
Needs
A blueprint to extend rather than rebuild, plus one place to fix logic that applies in many.
Gap
Locked-down triggers block them; fully open ones lose standardisation.

Another product team

AI Agent Studio engineering
Needs
The trigger framework itself, as backend infrastructure plus embeddable UI components.
Gap
Each team was building its own trigger framework, missing every platform improvement.

Solution

  1. Triggers become a first-class asset. They sit alongside Playbook, Flow, Subflow, Action and Decision Table, with their own nav module and their own “New” entry. Creation reuses the condition builder authors already know, so a new asset type does not also mean a new paradigm.
  2. Three graduated permissions instead of one lock. View conditions, add additional conditions, view and modify advanced options. The same mechanism produces a fully locked black box for a citizen developer and an extensible template for a power user. Neither research population has to lose.
  3. Publishing as a commitment gate, with friction scaled to blast radius. The first publish is light. Publishing once consumers exist shows exactly what is affected: a paginated list of every dependent flow. It footnotes how many rows the viewer’s record-level security hid, rather than faking full transparency. A capture from usability testing shows the pattern at production scale, reading This trigger is used by 80 objects… and Number of rows hidden by security constraints: 5. The prototype below runs on a smaller instance, where the same dialog reads 50 and 0.
  4. Consumption that stays traceable. A saved trigger is visually tagged as such, distinct from an inline one. Any conditions the flow author adds stack visibly under the inherited base instead of merging invisibly into it. Provenance never gets lost.
  5. Detach as an honest escape hatch. A named, confirmed action rather than silent drift. Its structural seam is documented instead of hidden: detaching a flow that already has local conditions produces an M×N cross product, because two independent condition builders are being reconciled into one. Resolving that quietly would have lost logic the user could not audit.
  6. Guarded deletion and always-on governance. With no consumers, delete takes a plain confirmation. With dependents present, it is blocked outright until they are detached. “Associated Objects” sits in the 3-dot menu, so anyone can see what is consuming a trigger without hunting through flows.

The official feature overview

ServiceNow's own walkthrough of the shipped feature. Its chapters follow the same arc as the case study above — create a trigger, use it in a flow, edit it, detach it — which is a reasonable sign the interaction model held together end to end.

This is evidence the feature shipped, not evidence of adoption. The targets in the KPI section below are still unconfirmed.

Use Triggers in Workflow Studio — ServiceNow Documentation, November 2025. Watch on YouTube
Nothing loads from YouTube until you press play.

Prototype walkthrough

The clickable prototype end to end — authoring a trigger as a standalone asset, the governance wrapped around publishing and deleting it, and a flow author consuming it downstream. Step through it, or let it play.

One gap worth naming: this prototype deck never expands “Show additional properties”, so the three graduated permissions aren’t visible in any frame here. They are visible in the official video above — its own thumbnail shows “Allow user to view conditions” and “Allow user to add additional conditions” as toggles on the trigger definition.

Frame 1 of 26 — Triggers get their own module in Workflow Studio, listed beside Playbooks, Flows and Subflows — the first move in making a trigger a s Frame 2 of 26 — The New menu now offers Trigger as a creatable type in its own right. Frame 3 of 26 — Opening a new trigger — authored independently of any flow. Frame 4 of 26 — “Let’s get the details of your trigger”: name, type, description and application, with Now Assist offered alongside. Frame 5 of 26 — Naming it — Inbound email. Frame 6 of 26 — Choosing the trigger type: Record (Created, Updated, Created or Updated), Scheduled, or Recurrence. Frame 7 of 26 — Type selected; the trigger is ready to build. Frame 8 of 26 — Trigger definition reuses the condition builder flow authors already know — deliberately, so a new asset type doesn’t also mean a new Frame 9 of 26 — Picking the field to test: typing “Re” filters to Receive type, Recipients, Reply to. Frame 10 of 26 — Field chosen. Frame 11 of 26 — Operators: is, is not, is one of, starts with, ends with. Frame 12 of 26 — Operator set. Frame 13 of 26 — Entering the value to match against. Frame 14 of 26 — Choosing the target table — Incident, Incident task, Incident fact table. Frame 15 of 26 — The condition is complete. Further conditions stack via “Add condition set”. Frame 16 of 26 — The 3-dot menu carries the governance actions: Properties, Related objects, Delete. Frame 17 of 26 — Related objects — blast radius on demand: “This trigger is used by 50 (object)s. Any published changes to this trigger will affect th Frame 18 of 26 — Deleting a trigger that has dependents shows every flow relying on it, rather than failing quietly. Frame 19 of 26 — The final confirmation is explicit: “This will permanently delete the trigger.” Frame 20 of 26 — Publishing is its own commitment gate — “Publishing the trigger makes it available to flow authoring.” Frame 21 of 26 — Trigger properties, reopened from the same menu: name, type, description, application, and additional properties. Frame 22 of 26 — Inside a flow the attached trigger is tagged “Saved Trigger”, with a note: “This is a saved trigger. To view or modify trigger detail Frame 23 of 26 — The same flow in diagram view, the trigger sitting at the head of the canvas. Frame 24 of 26 — The flow author picks from the saved-trigger library instead of rebuilding the logic. Frame 25 of 26 — Choosing a trigger from the diagram view. Frame 26 of 26 — The picker explains what a trigger does before it is attached — provenance stays visible at the point of choice.
01/26
The trigger library Triggers get their own module in Workflow Studio, listed beside Playbooks, Flows and Subflows — the first move in making a trigger a standalone asset.

User flows

Author and publish trigger owner
  1. New ▸ Trigger
  2. Name, type, application
  3. Build conditions
  4. Set the three permissions
  5. Save as draft
  6. Publish
  7. Live in the trigger library
Consume in a flow citizen developer
  1. New flow
  2. Trigger picker
  3. Pick a saved trigger
  4. If permitted: Add filters
  5. Flow saved, link intact
Update everywhere at once trigger owner
  1. Edit published trigger
  2. Publish
  3. “Used by 80 objects”
  4. Review affected flows
  5. Confirm
  6. All consumers updated
Diverge from the template flow author
  1. Flow ▸ Trigger ▸ Detach
  2. Consequences stated plainly
  3. Link broken, conditions merged locally
Delete a shared trigger trigger owner
  1. Delete
  2. Blocked while dependents exist
  3. Full list of affected flows
  4. Detach all
  5. Deleted

KPIs

Target +50%

trigger instances created within 6 months of the backend framework migration

Target

duplicated trigger UI components across App BUs, as adoption spreads

Target Q1’26

deadline to reduce UI-related support case tasks for AI Agent Studio triggers

Measured 3

release trains shipped: Yokohama, Zurich, Australia

Stated precisely: the three targets come from the PM roadmap deck. They are goals, not confirmed post-launch results. I do not have adoption data proving they were hit.

What it enabled downstream

Making a trigger a standalone asset turned out to be a platform move rather than a single feature. Once triggers existed independently of flows, other teams could build on them. The AI Agent Studio case in the personas above is one. A second, closer to home, is business calendars on schedule triggers.

Business Calendar × Schedule Triggers

A schedule trigger can repeat on a business calendar, say “US Federal Holidays,” instead of on a fixed interval. Reuse is what made that worth building. The calendar is configured once, elsewhere in the platform, then selected wherever a schedule trigger needs it.

It also inherits this project’s structural problem, one layer up. The person who selects a calendar is not the person who built it:

The trigger author who selects a business calendar is likely not the same person who initially configured these calendars in the platform.

Discovery document

So an author can pick a calendar with no visibility into what it excludes. They discover the consequence only when a trigger fires on a date they did not expect, or fails to fire on one they did. That is the same shape as a citizen developer handed a locked trigger, which is why it sits at discovery rather than in design. Three questions are open:

  • What does an author need to see at selection time? A holiday count, or the dates themselves?
  • Should Publish block on an empty calendar field, or fail at run time?
  • Who holds authority when an author disagrees with a calendar’s holiday list?

Folded in here rather than kept as its own case study. It is a short set of open questions layered on this framework, not a separate body of work. The honest state is “framed, not yet designed.”

Still open

  • Scale. Sec Ops raised tables with millions of records generating a matching volume of trigger fan-outs. Reuse solves the authoring duplication problem, not the runtime volume problem. Clearest candidate for the next iteration.
  • Stale tabs. A flow tab already open when an auto-update lands needs a manual refresh. Accepted as a v1 gap rather than solved with live sync. A “trigger updated, refresh?” banner is the obvious follow-up.
  • AI assistance. Usability testing asked directly (“How might AI help you in creating triggers?”) but nothing reached the shipped interaction spec. It is the same AI-versus-reliable-fallback tension that shows up independently in Unified Picker.