Adobe · Software Engineer
Updated · 2026-09-24

Adobe Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Adobe's product lines include Creative Cloud (Photoshop, Illustrator, Premiere Pro), Document Cloud (Acrobat, Sign), Adobe Experience Cloud for enterprises, and the Firefly AI platform. Software Engineers work across cloud backend microservices, real-time collaboration engines, C++ desktop engines, Java or Scala services and React web interfaces, depending on the team.

This guide covers the four rounds candidates report for Adobe's Software Engineer loop (online assessments, technical conversations, the onsite, and managerial discussions), the reported questions grouped by category (coding, low-level and system design, CS fundamentals, behavioral), practice drills with worked SQL, coding and design exercises, and a seven-day plan. Prepare in one language you can debug in without references, because candidates report that live coding happens without search.

Adobe candidates report 4 rounds · ≈ 3-5 weeks. The stages below are what candidates describe, not a published process.

Build at-least-once pipelines with explicit deduplication horizonsScope every query and cache key by tenantKeep money in integer minor units

37 min read

Practice 15 Software Engineer prompts
24Company bank questionsSnapshot · Sep 24, 2026 PT
8Candidate experiences ↗Read their reports
15Practice promptsAcross five skill areas
3With worked solutionsIncluded in the practice prompts

The Software Engineer role at Adobe spans product lines including Creative Cloud applications such as Photoshop, Illustrator and Premiere Pro, Document Cloud products such as Acrobat and Sign, the enterprise Adobe Experience Cloud, and the Firefly AI platform. Depending on the team, the work sits in cloud-native backend microservices, real-time collaboration engines, C++ desktop engines, Java or Scala services, or React web interfaces.

Reported questions follow that spread. Alongside standard data structures and algorithms, candidates describe C++ memory questions (a thread-safe shared pointer, a pool allocator), operating-system and database fundamentals, and design prompts shaped like the product surface, such as a serverless thumbnail service for uploaded assets and a real-time collaborative canvas. Frontend and web candidates report JavaScript internals and React questions on top of that.

Candidates report interviewing for engineering hubs including San Jose, Lehi, Noida, Bengaluru and Bucharest, and reports say stage counts vary somewhat by region and team. Treat the four rounds below as the reported shape of the loop and confirm your own with the recruiter.

01

Online Assessments

reported

Candidates describe a timed online assessment that mixes multiple-choice questions on core computer science (operating systems, DBMS, computer networks, aptitude) with coding problems. Candidates name HackerRank or CodeSignal as hosts, put the coding portion at two to three problems of LeetCode Medium to Hard difficulty, and report a recruiter screen before it. Prepare for cases the examples do not show, and pace the multiple-choice block, which candidates report is time-restricted. The reported array problems (rotating an array in place, trapping rainwater, the longest subarray with a sum divisible by k) are a good calibration set.

What to demonstrate

  • Whether your solutions pass cases the examples do not show: empty input, a single element, negative numbers, and values that overflow a 32-bit integer
  • Whether you can answer fundamentals questions on paging, indexing, and TCP versus UDP from recall rather than recognition
  • Whether you pace across both sections so the coding problems get enough time

How to prepare

  • Run timed sets that start with a block of CS multiple-choice questions followed by two coding problems, and record where the time went
  • Write a small harness before each solution: the given examples plus empty, single-element and all-negative inputs, printing expected against actual
  • Solve the reported array problems from a blank editor until each is automatic: three reversals for rotation, two pointers for rainwater, first-seen prefix remainders for divisible-by-k
PracHub interview research
02

Technical Conversations

reported

Reported as discussions with senior engineers or hiring managers covering your resume projects, your technical background, and live problem-solving. Candidates report that live coding happens over screen share (HackerRank, Microsoft Teams or Zoom) and that searching online for syntax or library signatures is not allowed and may be treated as a policy violation. Prepare for two modes in one conversation: explaining a project you built down to its trade-offs, and coding in front of someone without autocomplete or documentation.

What to demonstrate

  • Whether you can explain a project on your resume down to the constraint that shaped it, the alternative you rejected, and what you measured
  • Whether you write working code in your chosen language from memory, including standard-library calls and their parameters
  • Whether your narration keeps pace with your code so the interviewer can follow and redirect you

How to prepare

  • For two resume projects, write the constraint, the rejected option, the before-and-after measurement and what went wrong; cut any claim you cannot defend under a follow-up
  • Do timed problems in a plain editor with autocomplete off and no browser tab open, speaking your reasoning aloud
  • List the ten standard-library calls you look up most in your language and drill them until the lookup is gone
PracHub interview research
03

Onsite Interview

reported

Candidates describe the onsite as multiple back-to-back technical sessions covering data structures and algorithms, low-level design and system design. Candidates add that the loop can include a domain-specific evaluation of your stack, such as React and TypeScript or C++ and Java, and that it may run over one or two days. Reported questions span graph and tree problems (Word Ladder with BFS, binary tree maximum path sum), C++ low-level design (a thread-safe shared pointer, a pool allocator), OS and database fundamentals, and product-shaped design prompts such as a serverless thumbnail service and a real-time collaborative canvas. The reports do not tie these questions to specific sessions, so prepare each category to full depth.

What to demonstrate

  • Whether you state the approach and its time and space complexity before coding, then test boundary conditions yourself
  • Whether a low-level design answer holds up as code: ownership, copy and move semantics, and which operations are thread-safe
  • Whether a system design answer starts from functional and non-functional requirements, interfaces and data model before scale, caching and fault tolerance
  • Whether you can explain the fundamentals under the code, such as what happens on a page fault or why a B-tree index serves range queries

How to prepare

  • Implement a shared pointer with an atomic reference count and a pool allocator with a free list, and write tests for self-assignment and last-owner release
  • Take two reported design prompts to API and data-model depth, naming one failure mode and its recovery for each
  • Solve Word Ladder (returning the shortest sequence itself) and maximum path sum from memory, stating complexity and the edge case each is most likely to fail (an unreachable end word, an all-negative tree)
PracHub interview research
04

Managerial Discussions

reported

Reported as conversations on behavioral alignment, collaboration and vision for business impact, and described by candidates as an engineering manager or director round. Reported prompts ask about leading a complex project and its technical trade-offs, handling conflicting priorities from leadership or cross-functional teams, responding to critical feedback or a production failure, and how you demonstrate the values named in the prompt (Creating the Future, Owning the Outcome, Raising the Bar, Be Genuine). A values answer that repeats the value names without a story adds nothing, so attach each one to something you did.

What to demonstrate

  • Whether each story shows a decision you made, with the trade-off and the result, rather than what the team did around you
  • Whether a conflicting-priorities answer shows how you decided and who you told, not only that it was resolved
  • Whether you connect your technical work to its effect on users or the business in concrete terms

How to prepare

  • Write STAR outlines for the reported prompts and for the behavioral topics in PracHub's question bank: building team trust, persisting with a doubted initiative, a major setback, working with a product manager
  • For each of the four named values, pick one specific story and one sentence on what you did, without restating the value
  • Have someone ask why four times on your weakest story, and re-read the project material where your answer runs out
PracHub interview research

8 candidate reports. Individual accounts describe a particular role and hiring cycle.

Account Executive

Adobe Account Executive Interview Experience: prospecting task and no closure

HR Screen → OtherOutcome: ghosted

The process lasted about four rounds and felt more demanding than a standard recruiter-to-manager path. It began with a discovery-style conversation and a peer interview. I was also asked to prospect for a meeting with the hiring manager. That task was awkward because the hiring manager did not answer calls and had a private LinkedIn profile, so outreach was not straightforward even though the pr…

Read full experience
Account Executive

Adobe Account Executive interview: supportive first round followed by radio silence

Outcome: ghosted

The process felt normal and contained, with about three rounds. It began with a recruiter conversation, then a task, and finally a meeting with the hiring manager. Communication ran smoothly at first, and the recruiter was especially supportive. I received helpful, actionable feedback instead of vague notes. After the first round, the experience did not continue that way. I got nothing back. Ther…

Read full experience
Research Analyst

Adobe Research Analyst Interview Experience: One-hour research conversation

Technical ScreenOutcome: offer

After a recruiter touchpoint, I had one technical conversation with a team member. It lasted an hour and stayed mainly focused on the research I had already done and where I wanted to take it during the internship. The process moved quickly. I had the interview and received a decision about two weeks later. There was not much jumping between steps. It was essentially a discussion about my work an…

Read full experience
Software Engineer

Adobe Software Engineer Interview Experience — Five Relaxed Rounds Built Around OOP and API Design

Onsite

This one felt pretty comfortable to interview with — slow pace, none of that being-chased-the-whole-time feeling. Each round was an hour, and in some rounds close to half the time was just chatting. The problems were medium-to-easy, but they really like steering things toward object-oriented design and code design — the questions here are different from what other companies ask. A quick note: I'm…

Read full experience
Software Engineer

Adobe Software Engineer Interview Experience — Scala Trivia, Then a Surprise LeetCode Classic

Technical ScreenOutcome: rejected

This is one of the many applications I scattered around blindly. I applied to GenStudio on the DX team (people on the forum say DX is a "poison team," same as AEP?). When I applied, it happened to line up with Adobe's legendary summer break, so by the time HR came back from vacation and finally reached out to me, I'd already piled up several rejection letters from other places, hah, wry laugh. Th…

Read full experience

PracHub editorial advice for the preparation topics above.

01

Running out of time on the online assessment's coding problems after the multiple-choice block

The reported assessment pairs time-restricted CS multiple-choice questions with two to three coding problems, and candidates warn about exactly this. Before starting, look at both sections and set a stopping point for the multiple-choice block; skip any question you cannot answer on first read and return if time remains. Rehearse it in at least two full timed runs so the split is a habit rather than a decision made under pressure.

02

Searching for syntax during live coding, or depending on autocomplete you will not have

Candidates report that live rounds run over screen share and that searching online can be treated as a policy violation. Pick one language, practise in a plain editor with suggestions off, and drill the calls you usually look up: sorting with a comparator, string split and join, heap operations, ordered-map lookups. If you forget a signature, say what you assume it does and write a one-line wrapper rather than guessing silently.

03

Treating CS fundamentals as an entry-level topic you can skip

Reports say OS, database indexing, threading and language internals come up across experience levels. Prepare to explain virtual memory and TLB lookups, LRU versus MRU replacement, deadlock conditions and a producer-consumer queue, B-tree versus hash indexes, TCP versus UDP, and in C++ destructors, smart pointers and delete versus delete[]. Explain each aloud without notes; recognising a term in a multiple-choice option is not the same as explaining it to an interviewer.

04

Answering the shared-pointer or allocator question with boxes instead of code

These reported questions are low-level design, so expect to write the class. For a shared pointer, show the control block, the atomic increment on copy, the decrement with acquire-release ordering that deletes when the last owner releases, move semantics and self-assignment. State the guarantee precisely: the count is thread-safe, but the pointee and concurrent writes to one shared-pointer object are not. For a pool allocator, show the free list and when you go back to the OS for more memory.

05

Behavioral answers that describe the team's project without your own decision in it

Reported managerial prompts ask about a project you led and its trade-offs, conflicting priorities, and critical feedback or a production failure. For each story, name the decision you personally made, the option you rejected, the result with a number you can qualify, and what you changed afterwards. For the values prompt, attach a concrete example to each named value instead of reciting them.

Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.

12 technical prompts3 include a worked solution

Find the longest contiguous subarray whose sum is divisible by a targe…

medium
data structures and algorithms

Find the longest contiguous subarray whose sum is divisible by a target integer.

Approach
  1. Choose the data structure from the access pattern, not from familiarity.
  2. Restate the input: its shape, its size, and what is guaranteed about it.
  3. State the target complexity and say which constraint rules the naive version out.
Follow-up
  • Which test case would catch an off-by-one here?
  • What is the worst case, and how likely is it on real data?

Implement a solution to find the shortest transformation sequence from…

medium
data structures and algorithms

Implement a solution to find the shortest transformation sequence from a start word to an end word using a dictionary (Word Ladder using BFS).

Approach
  1. Name the brute-force solution and its complexity before improving on it.
  2. Walk one small example through your approach before writing the whole thing.
  3. Restate the input: its shape, its size, and what is guaranteed about it.
Follow-up
  • How does this change if the input no longer fits in memory?
  • Which test case would catch an off-by-one here?

Solve the Rainwater Trapping problem using a two-pointer or dynamic pr…

medium
data structures and algorithms

Solve the Rainwater Trapping problem using a two-pointer or dynamic programming approach.

Approach
  1. Walk one small example through your approach before writing the whole thing.
  2. Restate the input: its shape, its size, and what is guaranteed about it.
  3. Choose the data structure from the access pattern, not from familiarity.
Follow-up
  • How does this change if the input no longer fits in memory?
  • Which test case would catch an off-by-one here?

Given a binary tree, find the maximum path sum between any two nodes (…

medium
data structures and algorithms

Given a binary tree, find the maximum path sum between any two nodes (LeetCode 124 - Binary Tree Maximum Path Sum).

Approach
  1. Name the brute-force solution and its complexity before improving on it.
  2. Choose the data structure from the access pattern, not from familiarity.
  3. 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?

Parse and verify a timestamped multi-signature webhook header

easyWorked solution
parsinghmacconstant-time-comparereplay-protection

An inbound webhook carries a signature header of at most 1 KiB shaped t=<unix seconds>,v1=<64 hex chars>, with up to five v1 values during secret rotation and possibly unknown scheme keys. You hold the raw request body bytes and the currently active signing secrets. Write the parser and the verifier: accept when any active secret reproduces a signature and the timestamp is within a five-minute tolerance in either direction, reject otherwise. Single left-to-right pass over the header, no regular expression. State what is inside the MAC and why.

Approach
  1. Parse in one scan: split on ,, then on the first = only, since a value may itself contain = under a future scheme. Accept t exactly once and treat a second t as a reject rather than last-wins. Push every v1 onto a short list and ignore any other key, so a v2 can be introduced later without breaking this verifier.
  2. Say what is signed: HMAC-SHA256 over the exact byte string <t>.<raw body bytes>, yielding 32 bytes or 64 hex characters. The timestamp sits inside the MAC because otherwise an attacker replays yesterday's body with its still-valid signature and only has to edit the header timestamp.
  3. Hash the bytes as received. Verifying against a re-serialised JSON body is the usual defect: key order, whitespace and number formatting all change the bytes while the parsed objects compare equal, so signatures fail for honest senders and the popular 'fix' is to stop checking.
  4. Compare in constant time over fixed-length digests. Decode the hex to 32 bytes, accumulate acc |= a[i] ^ b[i] across the whole length, and test acc == 0 at the end. Evaluate every candidate without an early exit; at five candidates that is five HMACs over the body, linear in body size and negligible beside the network.
  5. Apply the tolerance as a two-sided bound, rejecting when |now - t| > 300 seconds. A sender whose clock runs ahead of yours is an ordinary case, and an unbounded future timestamp is a free replay window.
  6. Complexity: O(L) over the header producing k candidates, plus k HMACs at O(|body|) each. Space is O(k) beyond the body itself. Do the cheap rejections, including the tolerance check, before any cryptography runs.
Worked solution 15 min
  1. Write the grammar on one line before coding: header := field (',' field)*, field := key '=' value, split on the first = only.
  2. Implement the parser to return {t: int, v1: [hex, ...]}, rejecting a missing t, a duplicate t, any v1 that is not 64 hex characters, and a header over 1 KiB, all before any cryptography runs.
  3. Implement the verifier: for each active secret compute HMAC-SHA256(secret, f'{t}.'.encode() + raw_body), compare it in constant time against each parsed v1, and OR the results with no early exit.
  4. Test with a valid signature; the same body with t moved 400 seconds into the past; the same body with t 400 seconds into the future; a header carrying an unknown v2= alongside a valid v1; and a body re-serialised with different JSON key order.
EXPECTED RESULTThe valid case accepts. Both out-of-tolerance cases reject, including the future one. The unknown `v2` field is ignored and the `v1` still verifies. The re-serialised body fails, which is correct and is exactly why the raw bytes must be retained.
Follow-up
  • The body is 40 MB. What changes about where you verify, and what can you do before the whole body has arrived?
  • A customer reports that signatures fail for exactly the requests whose body contains a non-ASCII character. What is your first hypothesis?
  • How do you rotate the signing secret with no failed deliveries, and how long do both secrets stay live?

For a candidate senior enough that the loop turns on design and judgement rather than on whether the coding round gets finished. Five days build one system properly and then stress it; coding gets a single maintenance day, on the assumption that the risk at this level is an unexamined tradeoff rather than a missed algorithm.

Small steps. Visible outcomes.0 / 7 completed
ONE WEEK · YOUR PACE

Prepare, practise & reflect

One practical outcome each day. Spend longer where you need it.

0 / 7 done
01Online assessment: array and prefix-sum problems under a clock
  • Solve the reported array problems timed, from a blank editor: rotate an array in place with three reversals (O(n) time, O(1) space), trapping rainwater with two pointers, and the longest subarray whose sum is divisible by k using first-seen prefix remainders.
  • For divisible-by-k, write the edge cases before coding: negative numbers (normalise each remainder into 0..k-1), a prefix remainder of 0 (seed the map with remainder 0 at index -1), and an answer spanning the whole array.
  • Before each submission, run a harness with the given examples plus empty and single-element inputs.
  • Do one timed run that starts with a block of OS, DBMS and networking multiple-choice questions, then the coding problems, and note where the time went.

Deliverable: Three reported array problems solved from memory with a test harness, plus a note on how much time the multiple-choice block cost you.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Worked solution ↗
02Graphs and trees for the onsite algorithm sessions
  • Word Ladder: BFS from the start word, generating neighbours by substituting each position with each letter and checking a set of dictionary words. When a word is first enqueued, mark it visited and record its parent in a map. State the cost as roughly N x L x 26 candidates, each O(L) to build and hash.
  • Once the end word is reached, walk the parent map back to the start word and reverse it to return the shortest transformation sequence, or an empty result if the end word is unreachable. Returning only the sequence length (the BFS level count) is the common variant.
  • Binary tree maximum path sum: a post-order pass that returns the best downward gain, max(0, child gain), and updates a global best with node + left + right. Test an all-negative tree.
  • Work the tree and graph topics in PracHub's question bank: BST validation with bounds, level-order traversal, lowest common ancestor when both nodes may be missing, and task ordering with prerequisites via topological sort that reports a cycle.

Deliverable: Word Ladder returning the shortest sequence via a parent map, maximum path sum with stated complexity, and one topological sort that detects a cycle.

Practice prompt ↗Practice prompt ↗
03CS fundamentals for the assessment and the onsite
  • OS: explain virtual memory, paging, TLB hits and misses, and LRU versus MRU page replacement, then walk through a page fault step by step aloud.
  • Threads: list the four deadlock conditions and how lock ordering breaks one; implement a bounded producer-consumer queue with a mutex and two condition variables, waiting in a loop.
  • Databases: B-tree versus hash indexes and which queries each serves; then work the guide's worked SQL exercise on keyset pagination and the SQL topics in PracHub's question bank (average grade per subject with NULL-safe aggregation, filtering students by grade).
  • Networking: TCP versus UDP, and how HTTP/2 multiplexes streams over one connection.

Deliverable: One page of fundamentals notes you can explain without references, and a working bounded queue.

Practice prompt ↗Practice prompt ↗
04Low-level design, written as code
  • Implement the reported shared pointer: a control block with an atomic count, increment on copy, fetch_sub with acquire-release ordering on release and delete when the previous count was 1, plus copy and move assignment handling self-assignment.
  • Explain delete versus delete[]: a hand-written shared pointer with no array specialisation, or a std::shared_ptr<T> built from new T[n], must be given a custom deleter that calls delete[]; since C++17, std::shared_ptr<T[]> calls delete[] by default.
  • Build the reported client-side cache with key expiration and a size limit: a hash map plus a doubly linked list for LRU order, expiry checked on read with a periodic sweep, and a stated rule for which entry goes first when both limits apply.
  • Sketch a fixed-size pool allocator: a free list threaded through unused blocks so allocate and release are O(1) and system calls happen only when the pool grows.

Deliverable: A compiling shared pointer and a TTL-plus-LRU cache, each with tests for self-assignment, expiry and eviction order.

Practice prompt ↗Practice prompt ↗Worked solution ↗
05System design from the reported prompts
  • Serverless thumbnail service: upload to object storage, one event per upload, function workers producing each size, output keyed by asset id and size so a retried job overwrites rather than duplicates. Use the guide's worked design exercise on idempotent retries for the same reasoning.
  • Real-time collaborative canvas: requirements first, then the trade-off between operational transformation and CRDTs, presence, persistence, and two users editing the same object.
  • Q&A assistant on an enterprise platform (a design topic in PracHub's question bank): retrieval over customer content, per-tenant scoping, and where latency goes.
  • Open every design with functional and non-functional requirements, APIs and the data model before scale, caching or fault tolerance.

Deliverable: Two designs taken to API and data-model depth, each with a named failure mode and its recovery path.

Practice prompt ↗Practice prompt ↗
06Technical conversations: your projects and live coding
  • For two resume projects, write the constraint, the rejected alternative, the measurement before and after, and what broke; rehearse each until you can take an unplanned follow-up.
  • Do a live coding session over screen share with autocomplete off and no search, narrating as you go; the guide's worked coding exercise on parsing a signed webhook header is a good single-pass parsing drill.
  • If your target team is web-facing, add the reported frontend set: a React counter hook with pause, resume and reset that clears its interval on pause and unmount, event loop ordering of microtasks and macrotasks, and a request handler with client-side throttling and retry with backoff.

Deliverable: Two project write-ups that survive follow-ups, and one recorded live-coding session you have reviewed.

Practice prompt ↗Practice prompt ↗
07Managerial discussions and a full mock
  • Write STAR stories for the reported prompts: a complex project you led and its trade-offs, conflicting priorities from leadership or other teams, critical feedback or a production failure, and your strengths and weaknesses.
  • Map one specific story to each value named in the reported values prompt (Creating the Future, Owning the Outcome, Raising the Bar, Be Genuine).
  • Run a mock with one coding problem, one design prompt and one behavioral question, and ask the interviewer to change a requirement partway through the design.

Deliverable: A story bank covering every reported behavioral prompt, and mock notes recording what changed under the new requirement.

Practice prompt ↗Practice prompt ↗Worked solution ↗

Expand any day for tasks and deliverables. Your progress is saved on this device.

Candidates report behavioral questions in the managerial discussions: leading a complex project, conflicting priorities, critical feedback or a production failure, and a prompt built around four named values. Prepare stories where you made the decision, name the trade-off you accepted, give a result you can qualify with a number, and say what you changed afterwards. For the values prompt, one concrete story per value beats a restatement of the list.

How do you handle a scenario where leadership or cross-functional team…

medium
behavioural and engineering judgement

How do you handle a scenario where leadership or cross-functional teams ask for conflicting project priorities?

Approach
  1. Give the blast radius: what could have broken, and what you measured.
  2. Close with what you would do differently, concretely.
  3. Pick a story where you made the decision, not one where you watched it.
Follow-up
  • What did you decide not to do, and why?
  • What would you do differently if you ran that again?

Share an experience where you received critical feedback or faced an u…

medium
behavioural and engineering judgement

Share an experience where you received critical feedback or faced an unexpected system failure in production, and how you responded.

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. Name the disagreement and how you resolved it with evidence.
Follow-up
  • How did you know your change caused the improvement?
  • What did you decide not to do, and why?

Own the incident where invoices undercounted metered usage

medium
incident responseat-least-oncebilling correctionpostmortem

A metering consumer acknowledged each batch before committing the fold into usage_rollup_hourly. A rolling deploy restarted consumers mid-batch for two hours; roughly 1.4M usage_event rows were acknowledged and never folded, and 61 invoices sealed against the resulting rollups before anyone noticed. Take the owner's role. Describe an incident of comparable blast radius you owned: how it surfaced, the query that sized the loss, what you stopped first, and how the money was corrected. Give a wall-clock timeline and one thing you got wrong while it was still live.

Approach
  1. Open with the invariant that broke and the direction of the error, because they determine everything else: acknowledging before committing makes the consumer at-most-once, so this loses events rather than duplicating them, and loss raises no error anywhere. A listener who hears 'we lost revenue silently' knows immediately why detection took two hours.
  2. Size it with a stated reconciliation rather than an adjective: sum(quantity) from usage_event grouped by (tenant_id, sku, hour of occurred_at) over the window, against usage_rollup_hourly.quantity_sum on the same keys, filtered to environment='production' because staging and sandbox are metered but not billed. Then bisect by hour and tenant until single cells explain the gap. Say how long that ran and whether a replica could serve it while the incident was live.
  3. Separate mitigation from fix and say which came first. Mitigation is holding the sealing job, because a sealed row is frozen by design and every minute of sealing converts a recoverable rollup into an invoice correction. The fix is moving the acknowledgement after the commit, which re-introduces duplicates that the dedup check on (tenant_id, idempotency_key) must now absorb.
  4. State the correction path in the domain's own terms: sealed periods are never edited, so each affected tenant gets an adjustment line on the next invoice with kind='adjustment' and voided_by_line_id pointing at the line it reverses, priced against the same rate tier and carrying the watermark it priced against. That is four separate numbers — tenants affected, minor units, the cycle the adjustment lands in, and when customers were told.
  5. Close on one prevention control with its cost, not five: a per-hour reconciliation comparing raw sum to rollup sum that pages above a threshold. Name the threshold and the false-page rate you accepted, because a detector nobody will keep staffed is not prevention.
  6. Name a mistake you made inside the response window — the wrong first hypothesis, a mitigation that made it worse — rather than a design mistake from six months earlier. That is the part candidates rehearse away and interviewers weight heavily.
Follow-up
  • Your fix moves the acknowledgement after the commit. What breaks now, and what absorbs it?
  • One undercharged tenant has since churned. Do you bill them, and who decides?
  • How would you have caught this in ten minutes instead of two hours, and what would that detector cost you in pages per week?
  • 01

    Describe a complex project you led, detailing the key technical trade-offs and architecture decisions you made.

  • 02

    How do you handle a scenario where leadership or cross-functional teams ask for conflicting project priorities?

  • 03

    Share an experience where you received critical feedback or faced an unexpected system failure in production, and how you responded.

  • 04

    How do you demonstrate Adobe's core values (Creating the Future, Owning the Outcome, Raising the Bar, Be Genuine) in your daily engineering work?

  • 05

    What are your strengths and weaknesses? Give an example of each and what you are doing about the weakness.

  • 06

    Describe a time you and a product manager disagreed on a feature. How did you reach a decision?

PracHub interview preparation framework
Is this an official Adobe interview guide?

No. It is PracHub's own research and practice material for the Software Engineer role at Adobe. Rounds and questions reflect what candidates have reported, not a process Adobe has published, and they change over time. Confirm the current format and scope with your recruiter.

PracHub interview research
How difficult are the algorithmic coding questions at Adobe?

Candidate reports put the coding questions between LeetCode Medium and Hard. Aim for clean, working code with edge cases handled, not only the optimal complexity. Reported examples include Word Ladder, trapping rainwater, binary tree maximum path sum and the longest subarray with a sum divisible by k, so calibrate on graph, tree, two-pointer and prefix-sum problems.

PracHub interview research
Can I search online or access reference docs during live coding rounds?

Reports say no. Live coding is described as happening over screen share on HackerRank or on Microsoft Teams or Zoom, and searching for library signatures may be treated as a policy violation. Practise in one language with autocomplete off until standard syntax and library calls come from memory, and if you are unsure of a signature, state your assumption aloud.

PracHub interview research
Does Adobe test CS fundamentals like OS and DBMS for experienced roles?

Candidate reports say yes: operating systems, database indexing, threading and object-oriented language internals come up across experience levels, both as multiple-choice questions in the online assessment and in later conversations. Reported topics include virtual memory, paging and TLB hits, page replacement, C++ destructors and smart pointers, B-tree and hash indexes, deadlock prevention, and TCP versus UDP.

PracHub interview research
What is the typical timeline from initial screen to final offer decision?

Reports vary. The round summary gives roughly three to five weeks across four rounds, while other candidate accounts range from two to six weeks depending on team and regional scheduling. Ask your recruiter for the expected gap after the online assessment so you can plan preparation around it.

PracHub interview research
What is in the Adobe online assessment?

Candidates describe multiple-choice questions on core computer science (operating systems, DBMS, computer networks and aptitude) combined with two to three algorithmic coding problems of Medium to Hard difficulty, hosted on HackerRank or CodeSignal. Reports warn that the multiple-choice section is time-restricted, so pace it and leave room for the coding problems.

PracHub Software Engineer practice
How are candidates matched to specific product teams?

Candidates describe team matching happening either before interviewing for a specific requisition or after a general panel loop. Either way, state your stack preference (for example C++ engine work, React frontend or Java backend) to your recruiter early, and prepare the stack-specific material that goes with it.

PracHub Software Engineer practice
Do frontend and web candidates get different questions?

Reports say web-focused candidates also get JavaScript and React depth: closures, event loop ordering and scope binding, Promises versus async/await versus callbacks, a custom React counter hook with pause, resume and reset, an API request handler with client-side throttling and retry, and a client-side cache with expiration and size limits. Prepare these alongside the general algorithms material, not instead of it.

PracHub Software Engineer practice
Sources & methodology 3 sources ↗

Official role evidence, timestamped platform data and clearly labeled preparation advice.