cswork / libraryOpen practice workspace

Interview guides · Bread Financial

Bread Financial Software Engineer Interview Guide

Bread Financial Software Engineer interview guide: reported phone screen, technical and behavioral rounds, coding and design questions, and a 7-day plan.

The 60-second brief

Candidates describe Bread Financial as a company whose software engineers build and maintain the technology behind financial products for consumers. The role lists writing code that meets business requirements, building features alongside product managers, designers and other engineers, reviewing teammates' code, debugging applications, and working inside continuous integration and agile delivery. Languages named as must-haves are Java, Python or JavaScript, with Git for version control. Familiarity with AWS or Azure, microservices, RESTful APIs and financial technology standards is listed as a bonus. For you, that means the loop is built around general software engineering skills in one of those languages, not around a single narrow product area.

This guide is for candidates interviewing for a Software Engineer position at Bread Financial. It covers the three reported rounds (Phone Screen, Technical Assessments, Behavioral Interviews), the reported coding, design, debugging and behavioral questions with worked approaches, and a seven-day plan. It does not cover specialist tracks such as data science or machine learning, and it makes no claims about team-specific projects.

Candidates report 3 rounds over about 3-5 weeks: a Phone Screen, Technical Assessments and Behavioral Interviews. Reported topics include coding, data structures, system design, pair programming and cultural fit.

Focus areas

  • Coding interviews (problem solving)
  • Data structures
  • Systems design

Overview

The responsibilities candidates describe for this role are everyday engineering work: writing maintainable code for stated requirements, building features with product and design partners, taking part in code review, tracking down defects, tuning performance, and shipping through continuous integration in an agile team. Interview preparation should therefore look like that work: clean code in Java, Python or JavaScript, clear explanations of design choices, and calm debugging.

The reported question set is broad rather than company-specific. On the technical side it includes synchronous versus asynchronous programming, a challenging bug story, design patterns, designing a URL shortening service, describing the architecture of a web application you built, building a distributed system, optimizing an existing application, working with arrays or linked lists, and reversing a string. Candidates also list pair programming and collaborative coding among the topics. Expect fundamentals explained out loud, so practise talking while you write.

Several questions ask about your own work: the bug you resolved, the web application you built, the project where you had to change strategy. Choose two or three real projects now and be ready to go deep on each: the components, the trade-offs you made, what broke, and what you would change. A well-prepared project can answer the architecture, bug, performance and pivot questions with the same material.

The final stage is described as behavioral interviews on cultural fit and problem-solving approach, and the reported prompts cover conflict, prioritization, leadership, working with people from diverse backgrounds, and team values. These are best answered with specific stories in first person, structured as situation, task, action, result, with your own decisions visible. Build the story bank early so it does not compete with coding practice in the final days.

The Bread Financial interview process

Candidates report three rounds over about 3-5 weeks: Phone Screen, Technical Assessments and Behavioral Interviews. The reports describe each stage only briefly, so the preparation below is organised by the question types reported for the loop.

Phone Screen

Candidates describe the Phone Screen as an initial call that looks at your background and how you fit the role. No fixed question list is reported for this stage, so treat it as the place where your CV, your chosen language and your projects have to hold together in conversation. Go in with a short, structured account of your experience, one project you can describe at architecture level, and a clear reason you want a Software Engineer role at Bread Financial.

What to demonstrate

  • How your background lines up with the Software Engineer role, as the stage is described
  • How clearly you describe past projects and the technologies you used in them
  • Whether your preferred language (Java, Python or JavaScript are the ones listed) matches what the role asks for

How to prepare

  • Write a short walkthrough of your career that ends at this role, and cut anything that does not support it.
  • Pick one web application you built and be able to name its components, data store, API style and deployment, since the architecture question is a reported one.
  • Read the role's listed requirements (Java, Python or JavaScript, Git, agile) and note one concrete example of each from your own work.
  • Prepare questions about the format of the technical rounds, including whether any session is pair programming, so you know what to rehearse.

Technical Assessments

Candidates describe the Technical Assessments as evaluations of your technical skills, and the reported topics for the loop include coding problem solving, data structures, system design and pair programming or collaborative coding. This stage is where the coding questions (arrays, linked lists, string reversal), the design questions (URL shortener, distributed systems, web application architecture) and the fundamentals questions (synchronous versus asynchronous, design patterns, performance) are practised. Choose one language, write working code in it without lookups, and narrate your reasoning as you go.

What to demonstrate

  • Working code for array, linked list and string problems, with complexity stated
  • Design reasoning for a service such as a URL shortener, including trade-offs and failure handling
  • Understanding of fundamentals such as asynchronous execution, design patterns and performance tuning
  • How well you explain your thinking while solving, which the reported coding questions call out directly

How to prepare

  • Solve string reversal and a linked-list problem in your chosen language, covering empty input, a single element and Unicode, and say the time and space cost aloud.
  • Practise a pair-programming style session with a friend: type, think aloud and take hints without stalling.
  • Design a URL shortening service end to end: ID generation, storage, redirect path, caching, expiry and abuse.
  • Prepare a two-sentence definition and a code example for synchronous versus asynchronous work, plus three design patterns you have used with a real reason for each.

Behavioral Interviews

Candidates describe the Behavioral Interviews as conversations about cultural fit and problem-solving approach. The reported prompts cover team conflict, prioritizing across projects, taking a leadership role, working with people from diverse backgrounds, team values, and changing strategy after unforeseen challenges. Arrive with a small set of real stories, each told in first person with a decision you made, the result and what you would change.

What to demonstrate

  • Evidence from your own past work that you handle conflict, competing priorities and leadership responsibly
  • How you collaborate with colleagues who have different backgrounds, roles and working styles
  • How you describe your problem-solving approach when a plan stops working

How to prepare

  • Write five stories: a conflict, a prioritization decision, a time you led, a collaboration across differences, and a change of strategy. Map each to the reported prompts.
  • Tell each story out loud in situation, task, action, result order and cut anything that is not your own decision.
  • Choose three working values you actually practise and attach one example from your work to each.
  • Prepare questions for the interviewers about how the team reviews code and ships work, since both are named in the role's responsibilities.

Where candidates lose points

Answering the string-reversal question with only the built-in reverse call, or with code that breaks on empty input and non-ASCII text

Write the manual two-pointer version in your chosen language, state its time and space cost, note that strings are immutable in Java, Python and JavaScript, and mention that reversing UTF-16 code units can split characters such as emoji. Then say which approach you would ship.

Starting the URL shortener design at the hashing function without scoping the system

Begin with requirements: custom aliases, expiry, analytics, expected read-to-write ratio. Then compare a counter encoded in base62 with a truncated hash that needs collision handling, name the redirect path and its cache, and say whether you return a permanent or temporary redirect and why.

Defining synchronous versus asynchronous in one sentence with no runtime model or example

Show a concrete case in your language: a blocking call that holds a thread versus a callback, promise, future or async function that releases it. Say what happens to errors and ordering, and when asynchronous code is not worth the added complexity.

Telling the bug and project-pivot stories as a list of what happened, with no diagnosis sequence and no ownership

Tell the bug as symptom, hypothesis, evidence, root cause, fix and a test or alert that prevents a repeat. Tell the pivot as the assumption that failed, the signal that showed it, the options you weighed and what you decided.

Giving behavioral answers in the plural, or with no result, so the interviewer cannot tell what you personally did

Use "I" for your decisions, name the other people's contributions separately, and end each story with an outcome and one thing you would change. Rehearse aloud so each story stays focused on the action step.

Questions & practice

Explain the differences between synchronous and asynchronous programming.

Medium · Technical / Domain Questions

Approach

  1. Define both precisely: a synchronous call blocks the caller until the result is back; an asynchronous call starts the work and returns at once, and the result arrives later through a callback, a promise/future, or an await point.
  2. Separate async from parallelism: JavaScript and Python asyncio run many I/O waits on one thread with an event loop, so they help I/O-bound work. CPU-bound work still blocks that loop and belongs in worker threads or processes. In Java, compare CompletableFuture with virtual threads (Java 21).
  3. Give a concrete latency example: three independent service calls awaited one after another cost roughly the sum of their latencies; started together with Promise.all or asyncio.gather they cost roughly the slowest one.
  4. Cover the costs: harder error handling (an unhandled promise rejection, an exception surfacing on a different stack), no guaranteed completion order, and the need for timeouts, cancellation and a cap on in-flight requests (a semaphore or pool size).

Follow-up

  • What happens if you call a blocking function, such as a synchronous database driver, inside an async request handler?
  • How would you limit an async job to 10 concurrent outbound calls?
  • When would you choose threads over an event loop?

Solve a problem using data structures such as arrays or linked lists.

Medium · Coding / Algorithms

Approach

  1. Clarify the problem and constraints first (size, sorted or not, duplicates, can I modify the input), then name the brute force and its complexity before improving it.
  2. Arrays: know the standard moves. A hash map turns pair-sum lookups from O(n^2) into O(n); two pointers work on sorted input; a sliding window handles contiguous subarray limits; prefix sums give O(1) range-sum queries after O(n) setup.
  3. Linked lists: reverse in place with prev/curr/next pointers (O(n) time, O(1) space); fast and slow pointers find the middle and detect a cycle (Floyd's algorithm, O(1) space); a dummy head node simplifies merging and deletions that can change the head.
  4. State the trade-off between the two structures: arrays give O(1) indexing and good cache locality, while a linked list gives O(1) insert or delete at a node you already hold but O(n) access by position.
  5. Test aloud on edge cases: empty input, one element, two elements, all duplicates, and for lists a cycle or a deletion at the head or tail.

Follow-up

  • After detecting a cycle, how do you find the node where it starts?
  • How would you remove the nth node from the end in one pass?
  • How would you reverse a linked list in groups of k?

Write a function that reverses a string.

Medium · Coding / Algorithms

Approach

  1. Clarify first: return a new string or reverse a character array in place, and whether input can contain non-ASCII text such as emoji or accented characters.
  2. Core algorithm: two pointers from both ends, swapping until they meet: O(n) time, O(1) extra space on a mutable array. Strings are immutable in Java, Python and JavaScript, so a reversed copy needs O(n) space.
  3. Know the idioms and their limits: Python s[::-1]; Java new StringBuilder(s).reverse().toString(), which keeps surrogate pairs together; in JavaScript s.split('').reverse().join('') breaks emoji made of surrogate pairs, while [...s] splits by code point.
  4. Even code-point reversal can separate combining marks and multi-part emoji, so true per-character reversal needs grapheme segmentation (Intl.Segmenter in JavaScript).
  5. Mention why not recursion: it uses O(n) stack depth, and in Python slicing on each call makes it O(n^2). Test empty string, one character, even and odd lengths.

Follow-up

  • How would you reverse the order of words in a sentence but not the letters?
  • How would you check whether a string is a palindrome, ignoring case and punctuation?
  • How would you reverse a string in place if you were given a char array?

Explain your thought process while solving a coding challenge.

Medium · Coding / Algorithms

Approach

  1. Restate the problem in my own words and confirm inputs, outputs and constraints (size, ranges, duplicates, empty input) before writing code.
  2. Work a small example by hand, then state the brute force and its time and space complexity so there is a correct baseline.
  3. Find the repeated work in the brute force and pick the structure that removes it (hash map for lookups, heap for top-k, sorting plus two pointers), saying the new complexity and its cost in memory.
  4. Code in small named steps while narrating what each step guarantees, then trace the example through the code line by line instead of just saying it works.
  5. Finish by testing edge cases aloud and stating final complexity; if stuck, say what I am trying and which smaller version of the problem I can solve first.

Follow-up

  • What do you do when you realise halfway through that your approach is wrong?
  • How do you choose which test cases to run?
  • How would your solution change if the input arrived as a stream?

Stop tag and share joins from fanning out a page

Medium · join fan-out · semi-joins · many-to-many

resource_tag is (resource_id, tag_id) with PK (resource_id, tag_id); resource_share is (resource_id, shared_with_user_id, permission). The tagged-and-shared listing inner-joins resource to both, filters tenant_id, tag_id = ANY($2) and shared_with_user_id = $3, orders by updated_at DESC and takes 50. Pages come back with fewer than 50 distinct resources and the total in the header is far too high. Explain the row multiplication, rewrite both the page query and the count query so each is correct, and name the index each one needs. PostgreSQL 16.

Approach

  1. Do the arithmetic against the predicates that are actually there. An inner join emits one row per matching child row, and both joins are filtered: tag_id = ANY($2) admits only the requested tags, shared_with_user_id = $3 admits one user's share rows. So a resource holding three of the requested tags and shared with $3 once yields three rows, not one — the multiplier is its count of matching tags times its share rows for that single user, and that second factor is 1 unless the table admits duplicate (resource_id, shared_with_user_id) pairs. LIMIT 50 then limits rows rather than resources, and COUNT(*) counts pairs — the header is the product, not the population.
  2. Reject DISTINCT as the fix. It deduplicates after the product has been built, so the planner must materialise and sort the fanned-out set before the LIMIT can apply, and it leaves any SUM or AVG in the same select list wrong.
  3. Rewrite both filters as semi-joins, keeping resource as the only row source: AND EXISTS (SELECT 1 FROM resource_tag rt WHERE rt.resource_id = r.resource_id AND rt.tag_id = ANY($2)) and the same shape against resource_share. A semi-join stops at the first match per resource and preserves the driving index order, so ORDER BY updated_at DESC, resource_id DESC LIMIT 50 still stops after 50 rows.
  4. Count with the same predicates and no join at all: SELECT count(*) FROM resource r WHERE r.tenant_id = $1 AND r.status = 'active' AND EXISTS (...) AND EXISTS (...). Nothing multiplies a resource, so the number is the population.

Follow-up

  • The filter changes from 'any of these tags' to 'all of these tags'. Rewrite it and state what it costs relative to the ANY form.
  • A resource can be shared with the same user twice under different permissions. Does your count change, and should it?

Denormalise tenant onto revisions and backfill it live

Hard · denormalisation · online migration · backfill

resource_revision (revision_id, resource_id, version, actor_user_id, change_kind, patch, request_id, created_at) has 400M rows and no tenant column; tenant_id lives only on resource. Two reads need it: a tenant-scoped audit feed ordered by created_at DESC, and an offboarding purge. Both join back to resource today. Justify adding tenant_id to resource_revision against those two reads, name the anomaly the copy introduces and the constraint that prevents it, then give the ordered migration for a live table taking 1.2k writes/second — the lock each step takes, how the backfill is batched, and where each step stops being reversible. PostgreSQL 16.

Approach

  1. Justify from the access path rather than from taste. Without the column, the audit feed either scans resource_revision by created_at and discards other tenants' rows, or resolves the tenant's resource_ids first and probes with them — both proportional to the tenant's whole history rather than to one page. With (tenant_id, created_at DESC, revision_id DESC) it is a seek that stops at 50 rows, and the purge becomes a ranged delete instead of a join.
  2. Name the cost exactly: a second copy of a fact can disagree with the first. Make the disagreement unwritable rather than documented — add UNIQUE (resource_id, tenant_id) on resource so it can serve as a foreign-key target, then FOREIGN KEY (resource_id, tenant_id) REFERENCES resource (resource_id, tenant_id) on the revision table. A revision can then only ever carry its parent's tenant.
  3. Step one, expand: ALTER TABLE resource_revision ADD COLUMN tenant_id BIGINT NULL, with no default, so it is a catalogue change and no rewrite. It still needs ACCESS EXCLUSIVE for an instant, and that instant queues behind the longest open transaction on the table while every later query queues behind it — set lock_timeout to 2s and retry rather than wait.
  4. Step two, dual-write: deploy the writer that populates tenant_id on every new revision while reads still use the join. Reversible by redeploying the previous build, because nothing reads the column yet.

Follow-up

  • The backfill is half finished and a rollback is required. What state is the table in, and what does the previous build do with a half-populated column?
  • How do you verify the backfill actually finished, given rows are still being inserted while it runs?

Describe a challenging bug you encountered and how you resolved it.

Medium · Technical / Domain Questions

Approach

  1. Pick a bug with a real root cause you found yourself (a race condition, a timezone or daylight-saving boundary, floating-point rounding on money amounts, a cache serving stale data) rather than a typo.
  2. Tell it as a debugging sequence: how it showed up, how I reproduced it reliably, how I narrowed it (logs and correlation ids, a minimal failing test, git bisect over commits), and the hypothesis each step ruled in or out.
  3. Separate the symptom from the root cause and explain why the obvious fix would only have hidden it, for example a retry that masked a race.
  4. Close with the fix, the regression test that fails without it, and one prevention step (an alert, a lint rule, using a decimal type for currency), plus the measurable outcome.

Follow-up

  • How did you confirm that was the root cause and not just one trigger?
  • If this had been live in production, what would you have done first, before the fix?
  • What test or monitor would have caught it earlier?

What design patterns are you familiar with, and when would you use them?

Medium · Technical / Domain Questions

Approach

  1. Name a handful you have actually used, each with its trigger: Strategy when one behaviour varies by case (pricing or validation rules), Factory when callers should not know the concrete class, Observer or pub/sub when several consumers react to one event, Decorator to add logging, caching or retries around an interface without subclassing, Adapter to wrap a third-party API behind your own interface.
  2. Give one real example from your own code in Java, Python or JavaScript, and show the before and after: the if/else chain or duplicated code the pattern removed.
  3. State the cost: every pattern adds indirection, so I introduce one only when the variation point already exists, not on speculation.
  4. Be ready to criticise Singleton: hidden global state, hard to replace in tests, and lifecycle problems; dependency injection of a single shared instance usually gives the same benefit.

Follow-up

  • When would you replace a Strategy with a plain if/else?
  • How does Decorator differ from inheritance for adding behaviour?
  • How do dependency injection and the Factory pattern relate?

How would you design a URL shortening service?

Medium · System Design / Architecture

Approach

  1. Scope it first: create a short code for a long URL, redirect on lookup, optional custom alias and expiry, click analytics. Note that it is read-heavy, so the redirect path drives the design.
  2. Key generation: base62-encode a unique numeric id (7 characters give 62^7, about 3.5 trillion codes), or use random codes with a uniqueness check on insert. Sequential ids are enumerable, so obfuscate or randomise them if links must not be guessable.
  3. Storage and reads: a key-value table keyed by short code (code, long URL, owner, created, expiry), partitioned by a hash of the code, with a cache such as Redis in front for hot codes and a TTL that respects expiry.
  4. Redirect status: 301 is cached by browsers, which saves load but hides repeat clicks; 302 sends every click to the service, which analytics needs. Write click events to a queue and aggregate asynchronously so the redirect stays fast.
  5. Edge cases: the same long URL submitted twice (new code or reuse), custom alias collisions, expired or deleted codes (404 or 410), and abuse controls: rate limits per user and checks against malicious URLs.

Follow-up

  • How do several app servers generate ids without colliding (allocated id ranges, Snowflake-style ids)?
  • What happens to redirects if the cache cluster goes down?
  • How would you serve analytics such as clicks per day per link?

Describe the architecture of a web application you have built.

Medium · System Design / Architecture

Approach

  1. Open with context and numbers you can defend: what the app did, who used it, rough traffic and data size, and your own part in building it.
  2. Walk one request end to end: client, load balancer or gateway, API layer (REST endpoints, authentication), service or business logic, data stores and caches, and background jobs or queues for slow work.
  3. Justify two decisions with their trade-off, for example a relational database for transactional data instead of a document store, or a monolith instead of microservices at that team size, and say what each made harder.
  4. Cover operations briefly: how it was deployed (CI pipeline, cloud platform if you used AWS or Azure), how you monitored it, and one incident or bottleneck and how it was fixed.
  5. End with what you would change now and why. That shows you can judge your own design.

Follow-up

  • Where is the first bottleneck if traffic grows ten times?
  • How did you deploy changes without downtime or with safe rollback?
  • How were authentication and secrets handled?

What considerations would you take into account when building a distributed system?

Medium · System Design / Architecture

Approach

  1. Start with partial failure: networks drop and delay messages, so every remote call needs a timeout, retries with exponential backoff and jitter, and idempotent handlers (idempotency keys) so a retried request cannot double-apply something like a payment.
  2. Consistency: under CAP, during a network partition you choose consistency or availability. Say which data needs strong consistency (balances, ledgers) and which can be eventually consistent (feeds, analytics), and how replication lag shows up to users.
  3. Scaling: partitioning by a key that spreads load evenly, replication for reads and failover, and the hot-key and rebalancing problems that come with it.
  4. Messaging and time: delivery over an unreliable network is realistically at-least-once, so consumers must deduplicate. Clocks across machines drift, so order events with versions or sequence numbers, not wall-clock timestamps.
  5. Operability: health checks, circuit breakers to stop cascading failures, distributed tracing with a correlation id per request, and metrics on latency percentiles and error rates.

Follow-up

  • How do you keep data consistent across two services without a distributed transaction (saga with compensating actions vs two-phase commit)?
  • How can a node tell that another node is dead rather than just slow?
  • What causes a retry storm and how do you prevent one?

How would you optimize an existing application for performance?

Medium · Problem-Solving / Case Studies

Approach

  1. Define the target before touching code: which user action is slow, the metric (p95 or p99 latency, throughput, page load), and the goal number.
  2. Measure to find the bottleneck: APM traces, a profiler or flame graph for CPU, the database slow-query log and EXPLAIN ANALYZE for queries, browser dev tools for front-end load. Amdahl's law caps the gain: speeding up a part that takes 10% of the time saves at most 10%.
  3. Fix the usual culprits in order of payoff: N+1 queries (batch or join), missing indexes, unbounded result sets (pagination), repeated expensive reads (cache with an explicit invalidation or TTL rule), slow work on the request path (move to a queue), and large front-end bundles (lazy loading).
  4. Verify with a before and after load test under realistic data, check correctness did not change, and add monitoring so a regression is caught.

Follow-up

  • How would you keep a cache consistent when the underlying data changes?
  • The database is the bottleneck even after indexing. What next?
  • How do you decide an optimisation is not worth its complexity?

Discuss a project where you had to pivot your strategy due to unforeseen challenges.

Medium · Problem-Solving / Case Studies

Approach

  1. Choose a project where the change of course was your decision or recommendation, with a concrete trigger: a benchmark that missed the target, a library or vendor limit, a changed requirement, or a data problem found late.
  2. Explain the evidence that made continuing worse than changing, and the two or three options I weighed, with the cost of each in time, risk and scope.
  3. Describe the new plan and how I re-scoped and communicated it: what was cut, what was kept, and how stakeholders agreed to the new dates.
  4. Give the outcome with a number (delivered date, performance reached, defects avoided) and the earlier signal I would watch for next time. Avoid a story that blames others or where the pivot simply happened to you.

Follow-up

  • How did you know it was time to change course rather than push through?
  • What work did you have to throw away, and how did the team take it?
  • What would you do differently to spot the problem sooner?

One log partition stops advancing while the others drain

Easy · poison message · head-of-line blocking · consumer lag

Search results for a subset of tenants are hours stale; the rest are current. The projection consumer reports lag of zero on 15 of 16 partitions and 400,000 on one. Its error rate is flat and its CPU is idle. outbox_event has no pending rows older than a second, so the relay has published everything it holds. Identify the mechanism, give the ordered checks, and state what you do in the first ten minutes versus what you change permanently.

Approach

  1. Read the lag distribution first. A slow consumer lags everywhere; zero on fifteen partitions and 400,000 on one is not throughput. Idle CPU on the stuck partition means the consumer is not advancing its offset at all, which points at one message it cannot get past rather than at a rate problem.
  2. Exonerate the producer before touching the consumer. No pending outbox rows older than a second means the relay published, so the event exists in the log. This separates never sent from sent and never applied, which are different code paths and usually different owners.
  3. Read the message at the stuck offset and the handler's log lines for its event_id. A flat error rate with no progress has two explanations and you must distinguish them: the handler is throwing and the retry loop is swallowing it, or the handler is blocking on something and never returning. Idle CPU with no error lines favours the second.
  4. Mitigate before diagnosing further. Move the offending event to a dead-letter store and commit the offset past it. Adding consumers does nothing here, because a partition is consumed by exactly one member of the group, and the blast radius is every aggregate hashed to that partition, not only the aggregate that produced the bad event.

Follow-up

  • The dead-lettered event carried aggregate_version 7 and the projection had applied 6. What must the replay do differently if 8 and 9 landed in the meantime?
  • How do you show staleness to the user while the partition is behind, given the API already returns the projection's watermark?

Suggested practice checklist

The plan follows the three reported rounds and the reported question types: coding and data structures, fundamentals and debugging, system design, performance and architecture, then behavioral stories. Each day ends with something you can show to a mock interviewer.

Day 1 — Map the loop and choose your language

  • Write the three reported rounds (Phone Screen, Technical Assessments, Behavioral Interviews) and the question types you expect in each, then mark your weakest area.
  • Choose Java, Python or JavaScript as your interview language and write a short list of the idioms and library calls you must be able to use without lookups.
  • Pick two or three real projects and list, for each, the components, what broke and what you would change.

Deliverable: A one-page loop map, a language choice with its idiom list, and a project inventory.

Day 2 — Coding: strings, arrays and linked lists

  • Reverse a string three ways in your language (swap in place on a character array, build a new string, use a built-in) and note the cost and the edge cases of each.
  • Solve one array problem and one linked-list problem (for example reversing a list or detecting a cycle) and write the complexity beside each.
  • Re-solve one of them while saying your reasoning out loud from restating the input to testing edge cases.

Deliverable: Working solutions for string reversal, one array problem and one linked-list problem, each with complexity noted and a spoken run-through.

Day 3 — Fundamentals and debugging

  • Write a short explanation of synchronous versus asynchronous programming with a code example in your language, including error handling and ordering.
  • List three design patterns you have actually used, with the problem each solved and when you would not use it.
  • Write out a bug story as symptom, hypothesis, evidence, root cause, fix and prevention, then work the log-partition debugging practice question.

Deliverable: A written sync-versus-async explanation with code, a three-pattern list with reasons, and one bug story in debugging order.

Day 4 — System design: URL shortener and distributed systems

  • Design a URL shortening service on paper: requirements, ID generation (base62 counter versus hash), storage, redirect path, cache, expiry and abuse handling.
  • Estimate read and write load for your design and say what you would scale first.
  • List the considerations for any distributed system (failure of a node, retries and idempotency, consistency choices, partitioning, monitoring) with one sentence each.

Deliverable: A URL shortener design diagram with estimates, plus a one-page distributed-systems checklist.

Day 5 — Architecture and performance

  • Describe the architecture of your best web application as client, API, services, data store, deployment and monitoring, with the trade-offs you made.
  • Write a step-by-step method for optimizing a slow application: measure, find the bottleneck, change one thing, and measure again.
  • Map your application to RESTful endpoints and note where microservices, or a cloud service on AWS or Azure, would change it.

Deliverable: A spoken architecture walkthrough plus a performance-tuning checklist applied to a real application of yours.

Day 6 — Behavioral stories, part one

  • Write your conflict, prioritization and leadership stories in situation, task, action, result form.
  • Write the project where you had to change strategy: the assumption that failed, how you found out and what you did next.
  • Say each story aloud and trim it until your own decisions are the clear centre.

Deliverable: Four written stories (conflict, prioritization, leadership, strategy change), each rehearsed aloud once.

Day 7 — Behavioral stories, part two and full mock

  • Prepare your answers on collaborating with people from diverse backgrounds and on the team values you hold, each with a concrete example.
  • Run a full mock with a friend: a short phone-screen introduction, one coding problem narrated aloud, one design question and two behavioral prompts.
  • Write down the gaps the mock exposed and fix the two largest.

Deliverable: Two prepared value and collaboration answers, a completed mock interview, and a short fix list.

Behavioral preparation for Bread Financial

Candidates describe the Behavioral Interviews as focused on cultural fit and problem-solving approach. The reported prompts ask about conflict, prioritization, leadership, working with people from diverse backgrounds, team values and changing strategy. Prepare real stories in first person, each with a decision of yours and a result.

  1. Discuss a project where you had to pivot your strategy due to unforeseen challenges.

Describe a time when you had to deal with conflict in a team setting.

Medium · Behavioral / Leadership

Approach

  1. Choose a conflict with a real technical or delivery stake, such as a disagreement over an API contract, a stalled code review, or two different estimates for the same task. A personality clash with no work consequence leaves you nothing to reason about.
  2. Set the scene in two or three sentences, then spend most of the answer on your actions: you asked for the other person's reasoning, restated it until they agreed you had it right, and worked out what each side was protecting (schedule, correctness, maintainability).
  3. Show how it was settled with something checkable rather than seniority or persistence: a small prototype, a benchmark, past incident history, a written comparison in the ticket, or a decision from the owner of the component.
  4. Close with the result in concrete terms (what shipped, how the working relationship changed) and one thing you would do differently. If you were partly wrong, say so; it makes the story credible.
  5. The mistake that sinks this answer is casting the other person as the villain, saying you simply let it go, or telling it entirely in the plural so your own decision is invisible.

Follow-up

  • How did the other person feel about the outcome afterwards?
  • What would you have done if no data could have settled it?
  • Have you been on the losing side of an argument like this, and how did you handle it?

How do you prioritize tasks when working on multiple projects?

Medium · Behavioral / Leadership

Approach

  1. State your method briefly, then prove it with one real week: list every commitment, note its deadline, who is waiting on it and what delay would cost, and rank by impact and cost of delay rather than by who asked loudest.
  2. Pick an example with two or three genuinely competing items, such as a feature due at sprint end, a production bug and a code review blocking a teammate. Say what you did first, what you deferred and why.
  3. Include the communication step: you told the owner of each deferred item what would slip and by how much, in writing, and you asked the product manager or lead to confirm the order when two stakeholders disagreed.
  4. Explain how you re-plan when something urgent lands mid-sprint, for example an incident. You re-sort the board, split or move work, and make the trade-off visible instead of quietly working longer hours.
  5. Avoid answering with "I just work harder" or a framework with no example. Give the result: what was delivered and the one item you deliberately dropped or postponed.

Follow-up

  • What do you do if two managers each insist their project comes first?
  • Tell me about a time you got the ordering wrong.
  • How do you stop small requests from consuming the time of your main project?

Give an example of a time you took a leadership role in a project.

Medium · Behavioral / Leadership

Approach

  1. Choose a project where you had little or no formal authority: a migration, a release, a new service or an onboarding effort. Leadership shows in decisions and direction, not job title.
  2. Cover four actions: how you set a goal people agreed to, how you split the work and matched it to people, how you removed blockers such as slow reviews, missing environments or unclear requirements, and how you kept progress visible through the sprint board and short written updates.
  3. Include a point where it went off track, such as a slipped milestone or a stuck teammate, and say what you changed and how you treated the person, not only the plan.
  4. Give a result tied to your own work: what shipped, what stopped breaking, or what the team now does by default. Do not quote numbers you cannot defend if asked how you measured them.
  5. Do not narrate what your manager did or claim every outcome as yours. Separate what you decided, what you delegated, and who else deserves credit.

Follow-up

  • How did you handle a teammate who was not delivering?
  • What did you choose not to delegate, and why?
  • How would the project have gone if you had not been there?

How do you approach collaboration with team members from diverse backgrounds?

Medium · Cultural Fit / Values

Approach

  1. Skip the statement of belief and give concrete working practices plus one story where they mattered, for example a requirement understood two ways by people with different backgrounds, seniority, first languages or time zones.
  2. Name specific habits: confirming decisions in writing after calls, defining terms in tickets and design documents, collecting input before a meeting instead of only during it, and giving code-review feedback that explains the reason, not just the change.
  3. Structure the story as situation (a misunderstanding, or someone's idea not heard), action (a one-on-one conversation, a changed meeting format, a written summary, pairing), and result (rework avoided, a quieter teammate's idea adopted, a smoother release).
  4. Show that you adapt to the person by asking how they prefer to give and receive feedback instead of treating your own style as the default, and avoid generalising about any group.
  5. The weak version is "I value everyone's opinion" with no event behind it, or a story that praises the team without showing what you personally did.

Follow-up

  • How do you draw out a teammate who stays quiet in meetings?
  • How do you work with a team spread across time zones?
  • Tell me about feedback you gave that landed badly and what you changed afterwards.

What values do you believe are important when working in a tech team?

Medium · Cultural Fit / Values

Approach

  1. Choose three values you actually act on, and for each give a behavior and a short example from your work: for instance ownership (you followed a bug through to a fix and a regression test), honesty about status (you flagged a slip early) and respectful code review.
  2. Make each value specific to engineering work: how you handle a failed deployment, a flaky test, a disagreement in review or an unclear requirement. A value counts only if it changes something you do day to day.
  3. Candidates report transparency and integrity as values attached to the company. If you mention them, tie them to your own practice, such as raising a mistake you made in production or refusing to hide a known defect, rather than repeating the words.
  4. Acknowledge a trade-off: say when two of your values pull apart, such as speed versus thoroughness, and how you decide between them.
  5. Avoid reciting a list of pleasant words copied from a careers page with no example behind them.

Follow-up

  • Tell me about a time one of your values conflicted with a deadline.
  • How does that value show up in the way you review code?
  • Which of these values is hardest to keep when a team is under pressure?