Cognite · Software Engineer
Updated · 2026-10-02

Cognite Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Candidate reports describe Cognite as an industrial data company: its software helps large enterprises work with the data produced by heavy-industry operations. Engineers in this role are described as building features that touch data pipelines, user-facing interfaces and services that must stay up under heavy load, working alongside Data Scientists, Product Owners and other engineers. Core infrastructure, API development and front-end work are all mentioned as possible areas, so the exact team decides the mix.

This guide is for candidates preparing for a Software Engineer loop at Cognite. It covers the six reported rounds, nine technical questions (stream filtering, a classic data structure problem, algorithm optimization, refactoring, industrial data ingestion, IoT sensor updates, database trade-offs, maintainable application structure, and an architectural-mistake story) and three behavioral prompts, plus a plan that ties them together. It does not assume a specific team or seniority, because reports say the questions vary by both.

Candidates report six rounds over roughly 4-6 weeks: an initial screening, a remote coding session, a system design discussion, a behavioral interview, conversations with peers and leadership, and a final decision. Pace and structure are said to shift with the team and the urgency of the role.

System DesignData StructuresAlgorithms

33 min read

Browse Software Engineer questions

See the practice prompts

15Practice promptsAcross five skill areas

The role as candidates describe it mixes three kinds of work: writing correct, readable code; building services that keep working as data volume and feature count grow; and collaborating with Data Scientists and Product Owners. The reported questions mirror that mix. Four are coding questions (stream filtering, a classic linked-list, tree or hash-map problem, optimizing an algorithm for high-volume input, refactoring with modern language features such as functional streams). Four are design questions (industrial data ingestion, frequent updates from thousands of IoT sensors, database architecture trade-offs, keeping an application maintainable). Four are behavioral.

For the coding side, the listed requirements name Python, Java, Go and JavaScript or TypeScript as examples of a modern language, plus Git and testing. Pick one language and become fluent in its standard library, its iterator or stream facilities and its test runner, because the reported refactoring question is explicitly about modern language features. Practise in a plain online editor, and say the complexity of every solution aloud. A reported topic list also includes live coding, data structures, algorithms and ReactJS, so if your target team builds front-end interfaces, keep a component-state exercise in your rotation.

For the design side, the data-heavy framing matters. Ingestion and sensor-update questions are about write volume, ordering, duplicates, late data, backpressure and what happens when a downstream store is slow or down. Reported evaluation areas for design are scalability, latency versus throughput and data consistency, with an outage in a microservice and a notification service as example scenarios. Practise stating the numbers you assume, naming the bottleneck, and then choosing a storage model on purpose. The database trade-off question rewards a clear comparison along access pattern, consistency and operational cost rather than a product name.

The behavioral rounds are a standard part of the loop according to candidate reports, and two of the four reported prompts are about technical judgement: a disagreement and an architectural mistake. Prepare stories where you made a decision, show the evidence you used and the outcome. Candidates are also advised to be ready to explain the reasoning behind any project on their CV, so rehearse two of them down to the trade-offs you rejected.

01

Initial Screening

reported

Candidates describe the process starting with an initial screening to judge fit for the role. Little else is reported about its format, so treat it as a conversation about your background and the role. One reported tip is to confirm the specific expectations for your role, remote work among them, with the recruiter at this stage. Use it to learn what the later rounds will look like for your team and level, since reports say the structure varies.

What to demonstrate

  • Fit between your background and the role, as described in the screening
  • How clearly you summarise your own experience and the stack you have used
  • Whether your constraints and expectations line up with the role

How to prepare

  • Write a two-minute summary of your career that lands on the listed requirements: a modern language, Git and testing
  • Choose one or two CV projects and be ready to explain why you made each technical decision, not only what you built
  • Prepare questions for the recruiter: remote expectations, which stages apply to your team and level, and what the coding environment will be
Cognite Software Engineer candidate reports ↗
02

Remote Coding Session

reported

Candidates report a remote coding session built to show hands-on coding skill. The coding questions candidates report cover four shapes: processing a stream of data with filtering criteria, a classic linked-list, tree or hash-map problem in an online environment, optimizing an existing algorithm for high-volume input, and refactoring code to be more readable using modern language features. Practise all four shapes in one language, talking through your reasoning as you type.

What to demonstrate

  • Working code in your chosen language, built from sensible data structures
  • Ability to state and improve time and space complexity
  • Readable structure and naming, which reported tips stress over clever solutions
  • How you clarify ambiguous requirements before coding

How to prepare

  • Solve a stream-filtering exercise with a generator or iterator so that memory stays constant, then add a test for the empty input and for a record that fails the filter
  • Take a nested-loop solution and rewrite it with a hash map or a sort plus two pointers, saying the before and after complexity
  • Refactor a messy function into small pure steps using your language's functional or stream features, running tests after each change
  • Practise in a bare editor with no autocomplete, narrating edge cases such as empty input, duplicates and a single element
Cognite Software Engineer candidate reports ↗
03

System Design Discussion

reported

The system design discussion is described as an in-depth conversation about architecture. Reported evaluation areas are scalability, latency versus throughput and data consistency, with example scenarios such as a notification service and an outage in a microservice. The reported design questions are about large-scale industrial data ingestion, frequent updates from thousands of IoT sensors, database architecture trade-offs and keeping an application maintainable as features are added.

What to demonstrate

  • A logical approach to constraints rather than a list of buzzwords
  • How the design behaves as users or data grow
  • Awareness of latency, throughput and consistency trade-offs
  • Handling of failure, such as an outage in one service

How to prepare

  • Outline an ingestion design end to end: producers, a buffer between producers and storage, validation, deduplication, storage for recent and for historical data, and the read path
  • Work out the load for a sensor fleet from assumptions you state, then say which component saturates first and how you would shed or batch load
  • Prepare a comparison of a relational store, a key-value or wide-column store and a time-series store against access pattern, consistency and cost
  • Prepare a short structure for a maintainable application: module boundaries, interfaces between them, test layers and how a new feature is added without touching the core
Cognite Software Engineer candidate reports ↗
04

Behavioral Interview

reported

Candidates report a dedicated behavioral interview aimed at understanding personality and soft skills, and say behavioral interviews are a standard part of the loop. The reported prompts here cover a technical disagreement, an architectural mistake, balancing code quality against delivery pressure and learning a new technology or domain on the fly. Prepare a small set of stories that can each be bent to answer several of those prompts.

What to demonstrate

  • Your account of how you handled technical conflict
  • Your judgement under delivery pressure
  • How you describe learning and ownership in your own past work

How to prepare

  • Write four story outlines, each with situation in two sentences, the decision you personally made, the evidence you used and the outcome
  • Check each story for the word we, and replace it with what you specifically did
  • For each story, note one thing you would do differently, so the reflection is ready
  • Say each story aloud and trim it until the reasoning, not the background, takes most of the time
Cognite Software Engineer candidate reports ↗
05

Peer and Leadership Conversations

reported

The fifth stage is described as conversations with peers and leadership, framed in reports as an assessment of cultural fit. Candidates also report that role requirements stress collaboration with Data Scientists, Product Owners and fellow engineers, along with pair programming, code review and design discussions. Prepare to talk through shared technical decisions and how you work with people who have different priorities.

What to demonstrate

  • How you work with peers and with people in other roles
  • How you explain technical ideas to a mixed audience
  • Whether your stories and CV projects hold together in more detail

How to prepare

  • Rehearse the technical disagreement and architectural mistake stories until you can give both a short and a long version
  • Prepare to explain one past design decision to a non-engineer in plain terms, covering what it costs and what it protects
  • Ask your own questions about how the team reviews code and makes design decisions, and what technical debt it is carrying
Cognite Software Engineer candidate reports ↗
06

Final Decision

reported

The final stage is described as a decision based on all earlier assessments. No separate task or question set is reported for it, so there is little to rehearse beyond staying consistent with what you told earlier interviewers and being ready to discuss next steps.

What to demonstrate

  • The combined picture from the earlier stages
  • Any open points left from earlier conversations

How to prepare

  • Keep a short write-up after each round of what you were asked and what you left unclear, and raise open points with the recruiter
  • Make your start-date, location and remote-work constraints clear so they are not a surprise
  • Review the stories you told in the behavioral rounds so any follow-up conversation stays consistent
Cognite Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Starting the ingestion or IoT design by naming components before fixing the numbers

Open with the assumptions: how many devices, how often each reports, record size, how late or duplicate data is handled and who reads it. Then show the bottleneck those numbers produce, and let that choose the buffer, batching and storage.

02

Calling a database good or bad without tying it to an access pattern

Compare relational, key-value or wide-column and time-series stores on the same axes: query shape, write rate, consistency needed, retention and operational cost. End with a pick for a stated workload and the case in which you would switch.

03

Rewriting code in the refactoring question without protecting behavior

Write or confirm a few tests first, change one thing at a time, and rerun after each step. Explain why each stream or functional step reads better, and keep the result easy for a teammate to follow rather than clever.

04

Optimizing an algorithm by instinct instead of by its current cost

State the existing time and space complexity, find the repeated work, such as a nested scan or a recomputed value, then fix it with a hash map, a sort or a heap. Check the new complexity and a small edge case such as empty or duplicate input.

05

Telling behavioral stories in the first person plural, so your own decision never appears

For each story, write the sentence beginning with I that names the decision you made, the evidence behind it and the result. Keep the technical disagreement and architectural-mistake stories distinct, with a different decision in each.

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

12 technical prompts0 include a worked solution

Implement a function to process a stream of data with specific filtering criteria.

medium
Coding and Algorithms

Implement a function to process a stream of data with specific filtering criteria.

Approach
  1. Clarify the contract first: is the stream bounded or unbounded, must output order match input order, and what happens to malformed records (skip and count, or raise)?
  2. Write it as a lazy pipeline: a Python generator (or Java Stream / JS iterator) that yields matching records one at a time, so memory stays O(1) per record and time is O(n * k) for k predicates.
  3. Model the criteria as a list of predicate functions combined with all(...) over a generator, which short-circuits; put the cheapest or most selective predicate first.
  4. Stateful criteria need extra structures: dedup within a time window uses a dict of key to last-seen time plus a deque for eviction; top-k uses a min-heap of size k (O(log k) per record).
  5. Cover edge cases out loud: empty stream, missing or None fields, NaN values (every comparison with NaN is false), out-of-order timestamps, and a test that feeds a plain list into the same function.
Follow-up
  • How would you filter on a sliding window, such as readings whose 5-minute average exceeds a threshold?
  • Events can arrive out of order by a few seconds. How do you still emit correct results?
  • Throughput is too high for one process. How do you split the stream across workers without breaking per-key logic?

Solve a classic data structure problem (e.g., linked lists, trees, or hash maps) within an online coding envir

medium
Coding and Algorithms

Solve a classic data structure problem (e.g., linked lists, trees, or hash maps) within an online coding environment.

Approach
  1. Name the pattern from the structure: linked lists use two pointers (fast/slow for cycle detection or finding the middle, a gap of k for k-th from the end) and a dummy head to simplify inserts and deletes; in-place reversal is O(n) time, O(1) space.
  2. Trees: choose DFS (recursion or explicit stack) or BFS (queue, for level order). Recursion uses O(h) stack, which is O(n) on a skewed tree, and Python's default recursion limit of 1000 makes an iterative stack safer for deep inputs.
  3. For BST validation, pass (low, high) bounds down the recursion; comparing a node only with its direct children misses violations deeper in the tree.
  4. Hash maps give average O(1) lookup (O(n) worst case under collisions): use them for complement lookups (two-sum), frequency counts and grouping. An LRU cache is a hash map plus a doubly linked list, or OrderedDict with move_to_end and popitem(last=False).
  5. Before saying done in the online editor, trace a small input by hand and run edge cases: empty list or null root, a single node, duplicate keys, and a cycle.
Follow-up
  • Can you do it iteratively with O(1) extra space?
  • How would you make the LRU cache safe for concurrent callers?
  • What changes if keys are mutable objects or have a poor hash function?

Optimize an existing algorithm to handle high-volume inputs or reduce complexity.

medium
Coding and Algorithms

Optimize an existing algorithm to handle high-volume inputs or reduce complexity.

Approach
  1. Read the existing code and state its complexity before changing anything; find the hot spot, typically a nested loop (O(n^2)), membership checks against a list (O(n) each) or building a string with += inside a loop, which can go quadratic.
  2. Apply the standard fixes and say what each costs: list to set or dict lookups (O(n*m) to O(n+m), at O(n) extra memory); sort plus two pointers or binary search (O(n log n)); prefix sums for repeated range sums (O(1) per query after an O(n) build); a size-k heap for top-k (O(n log k)); memoisation for repeated subproblems.
  3. For high-volume input, stop loading everything into memory: stream or chunk the input, batch I/O, and in Python move tight numeric loops into vectorised numpy operations.
  4. Keep the original as a reference: randomized tests compare old and new outputs, then benchmark at a realistic input size with timeit or a profiler such as cProfile to show the gain is real.
  5. Mention the trade-off you accepted: extra memory, more complex code, or an assumption about input (already sorted, bounded value range).
Follow-up
  • The input no longer fits in memory. What do you change (external sort, chunked processing, map-reduce)?
  • What if the input is usually nearly sorted?
  • Can this be parallelised, and what part stays sequential?

Refactor existing code blocks to improve readability and leverage modern language features (e.g., using functi

medium
Coding and Algorithms

Refactor existing code blocks to improve readability and leverage modern language features (e.g., using functional streams).

Approach
  1. Pin the current behaviour before touching it: write characterization tests on the existing code, then refactor in small steps and rerun them after each one.
  2. Apply the basic moves: extract functions with names that state intent, replace nested ifs with guard clauses, remove duplicated branches, and replace magic numbers with named constants.
  3. Turn accumulate-in-a-loop code into pipelines: Java list.stream().filter(...).map(...).toList() (Java 16+, returns an unmodifiable list) or Collectors.groupingBy for aggregation; Python comprehensions, generator expressions, itertools and collections.Counter; JS filter, map and reduce.
  4. Know the limits: avoid side effects inside map or forEach; a Java stream is single-use (reusing it throws IllegalStateException); checked exceptions do not fit cleanly in lambdas; parallelStream is not a free speed-up. Use Optional over null returns and records or dataclasses for data carriers.
  5. State that the complexity is unchanged and that the gain is readability and testability, then point to the test that proves behaviour stayed the same.
Follow-up
  • When would you keep a plain loop instead of a stream pipeline?
  • How would you split this refactor into reviewable pull requests?
  • The code has no tests and depends on a database. How do you make it testable first?

Seven days built around the reported rounds: one day to map the loop, four days of coding and design practice on the reported questions, a behavioral day and a mixed run-through. Practice-library items are PracHub exercises, not company material.

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
01Map the loop and choose your language
  • List the six reported rounds, and under each note which of the twelve reported questions belongs to its question type: coding, design or behavioral
  • Choose one language from the listed examples (Python, Java, Go or JavaScript/TypeScript) and set up a bare editor with a test runner
  • Write your two-minute career summary and the two CV projects you can defend decision by decision

Deliverable: A one-page loop map, a working test setup in your chosen language, and a written career summary with two project outlines.

02Streams, filtering and refactoring
  • Implement the stream-filtering function with an iterator or generator, so it never holds the whole input, and write tests for empty input and for records that fail the filter
  • Refactor a loop-heavy function using the functional or stream features of your language, keeping the tests green after each step
  • Say the time and space complexity of both versions aloud

Deliverable: A working stream filter with tests, and a before-and-after refactor with a written complexity note for each.

Practice prompt ↗Practice prompt ↗
03Data structures and algorithm optimization
  • Solve a linked-list, a tree and a hash-map problem in a plain online editor, narrating edge cases
  • Take a brute-force solution, state its complexity, then improve it with a hash map, sorting or a heap
  • Write a one-line explanation of why each data structure fits its access pattern

Deliverable: Three solved classic problems and one optimized algorithm, each with a stated before and after complexity.

Practice prompt ↗Practice prompt ↗
04Ingestion and sensor-update design
  • Outline an ingestion design with a buffer, validation, deduplication, hot and historical storage and a read path, plus the failure story when storage is down
  • Estimate the load for a sensor fleet from assumptions you state, then name the first bottleneck and how you would batch or shed load
  • Optional: complete PracHub's window-function SQL practice item on version gaps and relay lag, as practice with ordered event data

Deliverable: Two written design outlines (ingestion and sensor updates), each with stated assumptions, a bottleneck and a failure mode.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
05Database trade-offs and maintainable structure
  • Write a comparison table of relational, key-value or wide-column and time-series storage across query shape, write rate, consistency, retention and cost
  • Outline how you would structure an application so a new feature does not touch the core: modules, interfaces and test layers
  • Work through PracHub's debugging practice item on listing latency, saying aloud how you would isolate a performance problem or a leak

Deliverable: A storage comparison table, a one-page application structure outline and a written debugging sequence from the practice item.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
06Behavioral stories
  • Write outlines for the technical disagreement, architectural mistake, quality-versus-speed and learn-on-the-fly stories, each with the decision you made, the evidence and the outcome
  • Add a second, shorter version of each story and one thing you would change
  • Say each aloud and check that your own decision appears in the first minute

Deliverable: Four story outlines with short and long versions, each naming your own decision and one thing you would change.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Mixed run-through and CV review
  • Do a full mixed session: one optimization problem in the editor, one design question by voice, one behavioral story
  • Review both CV projects for the trade-offs you rejected, and prepare three questions of your own for peers and leadership
  • Write the list of anything still unclear to raise with the recruiter

Deliverable: One recorded or written mixed session with notes on weak spots, plus a list of three questions for the team and your open points for the recruiter.

Practice prompt ↗Practice prompt ↗Practice prompt ↗

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

Candidates report that behavioral interviews are a standard part of this loop, and two of the reported prompts are about technical judgement. For a Software Engineer role, prepare stories where you made a decision, backed it with evidence and can name what you would change. The reported questions come first, followed by two prompts built from the CV-review advice.

Describe a time you had to deal with a significant technical disagreement within your team. How did you resolv

medium
Behavioral and Leadership

Describe a time you had to deal with a significant technical disagreement within your team. How did you resolve it?

Approach
  1. Choose a disagreement that was genuinely technical, with two defensible options such as a build-versus-adopt call, a schema design, a service split or a testing strategy, and where you held a real stake. State each position fairly in one sentence, including the one you argued against.
  2. Show the move from opinion to evidence: a small spike, benchmark, load test or written comparison against agreed criteria such as latency, operational cost, reversibility and time to deliver. Name the criteria the group agreed on before looking at results.
  3. State how the decision was made: the owner decided, the group agreed, or a time-boxed experiment was set with a date to revisit. Say what you did when the outcome went against you, ideally that you committed to it and helped deliver it.
  4. Close with the measurable outcome and one thing you would change. The mistake that sinks this story is casting colleagues as obstructive while you were simply right, or choosing a mild difference of taste that never put anything at risk.
Follow-up
  • What did you concede during the disagreement, and was that the right call?
  • What if the other person had been more senior or the evidence had been inconclusive?
  • How did the working relationship change afterwards?

How do you balance the need for high-quality code with the pressure to deliver features quickly?

medium
Behavioral and Leadership

How do you balance the need for high-quality code with the pressure to deliver features quickly?

Approach
  1. Answer with a rule and a story, not a philosophy. The rule: decide up front which things are non-negotiable on the change at hand, such as correct data handling, tests on the path you changed and a way to roll back, and which can wait, such as polish, secondary options and internal naming.
  2. The story: a real deadline where you cut scope rather than quality, for example shipping a narrower slice behind a feature flag with tests on the core path, instead of a wide slice with gaps.
  3. Explain how you made the trade-off visible to the Product Owner in terms they could decide on, such as what ships on the date, what moves and what risk remains, and how the deferred work was recorded as a ticket with an owner rather than left as a vague promise.
  4. Give evidence: defects after release, a rollback avoided or the time saved. Include a case where you chose to move the date because the risk was too high. The mistake to avoid is claiming you never compromise, or that speed always wins.
Follow-up
  • Tell me about a shortcut that came back to cost you. What did you change afterwards?
  • How do you decide which technical debt is worth paying down now?
  • How do you handle a Product Owner who wants the date kept and the scope unchanged?

Give an example of a time you had to learn a new technology or domain on the fly to solve a problem.

medium
Behavioral and Leadership

Give an example of a time you had to learn a new technology or domain on the fly to solve a problem.

Approach
  1. Pick a case with real pressure and a subject that was new to you, such as a language, a storage system, a protocol or an unfamiliar business domain. Say in one sentence what had to be solved and by when, then move on to how you learned.
  2. Describe a method, not a course list: split what you needed to know from what was only interesting, read primary documentation or source, build the smallest working experiment, and ask a specific question of someone who knew the area rather than a vague request for help.
  3. Explain how you limited risk while still learning: pairing, small pull requests, extra tests around code you did not fully understand, and review by someone experienced. Be honest about what you got wrong first, because it makes the story credible.
  4. Finish with the outcome and what stayed behind: a short write-up for the team, a reusable helper or a quicker route next time. The mistake is claiming mastery within days or describing only passive reading with no shipped result.
Follow-up
  • How did you check that your understanding was correct before it reached production?
  • What would you have done if nobody around you knew the area?
  • What did you get wrong at first, and how did you find out?
  • 01

    Describe a time you had to deal with a significant technical disagreement within your team. How did you resolve it?

  • 02

    Tell us about a project where you noticed an architectural mistake. What did you do to address it?

  • 03

    How do you balance the need for high-quality code with the pressure to deliver features quickly?

  • 04

    Give an example of a time you had to learn a new technology or domain on the fly to solve a problem.

  • 05

    Walk through a project on your CV and explain why you made each major technical decision.

  • 06

    Describe a time you worked with a Product Owner or Data Scientist whose priorities differed from yours.

PracHub preparation framework ↗
How long should I prepare for the technical rounds?

Reports suggest consistent practice over roughly two to four weeks. Spread it across the three question types: coding in one language, design aloud with stated numbers, and behavioral stories said aloud. The seven-day plan above is a compressed version for when time is short.

Cognite Software Engineer candidate reports ↗
What if I don't know the answer to a technical question?

Say what you do know, state your assumptions, and reason toward an answer step by step. Reports advise against bluffing. For design questions, name the trade-off you are weighing and what you would measure to settle it.

Cognite Software Engineer candidate reports ↗
Does Cognite offer remote work?

Reports say this varies by location and team. Ask the recruiter during the initial screening what applies to your role, along with which interview stages your team uses.

Cognite Software Engineer candidate reports ↗
How long does the entire process take?

Candidates report six rounds over about 4-6 weeks, with some reports running as long as 8 weeks. They also say pace and structure vary with the team and how urgently the role is being filled, so ask the recruiter for your own timeline.

Cognite Software Engineer candidate reports ↗
What topics does Cognite test in interviews?

Reported topics are system design, data structures, algorithms, live coding and ReactJS, with SQL and Python also appearing in topic lists. The reported questions break into stream filtering, classic data structures, optimization, refactoring, industrial data ingestion, IoT sensor updates, database trade-offs and maintainable structure, plus behavioral prompts.

Cognite Software Engineer candidate reports ↗
Which programming language should I use?

The requirements candidates describe list Python, Java, Go and JavaScript or TypeScript as examples of a modern language, and no single language is reported as required. Confirm with the recruiter, then pick the one in which you are fastest with the standard library, iterators or streams and a test runner.

PracHub Software Engineer practice ↗
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.