cswork / libraryOpen practice workspace

Interview guides · ServiceNow

ServiceNow Software Engineer Interview Guide

ServiceNow Software Engineer interview guide: reported rounds, questions and how candidates describe the process.

The 60-second brief

A Software Engineer at ServiceNow designs, builds, and optimizes the scalable enterprise cloud solutions that power digital workflows for thousands of organizations worldwide. Operating at the intersection of high-throughput distributed systems, enterprise data management, and modern user experience, engineers on this team drive the technology behind the Now Platform. Positioned within a high-growth environment, this role offers direct involvement in shaping enterprise cloud computing, automated workflow engine design, and cutting-edge artificial intelligence integration. Engineers in this role work on complex problem spaces ranging from high-concurrency database platforms and workflow orchestration engines to modern web interfaces and AI-driven automation tools.

This guide is scoped to a Software Engineer candidate at ServiceNow.

Focus areas

  • Data Structures & Algorithms (DSA)
  • SQL
  • Problem Solving

The ServiceNow interview process

ServiceNow candidates report 3 rounds over 3-5 weeks. The stages below are what candidates describe, not a published process.

Online Assessment

Candidates complete an assessment featuring DSA problems, SQL challenges, and tasks related to Prompt Engineering or logic puzzles.

What to demonstrate

  • Candidates complete an assessment featuring DSA problems, SQL challenges, and tasks related to Prompt Engineering or logic puzzles
  • Depth in Data Structures & Algorithms (DSA)

How to prepare

  • Answer aloud and timed: Given the root of a binary tree and an integer target sum, return the number of paths where the sum of values along the path equals the target sum (Path Sum III).
  • Answer aloud and timed: Implement a Disjoint Set (Union-Find) structure to detect dynamic connectivity and track components in a network graph.

Technical Phone Screen

A live coding interview where candidates demonstrate their technical skills.

What to demonstrate

  • A live coding interview where candidates demonstrate their technical skills
  • Depth in Data Structures & Algorithms (DSA)

How to prepare

  • Be able to walk your CV end to end in two minutes, and say why this company specifically.
  • Have your salary expectations, notice period and location constraints ready, and ask for the rest of the loop in writing.

Virtual Onsite

Consists of 3 to 4 rounds including two technical coding rounds, a system design round, and a Techno-Managerial or HR round.

What to demonstrate

  • Consists of 3 to 4 rounds including two technical coding rounds, a system design round, and a Techno-Managerial or HR round
  • Depth in Data Structures & Algorithms (DSA)

How to prepare

  • Answer aloud and timed: Given NN sorted arrays of varying sizes, merge them into a single sorted array with an optimal time complexity of O(Klog⁡N)O(K \log N).
  • Answer aloud and timed: Design a Low-Level Object-Oriented Loan Management System that tracks customer loans, calculates monthly EMIs across custom timeframes, and handles advance payment adjustments.

Where candidates lose points

Prioritize SQL and Database Query Practice

Database concepts are heavily tested. Practice writing complex SQL queries involving aggregations, window functions, and multi-table JOINs on paper or in plain text editors.

Practice Explaining Your Code Out Loud

Technical evaluators assess how you think under pressure. Verbalize your approach, mention trade-offs, and state your time and space complexity before writing code.

Check-then-act on shared state

Read, decide, write is not safe under concurrency unless the decision and the write are one atomic step: a unique constraint with conflict handling, a compare-and-set, or a row lock held for the whole transaction. Two requests can both pass the existence check before either inserts, which shows up as duplicate rows under load and never in a single-threaded test.

Questions & practice

Given the root of a binary tree and an integer target sum, return the number of paths where the sum of values

Medium · Data Structures & Algorithms

Given the root of a binary tree and an integer target sum, return the number of paths where the sum of values along the path equals the target sum (Path Sum III).

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Implement a Disjoint Set (Union-Find) structure to detect dynamic connectivity and track components in a netwo

Medium · Data Structures & Algorithms

Implement a Disjoint Set (Union-Find) structure to detect dynamic connectivity and track components in a network graph.

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Given a set of overlapping time intervals, write an algorithm to merge all overlapping intervals into a sorted

Medium · Data Structures & Algorithms

Given a set of overlapping time intervals, write an algorithm to merge all overlapping intervals into a sorted array.

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Traverse a multi-dimensional matrix to find the shortest path or optimal traversal under specific boundary con

Medium · Data Structures & Algorithms

Traverse a multi-dimensional matrix to find the shortest path or optimal traversal under specific boundary constraints.

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Given NN sorted arrays of varying sizes, merge them into a single sorted array with an optimal time complexit

Medium · Data Structures & Algorithms

Given NN sorted arrays of varying sizes, merge them into a single sorted array with an optimal time complexity of O(Klog⁡N)O(K \log N).

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Implement a custom LRU Cache data structure from scratch using a doubly linked list and hash map bindings.

Medium · Low-Level & High-Level System Design

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Walk through Operating System process management, thread synchronization mechanisms, and deadlock prevention t

Medium · Databases & Core CS Fundamentals

Walk through Operating System process management, thread synchronization mechanisms, and deadlock prevention techniques.

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

Give an example of how you prioritized task execution and managed trade-offs when operating under ambiguous re

Medium · Behavioral & Past Projects

Give an example of how you prioritized task execution and managed trade-offs when operating under ambiguous requirements.

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Write an advanced SQL query involving subqueries, multi-table joins, and window functions to aggregate enterpr

Medium · Databases & Core CS Fundamentals

Write an advanced SQL query involving subqueries, multi-table joins, and window functions to aggregate enterprise platform usage metrics.

Approach

  1. Name the grain you start from and join outward from it.
  2. Check whether any join is one-to-many before aggregating, or the sums inflate.
  3. Say which index the query would use, and what makes it unusable.
  4. Handle the rows that do not match: that is usually the actual question.

Follow-up

  • How does the query change if that join becomes one-to-many?
  • What happens to this when the table is ten times larger?

Keep soft-deleted accounts from blocking re-registration

Easy · soft delete · unique constraints · engine differences

app_user holds user_id, tenant_id, email CITEXT, password_hash (NULL for SSO principals), email_verified_at, auth_version, status ('invited','active','suspended','deactivated'), created_at, updated_at, deleted_at. Two live accounts for one address inside a tenant must be impossible, but an address freed by a soft delete must be reusable, and the same tenant may delete and re-register it repeatedly. Write the uniqueness DDL for PostgreSQL 16, then the equivalent for MySQL 8 where partial indexes do not exist, and say what each permits once three deleted rows already hold that address.

Approach

  1. Start from what is actually unique: not (tenant_id, email), but (tenant_id, email) among live rows. PostgreSQL says that directly — CREATE UNIQUE INDEX app_user_live_email ON app_user (tenant_id, email) WHERE deleted_at IS NULL. A full constraint over the same two columns burns the address permanently the first time someone deletes an account.
  2. Keep case-insensitivity in the type or the index, never in the application: CITEXT as given, or UNIQUE (tenant_id, lower(email)) as an expression index where the extension is unavailable. A case-sensitive unique column is exactly how two accounts for one human appear.
  3. For MySQL 8 the predicate has to move inside the key: add a discriminator column that is a constant 0 while the row is live and is set to user_id on delete, with UNIQUE (tenant_id, email, deleted_marker). Live rows share the constant and still collide; deleted rows differ from each other and stop colliding.
  4. State the NULL variant and its dependency: leaving the marker NULL for deleted rows also works, because a unique index treats NULLs as distinct — true in MySQL, and true in PostgreSQL only under the default NULLS DISTINCT, which PostgreSQL 15 lets you reverse. Check the polarity against the three existing deleted rows: constant-on-live is what preserves the collision you want, and reversing it silently admits duplicate live accounts.

Follow-up

  • A deleted account re-registers with the same address the next day. Do the old resource rows follow the new user_id, and how does the API keep the two principals apart?
  • How do you honour an erasure request while resource_revision.actor_user_id still references this table?

Design a Low-Level Object-Oriented Loan Management System that tracks customer loans, calculates monthly EMIs

Medium · Low-Level & High-Level System Design

Design a Low-Level Object-Oriented Loan Management System that tracks customer loans, calculates monthly EMIs across custom timeframes, and handles advance payment adjustments.

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

Architect a high-level real-time messaging system (similar to WhatsApp), detailing chat storage schemas, messa

Medium · Low-Level & High-Level System Design

Architect a high-level real-time messaging system (similar to WhatsApp), detailing chat storage schemas, message delivery states, and online user status tracking.

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

Design an Object-Oriented class architecture for an automated Vending Machine, managing dynamic inventory, mul

Medium · Low-Level & High-Level System Design

Design an Object-Oriented class architecture for an automated Vending Machine, managing dynamic inventory, multi-currency processing, and error states.

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

Architect a distributed caching framework including key-value hashing, write-through/write-back strategies, an

Medium · Low-Level & High-Level System Design

Architect a distributed caching framework including key-value hashing, write-through/write-back strategies, and cache eviction policies.

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

Explain the ACID properties of database transactions and how isolation levels prevent dirty reads and non-repe

Medium · Databases & Core CS Fundamentals

Explain the ACID properties of database transactions and how isolation levels prevent dirty reads and non-repeatable reads.

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

Describe the execution model of the JavaScript event loop, including microtask and macrotask queue prioritizat

Medium · Databases & Core CS Fundamentals

Describe the execution model of the JavaScript event loop, including microtask and macrotask queue prioritization.

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

Formulate a structured prompt engineering strategy to transform unstructured customer incident logs into stand

Medium · Modern Automation & Prompt Engineering

Formulate a structured prompt engineering strategy to transform unstructured customer incident logs into standardized JSON database payloads.

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

Walk me through a challenging project on your resume, detailing your specific architectural decisions and meas

Medium · Behavioral & Past Projects

Walk me through a challenging project on your resume, detailing your specific architectural decisions and measurable business outcomes.

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

Given an inefficient code snippet or buggy algorithm, walk through a step-by-step debugging walkthrough and op

Medium · Modern Automation & Prompt Engineering

Given an inefficient code snippet or buggy algorithm, walk through a step-by-step debugging walkthrough and optimize the logic.

Approach

  1. Establish what changed and when, before forming any theory.
  2. Pick a bisection that eliminates candidates whichever way it turns out.
  3. Check the instrumentation before believing the symptom.
  4. Separate the trigger from the cause; the deploy is rarely the bug.

Follow-up

  • What would you look at first, and what would it rule out?
  • How would you tell a cause from a coincidence here?

Explain how you leverage automated coding assistants and LLMs to accelerate debugging while maintaining strict

Medium · Modern Automation & Prompt Engineering

Explain how you leverage automated coding assistants and LLMs to accelerate debugging while maintaining strict security and quality standards.

Approach

  1. Establish what changed and when, before forming any theory.
  2. Pick a bisection that eliminates candidates whichever way it turns out.
  3. Check the instrumentation before believing the symptom.
  4. Separate the trigger from the cause; the deploy is rarely the bug.

Follow-up

  • What would you look at first, and what would it rule out?
  • How would you tell a cause from a coincidence here?

Suggested practice checklist

Built from the rounds and topics ServiceNow candidates report.

Day 1 — Map the ServiceNow loop

  • Write out the reported sequence: Online Assessment, Technical Phone Screen, Virtual Onsite.
  • For each round, write one sentence on what it is judging, from the description above, and mark the one you are least ready for.

Deliverable: A one-page map of the 3 reported rounds, with the weakest marked.

Day 2 — Work Data Structures & Algorithms (DSA)

  • Spend the session on Data Structures & Algorithms (DSA), which ServiceNow candidates report being tested on.
  • Write one worked example in Data Structures & Algorithms (DSA) and time yourself on it.

Deliverable: One timed worked example in Data Structures & Algorithms (DSA).

Day 3 — Work SQL

  • Spend the session on SQL, which ServiceNow candidates report being tested on.
  • Write one worked example in SQL and time yourself on it.

Deliverable: One timed worked example in SQL.

Day 4 — Work Problem Solving

  • Spend the session on Problem Solving, which ServiceNow candidates report being tested on.
  • Write one worked example in Problem Solving and time yourself on it.

Deliverable: One timed worked example in Problem Solving.

Day 5 — Answer out loud: Data Structures & Algorithms

  • Answer aloud, timed: Given the root of a binary tree and an integer target sum, return the number of paths where the sum of values along the path equals the target sum (Path Sum III).
  • Answer aloud, timed: Implement a Disjoint Set (Union-Find) structure to detect dynamic connectivity and track components in a network graph.

Deliverable: Spoken answers to 2 reported Data Structures & Algorithms question(s), under time.

Day 6 — Answer out loud: Low-Level & High-Level System Design

  • Answer aloud, timed: Design a Low-Level Object-Oriented Loan Management System that tracks customer loans, calculates monthly EMIs across custom timeframes, and handles advance payment adjustments.
  • Answer aloud, timed: Architect a high-level real-time messaging system (similar to WhatsApp), detailing chat storage schemas, message delivery states, and online user status tracking.

Deliverable: Spoken answers to 2 reported Low-Level & High-Level System Design question(s), under time.

Day 7 — Answer out loud: Databases & Core CS Fundamentals

  • Answer aloud, timed: Write an advanced SQL query involving subqueries, multi-table joins, and window functions to aggregate enterprise platform usage metrics.
  • Answer aloud, timed: Explain the ACID properties of database transactions and how isolation levels prevent dirty reads and non-repeatable reads.

Deliverable: Spoken answers to 2 reported Databases & Core CS Fundamentals question(s), under time.

Behavioural preparation

Behavioural rounds judge the decision you made and what it cost.

Describe a time when you faced a complex technical bug late in a release cycle. How did you diagnose and resol

Medium · Behavioral & Past Projects

Describe a time when you faced a complex technical bug late in a release cycle. How did you diagnose and resolve it?

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

How do you handle technical disagreements with senior engineers or managers when deciding on system architectu

Medium · Behavioral & Past Projects

How do you handle technical disagreements with senior engineers or managers when deciding on system architecture?

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Estimate work you have never done and defend the range

Hard · estimation · backfills · expand-contract

You are asked to estimate a change you have never attempted: add a column to a 100-million-row table, populate it, move reads across, and drop the old shape. Give a range with the assumptions that generate it, including batch size, the signal your backfill throttles on, and wall-clock hours, and name the three unknowns that would move the number most. Then describe a real estimate you gave under comparable ignorance: how you expressed its uncertainty, what you committed to, and how wrong you turned out to be.

Approach

  1. Decompose into independently deployable steps before estimating anything: add the column nullable, write both shapes, backfill in batches, verify, move reads, stop writing the old shape, drop it. That is four deploys spread over days, and the calendar estimate is dominated by them rather than by the loop's runtime.
  2. Do the arithmetic aloud for the part that has arithmetic in it: batch size times number of batches times per-batch duration, at a write rate the primary can absorb alongside roughly 1.2k writes per second of production traffic. The loop is throttled by replication lag and lock waits, not by how fast it can issue statements.
  3. Price the schema step by its lock rather than its statement duration. In PostgreSQL an ALTER TABLE taking ACCESS EXCLUSIVE waits for every open transaction on that table while later queries queue behind it, so a millisecond change issued during a thirty-second analytics query stalls that table for thirty seconds. Adding a nullable column with a non-volatile default avoids a rewrite from version 11; a new index wants CREATE INDEX CONCURRENTLY, which cannot run inside a transaction block and leaves an invalid index behind if it fails.
  4. Express the answer as a range whose endpoints each trace to a stated assumption, then name the cheapest experiment that collapses it, which is almost always running one real batch against the real table and multiplying.

Follow-up

  • How do you verify the backfill genuinely finished, given rows written by production traffic while it ran?
  • Where does the backfill resume from after a worker is killed mid-batch, and what makes that resume point trustworthy?