B Lab Global · Software Engineer
Updated · 2026-10-02

B Lab Global Software Engineer
Interview Guide

THE 60-SECOND BRIEF

B Lab Global works on a global movement for an inclusive economy. Candidate descriptions of the Software Engineer role name two products, the B Impact Assessment and the Global Reporting Initiative, which companies use to measure their social and environmental performance. Engineers in this role are described as improving existing applications and adding new features, working alongside product management, design and operations colleagues.

This guide is for candidates interviewing for the Software Engineer role at B Lab Global. Descriptions of the role mention a language such as Python, Java or JavaScript, working knowledge of software frameworks, solid algorithms and data structures, and roughly two to five years of development experience. The guide covers the reported technical questions (languages, a hard problem, a recent project, code quality, version control, coding, system design, clean code), the four reported behavioral questions, and a plan that turns them into practice.

Candidates report an online assessment followed by several interviews that combine coding challenges, technical conversations and discussion of past experience and fit with the mission. No finer round order or stage length is reported, so confirm the sequence with your recruiter.

Behavioral InterviewingCoding Interview PreparationSystem Design

33 min read

Browse Software Engineer questions

See the practice prompts

18Practice promptsAcross five skill areas

Candidate descriptions place software engineers on assessment and reporting products, the B Impact Assessment and the Global Reporting Initiative, which companies use to measure social and environmental performance. The reported duties are practical: design, build and test applications, refine requirements with product managers and designers, take part in code reviews, write documentation, and troubleshoot problems in running software. Typical projects are described as improving existing applications or adding features.

The reported questions are mostly open conversation: which languages you are most comfortable with and why, a hard technical problem you solved, a recent project and your role in it, how you keep code quality up, and how you use version control. Alongside them candidates describe coding challenges, system design and clean, maintainable code as topics. That makes two kinds of preparation: rehearsed, specific stories about your own work, and fluent fundamentals in one language (Python, Java and JavaScript are the examples given) with arrays, hash maps, sorting and basic complexity analysis.

The role is described as cross-functional, so the behavioral side deserves real effort. Four prompts are reported: a difficult team member, prioritising several deadlines, taking the lead on a project, and constructive criticism. Choose stories that show you working with product managers, designers or operations people, and prepare an honest, specific reason for wanting to work on tools that help companies measure their impact, because candidates also describe discussion of how your experience relates to the mission.

The format is only partly reported: an online assessment, then multiple interviews mixing technical and behavioral material. Candidates also mention variability in interviewer engagement and communication. Prepare answers that stand on their own: open with the headline, give two or three concrete details, close with the outcome, and ask the recruiter early what each stage covers and whether you will write code.

01

Preparation focus

editorial

Candidates report an online assessment first, then multiple interviews that blend coding challenges, technical conversations and discussion of your past experience and the mission. Because no order or length is reported per stage, treat this as one preparation block: pick a primary language and practise coding while explaining your reasoning aloud, prepare walk-throughs of two real projects, and have behavioral stories ready. Ask the recruiter whether the online assessment is timed, which languages it allows, and whether later coding is written live.

What to demonstrate

  • Working code in a language you choose, with your reasoning explained as you go
  • How you describe past projects, your own role in them and the problems you solved
  • How you would design a system around user needs, and how you keep code clean and maintainable
  • Collaboration and communication, shown through your behavioral stories

How to prepare

  • Choose one of Python, Java or JavaScript and solve a few array, hash map and sorting problems in it while narrating aloud
  • Write one-page outlines for two projects: context, your role, key decisions, outcome and what you would change
  • Prepare a concrete answer on code quality and version control using a real pull request or release as the example
  • Rehearse the four reported behavioral prompts with one story each, plus one on working with a product manager or designer
PracHub preparation framework ↗

PracHub editorial advice for the preparation topics above.

01

Answering the languages question with a list of everything you have touched

Name one primary language and give two concrete reasons tied to work you have done: its standard collections, typing, tooling or ecosystem. Say where it is a poor fit and which other language you would reach for. Python, Java and JavaScript are the examples listed for this role, so be ready to compare yours with one of them.

02

Describing a recent project as a team summary without your own role

The question asks what your role was. Write an outline with context, your part, two decisions you made and their trade-offs, the outcome and what you would change. Keep the same outline for the hard-problem question and swap in the debugging sequence.

03

Answering code quality and version control with buzzwords (tests, reviews, branches) and no example

Anchor each practice in something real: a test that caught a regression, a review comment that changed a design, a revert that restored a release. For version control cover small focused commits, branch and pull request flow, merge versus rebase and when you use each, and how you undo a bad change.

04

Working a coding challenge silently, or coding before agreeing the problem

The reported prompt asks you to explain your thought process. Restate the problem, give an example, say the brute-force approach and its complexity, then improve it while naming the data structure. Test on an empty input, a single element and duplicates before saying you are done.

05

Behavioral stories with no outcome, with blame, or with generic enthusiasm for the mission

Give every story a result and one lesson, and describe disagreements in terms of behaviour and evidence. For the mission, say specifically what draws you to software that helps companies measure impact, linked to work you have done, rather than repeating the phrase inclusive economy.

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

14 technical prompts0 include a worked solution

Archive a resource graph without breaking live references or recursing

medium
graph traversaltopological ordertenant isolation

Resources reference other resources within a tenant; for the largest tenant the reference table holds up to 2,000,000 nodes and 8,000,000 edges. Archiving a resource must archive everything reachable from it that nothing outside the set still references, refuse when a live external referrer exists, and terminate when references form cycles, which they legitimately do. Produce the archive order and the refusal list, targeting O(V+E). Say what stops the traversal crossing a tenant boundary, and why recursion is the wrong control structure at this size.

Approach
  1. Load the subgraph with the tenant predicate on both endpoints of the edge, not only on the side you started from. Scoping the left table alone is the classic cross-tenant leak: one mis-entered edge then pulls another tenant's resources into the traversal and, worse, into the archive.
  2. Traverse iteratively with an explicit stack. A 2,000,000-node graph can hold a chain deep enough to exhaust a native stack in the low tens of thousands of frames, and that failure is a process crash rather than an error you can return.
  3. Treat cycles as data rather than corruption: compute strongly connected components with Tarjan in O(V+E) using its own explicit stack, then condense. The condensation is a DAG, so a topological order over it gives the archive order, and every member of a component archives in one transaction because no order within a cycle is valid.
  4. Decide refusals with reverse edges. A candidate is archivable only if every in-edge originates inside the candidate set, so build the transpose or count in-degrees restricted to the visited set, and emit each blocked resource with the id of the external referrer, which is the only part of the answer an operator can act on.
Follow-up
  • The graph is read in one query and the archive writes a minute later. What can change in between, and how do you make the write safe?
  • The candidate set is 400,000 resources. Is that one transaction, and if not, what does a half-finished archive look like to a reader?

Track a rolling failure rate per destination for circuit decisions

easy
sliding windowring buffercircuit breaker

The egress service delivers about 1,500 webhooks per second across roughly 40,000 destinations, each call bounded by a 10 second timeout. Maintain, per destination, the failure rate over the trailing 60 seconds so a caller can ask before dispatch whether the circuit should open. Attempts arrive as (destination_id, finished_at_ms, outcome). Requirement: amortised O(1) per attempt, with total memory bounded by the destination count rather than by traffic. Give the structure, its exact memory, and the rule that stops a destination with three attempts from opening a circuit.

Approach
  1. Name the exact-deque version and then reject it as the default. Holding timestamps and advancing a tail pointer past anything older than now minus 60 seconds is a correct two-pointer window at amortised O(1) per attempt, but its memory tracks in-window traffic, so one destination in a retry storm holds hundreds of thousands of entries while thousands of quiet destinations hold none.
  2. Use a ring of 60 one-second buckets per destination, each bucket a pair of counters for attempts and failures. On an attempt, advance the ring by the elapsed whole seconds, zeroing at most min(elapsed, 60) buckets, then increment the head. That is amortised O(1) with a fixed footprint per destination.
  3. State the footprint: 60 buckets times two 4-byte counters is 480 bytes of payload per destination, so 40,000 destinations is roughly 20 to 25 MB with per-entry overhead, bounded by the catalogue rather than by the rate. The cost is granularity, since the oldest bucket ages out in whole seconds, which is far tighter than the decision needs.
  4. Require a minimum sample before the circuit may open. A destination with three attempts and three failures reads as 100 percent and is not evidence; a floor of roughly 20 attempts in the window makes the ratio meaningful, and below that floor use a run of consecutive failures as the trigger instead.
Follow-up
  • The fleet is 30 instances and each sees roughly a thirtieth of a destination's traffic. Where does the rate actually live, and what does a per-instance answer get wrong?
  • A destination answers in 9.5 seconds and succeeds. It is not failing but it is consuming your per-destination concurrency. What signal should open the circuit here?

Merge partitioned event streams into one ordered feed with bounded lateness

hard
k-way mergewatermarksout-of-order streams

The read-model service consumes 64 log partitions carrying about 4,000 events per second in total. Each partition is ordered within itself, but partitions drift by up to 30 seconds, and the activity feed must present a tenant's events in occurred_at order. Produce the merge. State its complexity, the buffer it requires in events and in bytes, what happens when one partition is idle, and what you do with an event that arrives after you have already emitted its position. Payloads average 1 KB.

Approach
  1. Merge with a min-heap over the 64 partition heads keyed on (occurred_at, event_id): O(log P) per event and O(n log P) overall. The tie-break on event_id is what makes the output deterministic when two partitions carry the same millisecond, which matters because the feed is paginated and a non-deterministic order reorders pages under the reader.
  2. Emitting the heap head is only correct once every partition has produced everything up to that timestamp, so the emit condition is a watermark: the minimum across partitions of the highest occurred_at seen, less the allowed lateness. Events are held until the watermark passes them, which is what turns individually ordered streams into a jointly ordered one.
  3. Size the buffer from the lateness rather than guessing: 4,000 events per second times 30 seconds is 120,000 buffered events, and at 1 KB each about 120 MB of heap. That number is the real price of the ordering guarantee and belongs in front of whoever asked for it.
  4. Handle the idle partition explicitly, because it fails the feed rather than corrupting it: a partition with no traffic never advances its own maximum, so the watermark freezes and output stops entirely. Either every partition emits a periodic idle marker carrying the broker's current time, or the watermark falls back to wall clock for a partition silent beyond a threshold.
Follow-up
  • The lateness budget is raised to five minutes. What is the new buffer, and what besides memory changes?
  • The consumer restarts. Where does it resume from, and what does the feed look like for the first 30 seconds?

Each day targets one cluster of the reported questions: language and project stories, code quality and version control, coding, system design, behavioral stories, then a mixed run. Practice items from PracHub's own library are added for coding and troubleshooting.

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
01Confirm the format and fix your language
  • Email your recruiter asking for the stage order, whether the online assessment is timed, which languages it allows and whether later coding is live
  • Choose your primary language from Python, Java or JavaScript and write a short answer naming two concrete reasons and one weakness
  • Review that language's standard collections: list or array, hash map, set, queue and sorting, with their complexities

Deliverable: A sent recruiter email, a written answer to the language question, and a one-page collections and complexity cheat sheet

Practice prompt ↗
02Project walk-through and hard-problem story
  • Pick two recent projects and outline each: context, your role, two key decisions, trade-offs, outcome and what you would change
  • Write the hard-problem story as a debugging sequence: symptom, hypothesis, evidence, fix, how you confirmed it
  • Say each outline aloud and cut anything that does not show your own contribution

Deliverable: Two project outlines and one hard-problem outline, each spoken through once

Practice prompt ↗Practice prompt ↗
03Code quality, clean code and version control
  • Write your code-quality answer with one real example for each of: tests, code review, static checks and documentation
  • List your version-control habits: small commits, branching and pull requests, merge versus rebase, reverting, resolving conflicts
  • Reopen one of your own old pull requests and write three things you would now change for readability or maintainability

Deliverable: A one-page answer sheet for code quality, version control and clean code, plus an annotated pull request

Practice prompt ↗Practice prompt ↗Practice prompt ↗
04Coding challenges, narrated
  • Solve the PracHub practice problem on archiving a resource graph without recursion, explaining each step aloud
  • Solve the PracHub practice problem on a rolling failure rate per destination and state its time and space complexity
  • Run each solution on empty, single-element and duplicate inputs before you call it finished

Deliverable: Two working solutions in your chosen language with a spoken explanation and listed edge cases

Practice prompt ↗Practice prompt ↗Practice prompt ↗
05System design around user needs
  • Take a practice scenario: a self-assessment app where an organisation answers question sets and receives a report. Write requirements, users, data model and read and write paths
  • Sketch the components (API, storage, background report generation) and name the trade-offs you made, including consistency and what happens when a dependency fails
  • Work the PracHub practice problem on replacing offset paging with keyset paging as a data-access exercise

Deliverable: One design diagram with written trade-offs and a worked keyset paging query

Practice prompt ↗Practice prompt ↗
06Behavioral stories
  • Write a story outline for each reported prompt: difficult team member, multiple deadlines, taking the lead, constructive criticism
  • Add outcome and lesson to each, and remove any sentence that blames a person rather than describing behaviour
  • Prepare one story about working with a product manager, designer or operations colleague to change a requirement, and an honest reason for wanting to work on impact measurement tools

Deliverable: Four story outlines with outcomes and lessons, one cross-functional story and a spoken mission answer

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Mixed rehearsal
  • Run a full mock: language question, project walk-through, one coding problem aloud, one design and two behavioral prompts
  • Work the PracHub practice debugging problem on a latency spike in one listing filter to rehearse troubleshooting out loud
  • Write the questions you will ask the recruiter or team about the stages, the team's work and how engineers collaborate with product and design

Deliverable: A recorded or written mock run with a list of weak spots and a final question list

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗

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

Candidates report behavioral questions on collaboration, priorities, taking charge and feedback, plus discussion of how past experience relates to the mission. The role is described as working with product management, design and operations, so choose stories where the result depended on other people and say what you personally did.

Tell me about a time you had to work with a difficult team member. How did you handle it?

medium
Behavioral / Leadership Questions

Tell me about a time you had to work with a difficult team member. How did you handle it?

Approach
  1. Choose a conflict about how work got done (review turnaround, unclear ownership, missed handoffs), not a personality clash. Describe the behaviour and its effect on the project, never the person's character.
  2. Show your first move was direct: a private one-to-one to understand their constraints. For example: I asked what was blocking them and found they were never told about the interface change.
  3. Describe the concrete agreement you reached, such as review-response expectations, a written interface contract or a split of ownership, and how you checked it held in the following weeks.
  4. Give the outcome in plain terms (delivery back on track, fewer blocked reviews) and say what you learned. Escalation to a manager is fine only as a later step, with what you tried first.
  5. The mistake that sinks it is a story where you are the hero and the colleague the villain, or where you went to the manager first and nothing changed.
Follow-up
  • What would you have done if that conversation had not worked?
  • How did you keep the project moving while it was unresolved?
  • What did you learn about how they preferred to work?

How do you prioritize tasks when you have multiple deadlines?

medium
Behavioral / Leadership Questions

How do you prioritize tasks when you have multiple deadlines?

Approach
  1. Name a real period with competing deadlines and list each commitment with its due date, who was waiting on it, and the cost of it slipping. Rank by cost of delay and by what blocks other people, not by effort.
  2. Show a trade-off, not just a method: say what you deferred or cut and why. For example: I shipped the bug fix first because users were blocked, and moved the refactor a week.
  3. Describe how you communicated. Tell the affected product manager or colleague early, offer options (reduce scope, move the date, get help) and let them choose, instead of quietly missing a date.
  4. Close with what happened to the deferred item and how you now guard against the same overload, such as a weekly list review or flagging conflicts at planning.
  5. The mistake that sinks it is a generic answer (I make a list and work hard) with no ranking criteria, no story and no sign that you ever said no.
Follow-up
  • What if two stakeholders each insisted their deadline came first?
  • How do you tell a product manager that something will slip?
  • What happened to the task you deferred?

Describe a situation where you took the lead on a project. What was the outcome?

medium
Behavioral / Leadership Questions

Describe a situation where you took the lead on a project. What was the outcome?

Approach
  1. Pick a project where you set direction, even without a formal title. State the goal and your role in two sentences, then spend the time on how you led.
  2. Cover the mechanics: how you broke the work into pieces, who took what, how you kept requirements clear with the product manager or designer, and how often the group synced and reviewed code.
  3. Include one thing that went wrong or one disagreement, and how you resolved it. Without a setback the story sounds like a summary rather than leadership.
  4. Give the outcome concretely: what shipped, what improved for users or the team, what you would change. Do not invent numbers; if you have a real measure, give it.
  5. The mistake that sinks it is describing the team's achievement with the word we throughout and never saying what you personally decided.
Follow-up
  • How did you handle a teammate who fell behind?
  • What decision did you make that others disagreed with?
  • What would you do differently if you led it again?

How do you handle constructive criticism?

medium
Behavioral / Leadership Questions

How do you handle constructive criticism?

Approach
  1. Use one specific piece of feedback, ideally from a code or design review, and quote the substance of it (for example, that my pull requests were too large to review properly).
  2. Describe your first reaction honestly and what you did with it: asked clarifying questions, checked whether the feedback was right, and separated it from how it felt.
  3. State exactly what you changed in your behaviour (smaller pull requests, tests added before review, clearer commit messages) and the evidence it stuck, such as faster reviews or fewer review rounds.
  4. End with how you now seek feedback early, for example sharing a design sketch before writing code, which fits a role that includes code reviews and documentation.
  5. The mistake that sinks it is a disguised strength (I care too much about quality) or a story where you defended yourself and nothing changed.
Follow-up
  • Tell me about feedback you disagreed with. What did you do?
  • How do you give critical feedback to a peer in a code review?
  • How do you ask for feedback before something ships?
  • 01

    Tell me about a time you had to work with a difficult team member. How did you handle it?

  • 02

    How do you prioritize tasks when you have multiple deadlines?

  • 03

    Describe a situation where you took the lead on a project. What was the outcome?

  • 04

    How do you handle constructive criticism?

  • 05

    Tell me about a time you worked with a product manager or designer to change a requirement.

  • 06

    What draws you to building software that helps companies measure their impact?

PracHub preparation framework ↗
How many interview stages are there for the Software Engineer role, and what happens at each?

Candidates report an online assessment followed by multiple interviews with technical and behavioral components. Coding challenges, technical conversations and discussion of past experience and mission fit are mentioned. A stage-by-stage order and length are not reported, so ask your recruiter.

B Lab Global Software Engineer candidate reports ↗
Which technical topics should I prepare?

The reported topics are your preferred languages, a hard problem you solved, a recent project, code quality, version control, coding challenges, system design and clean, maintainable code. Python, Java and JavaScript are the examples listed, with algorithms and data structures as the foundation. Prepare one language well rather than several loosely.

B Lab Global Software Engineer candidate reports ↗
Which behavioral questions are reported?

Four are reported: working with a difficult team member, prioritising multiple deadlines, taking the lead on a project and handling constructive criticism. Candidates also describe discussion of how your experience and values relate to the mission. Prepare one specific story for each prompt.

B Lab Global Software Engineer candidate reports ↗
How long does the process take from first screen to offer?

Candidate accounts put it at roughly four to eight weeks, varying with scheduling and the number of rounds. Ask your recruiter for your own timeline, and keep a short preparation block ready in case a stage is scheduled sooner than you expect.

B Lab Global Software Engineer candidate reports ↗
Is remote or hybrid work possible?

Candidates mention remote and hybrid arrangements that depend on the team and the individual. Confirm what applies to your team with the recruiter early.

B Lab Global Software Engineer candidate reports ↗
Do I need cloud or DevOps experience?

Descriptions of the role list DevOps practices, a cloud platform such as AWS or Azure, and familiarity with Agile methods as nice-to-have, while the must-haves are a language, frameworks, and algorithms and data structures. If you have cloud or Agile experience, prepare one project example that shows it, but put the fundamentals first.

B Lab Global Software Engineer candidate reports ↗
What if the interviewer seems quiet or disengaged?

Some candidates note variability in interviewer engagement and communication. Make each answer self-contained: headline first, two or three specifics, outcome last, then check whether they want more detail. Prepare questions about the team's work to keep the conversation going.

B Lab Global Software Engineer candidate reports ↗
Sources & methodology 3 sources ↗

No official company page is cited. Rounds and questions come from candidate reports and PracHub editorial material; each source shows the date it was read.