日本語
AI-Led SDLC Enablement

SDLC on ServiceNow

End-to-end SDLC guide for building, testing, and releasing ServiceNow apps using the ServiceNow SDK, Git, ReleaseOps, and CI/CD pipelines.

Build with Fluent + SDK
Test with ATF + Test Agent
Release with ReleaseOps

← → TO NAVIGATE  ·  Ashwin Patti, Shelby Cohen

Legal

Safe harbor statement

This presentation may contain "forward-looking" statements that are based on our beliefs and assumptions and on information currently available to us only as of the date of this presentation. Forward-looking statements involve known and unknown risks, uncertainties, and other factors that may cause actual results to differ materially from those expected or implied by the forward-looking statements. Further information on these and other factors that could cause or contribute to such differences include, but are not limited to, those discussed in the section titled "Risk Factors," set forth in our most recent Annual Report on Form 10-K and Quarterly Report on Form 10-Q and in our other Securities and Exchange Commission filings. We cannot guarantee that we will achieve the plans, intentions, or expectations disclosed in our forward-looking statements, and you should not place undue reliance on our forward-looking statements.

The information on new products, features, or functionality is intended to outline our general product direction and should not be relied upon in making a purchasing decision, is for informational purposes only, and shall not be incorporated into any contract, and is not a commitment, promise, or legal obligation to deliver any material, code, or functionality. The development, release, and timing of any features or functionality described for our products remains at our sole discretion. We undertake no obligation, and do not intend, to update the forward-looking statements.

Agenda

Today, start to finish

👋 Welcome — 10:00 AM – 5:00 PM. By the end of today, you'll build, test, source-control, and release a real app end-to-end.

Foundations

What is an "app" in this model?

"A persistent container, owned by you, for anything you build on the ServiceNow Platform. It has a name, a version, and a scope."

In scope

Global apps, non-global apps, and ITSM implementations built via "move and edit" — all under one model.

Out of scope

Customizing an out-of-the-box app you haven't taken "move" ownership of — that metadata has no persistent container of its own; it stays under ServiceNow's ownership, not yours.

Why it matters

One development model regardless of whether you're building net-new or customizing what's already there.

Foundations

The prescribed stack

🛠️

SDK

Build engine, compiles to deployable artifacts

💻

Studio

IDE / prod code mode

🌿

Git

Branch, PR, merge

📦

Sandbox

Isolated dev instance

🤖

Build Agent

AI-assisted authoring

✅

ATF

Automated test framework

🗄️

App Repo

Immutable artifact store

🚀

ReleaseOps

Assess, approve, release

Foundations

Before Fluent: one representation, twice

Historically in ServiceNow, build time and runtime were the same representation — everything was XML, whether a human was reading it or the platform was executing it.

What you edited

XML, via forms and clicks — hard to read, hard to diff, hard to review.

What the platform ran

The exact same XML — no compile step, no type checking, no diagnostics before install.

Foundations

Fluent separates build time from runtime

📝

Build time

TypeScript — humans read, write, and reason about it, with compile-time type checking and diagnostics

→
⚙️

Runtime

Still what the platform executes underneath — you just don't touch that representation directly

That's shifting left in practice: mistakes get caught at build time, in your editor, before an install — not at runtime, after something's already broken.

Foundations

SDK + Fluent = source-driven development

Fluent

A TypeScript DSL — .now.ts files define metadata with compile-time type checking and diagnostics, instead of clicking through forms.

export const MaintenanceRequest = Table({
  label: 'Maintenance Request',
  fields: { equipment: Reference('equipment') }
});

JS modules + React

Business logic as typed @servicenow/glide imports; UI Pages built in React, Svelte, Vue, or Preact.

THE INNER LOOP

$now-sdk build # instant diagnostics on your .now.ts files

THEN INSTALL AND TEST

$now-sdk install --sandbox
Foundations

Git is the authoritative source of truth

Git

Branching, pull requests, line-by-line review, three-way conflict resolution, precise point-in-time rollback.

Update sets

XML transport artifact only — not built for collaboration, branching, or human-readable diffs.

We'll go deeper on this contrast later in the Source Control module.

Setup

Get your source control ready

Break

☕

9:55 – 10:10 · Back for build-ready requirements

Build-ready requirements

Vague story vs. build-ready story

Vague

"As a facilities user, I want to request maintenance on equipment so it gets fixed."

Build-ready

Entities: Maintenance Request, Equipment
Roles: Requester (create/view own), Technician (view assigned, update status)
Given–When–Then: Given a Requester submits a request for active Equipment, When they submit, Then a Maintenance Request is created in "New" state and assigned per routing rule.

Activity

Your turn: rewrite it

Why sandboxes

One instance, many developers, zero collisions

Agentic tools change a lot of metadata fast. On a shared instance, that's last-write-wins between developers — a sandbox contains the blast radius, and Git reconciles it.
🏢

Dev instance

Shared, non-prod

→
📦

Your sandbox

Feature branch lives here

→
🧪

Test instance

Separate from dev

→
🏭

Production

Separate from test

Allocate a sandbox before you start, create your feature branch inside it, decommission it when you're done.

Setup

Get your sandbox ready

  • ✅Log in to your sandbox — same credentials from Exercise 01, just your sandbox URL instead of the base instance
  • ✅Confirm your developer sandbox is allocated (from Exercise 01)
  • ✅Create a feature branch off main
$git checkout -b feature/maintenance-app
Build Agent

What is Build Agent?

Go from a plain-language prompt to a working app — in the same session, on the same instance you'll build in today.

Conversational

Describe what you want in plain language; Build Agent proposes the entities, roles, and logic — no forms to click through.

Platform-native

It builds real Fluent metadata objects in your app's scope — not a disposable prototype you throw away later.

Full-loop

It generates the app and its ATF tests in the same session — which is what we'll build on next.

Build Agent

Build Agent in ServiceNow Studio

Build Agent chat panel inside ServiceNow Studio, showing it explain a flow's logic in plain language and suggest fixes for a bug and a scaling issue it found

It reads your app's existing metadata, explains what a flow actually does in plain language, and proposes concrete fixes — grounded in your instance, not a generic answer.

Build Agent + ATF

Tests live in the dev loop, not bolted on

Tests live in app scope, authored while you build — not added after the fact.
Build + test (exercise)

Build + test the maintenance app

  • 👀First, see the finished app — what you're building toward.
  • 💬Prompt Build Agent with the natural-language description from the whitepaper.
  • 🧑‍🏫We'll float table-to-table throughout — flag us down anytime.

OPTIONAL · FOR ARCHITECTS

// the Fluent code Build Agent writes under the hood
export const MaintenanceRequest = Table({
  label: 'Maintenance Request',
  fields: { equipment: Reference('equipment') }
});
Q&A

Questions?

11:30 – 12:00

Lunch

🍽️

Back soon to re-anchor

Re-anchor

Where we left off

✅

Build

Done

→
✅

Test

Done

→
🗂️

Manage

PR, merge, publish

→
🚀

Release

ReleaseOps, deploy

Your app is built and tested. Next: source control and release.

Q&A

Questions?

1:45 – 2:00

Off-instance development (exercise)

The same app, off the platform

Source control (exercise)

Exercise: ship it with Git

📌 Prescriptive point

Git does branching, review, and line-by-line conflict resolution. Update sets cannot.

Break

☕

3:00 – 3:15 · Back for ReleaseOps

ReleaseOps

The App Repository: your bridge to ReleaseOps

🌿

Source control

Merged to main — many versions at once, across sandboxes

→
🗄️

App Repository

A Studio publish makes the app installable on every instance in your company

→
📦

Update Set

Auto-generated by the publish — the actual deployment payload

ReleaseOps doesn't connect to source control directly — it's this auto-generated Update Set that gets promoted into a Deployment Request next.

ReleaseOps

ReleaseOps: Two objects, one pipeline

Deployment Request

The payload container. Promote an Update Set into one, then mark it "Ready to Assess" — the assessment playbook (Instance Scan → Move to Test → Run ATF) runs against it.

Release

The record that moves a cleared Deployment Request to production — On Demand (immediately) or Scheduled (batched at a datetime). Lives on the ReleaseOps controller environment, typically production.

Two paths get you here: promote an Update Set into a Deployment Request (this lab), or trigger it from Git via the CI/CD REST APIs with an approval gate (see choose-your-own-adventure).

ReleaseOps

Why you need three instances

💻

Dev

Where you build, and where Instance Scan runs

→
🧪

Test / Staging

The assessment target — a configurable label, not literally "test"

→
🚀

Production

The separate, final destination

Assessment already moves the payload from dev to your test/staging target. If that's also your final destination, release has nowhere new to push — you need a separate instance for each stage.

Freeze date

The cutoff for reaching Ready for Deployment. Miss it, and the Deployment Request is marked deferred — not blocked, and it can still ride a later release.

Release date

When the batch push to production actually fires, for every non-deferred Deployment Request that's ready.

ReleaseOps (exercise)

The quality-control model

🔍

Instance Scan

Static policy check, on the dev instance

→
📥

Move to test

Assessment begins

→
✅

Run ATF

Functional coverage

→
🚀

Ready for Deploy

Cleared for release

LAB: CREATE A DEPLOYMENT REQUEST, MARK "READY TO ASSESS," WATCH IT RUN

Retest

Rerun the assessment as-is.

Need Code Change

Assessment is invalidated — the Deployment Request returns to Draft and needs a new payload.

Sign Off

Manual approval to proceed.

Q&A

Questions?

3:45 – 4:00

Push to production (demo only)

Promote, deploy, and roll back if needed

Choose your own adventure (exercise)

Pick a track, go deep

Fluent deep dive

More metadata types, transform/sync from UI builders

Testing deep dive

Test Agent triage, Cloud Runner, regression suites

CI/CD APIs

now-sdk cicd, Git-triggered pipelines, approval gates

MCP integrations

Connect Figma/Miro via Connect Hub, build straight from the spec

Custom rules

Rules that change language/terminology in Build Agent output

ReleaseOps

Deployment Request, assessment playbook, Ready for Deploy

Explore whichever track interests you most — we're here for questions. Head to the exercise for ideas to get started.

Wrap

One picture, your app traced across it

📝

Plan

→
🛠️

Build

→
🧪

Test

→
🗂️

Manage

→
🚀

Release

Update sets group work and transport it — nothing more. They are not source control, and they don't merge.

QUESTIONS? PING Ashwin Patti, Shelby Cohen.

Warp Speed (demo only)

Warp Speed — vibe coding, on the platform

Today, using Build Agent at all means being an admin — there's no other option. Delegated dev doesn't fully solve it either: even a delegated dev can't create a new application. Warp Speed builds and proves out the app in an isolated environment first, outside the instance, before it ever touches production.
🔑

Log in

Authenticates against home base

→
💬

Prompt Build Agent

Builds in an isolated runtime

→
🚀

Live URL

Dev and prod at once

Thank You

🙏

Full SDLC guide, reference, and troubleshooting:
servicenow.github.io/sdk/guides/sdlc-guide

Bonus

Build Agent — Autonomous Engineering

Bonus

Test Agent in Autonomous Engineering

Bonus

Build Agent + MCP

Pull specs directly from the tools you already use — Figma, Miro — instead of re-describing them by hand in a prompt.
🔌

Connect Hub

Admin configures the Figma/Miro app

→
🛡️

AI Control Tower

Admin approves it

→
⚙️

Your settings

Enable MCP servers (MCP tab)

→
🤖

Build Agent

Reads specs directly from the tool

One-time admin setup (Connect Hub + AI Control Tower approval), then any developer turns it on for themselves in their own Build Agent settings.

Bonus

Custom rules — changing language

BONUS SLIDE — PENDING/ROADMAP CONTENT PER LEGAL (SLIDE 2). PRESENTER TO FILL IN BEFORE SESSION.