Interview guides · Kelvion
Kelvion Software Engineer Interview Guide
Kelvion Software Engineer interview guide: reported rounds, questions and how candidates describe the process.
The 60-second brief
At Kelvion, a global leader in the manufacturing of industrial heat exchangers, the role of a Software Engineer is uniquely integrated with physical engineering, manufacturing systems, and operational technology. You will not simply be building isolated web applications; instead, you will design, develop, and maintain the digital backbone that powers global production facilities, engineering automation, and IT infrastructure. Your work directly impacts how heavy industrial products are designed, manufactured, and delivered to clients worldwide. This position bridges the gap between software development and physical manufacturing.
This guide is scoped to a Software Engineer candidate at Kelvion.
Focus areas
- IT infrastructure fundamentals
- Manufacturing engineering principles
- Industrial engineering principles
The Kelvion interview process
Kelvion candidates report 3 rounds over 3-5 weeks. The stages below are what candidates describe, not a published process.
HR Phone Screen
Initial discussion to review your CV and explore your background.
What to demonstrate
- Initial discussion to review your CV and explore your background
- Depth in IT infrastructure fundamentals
How to prepare
- Be able to walk your CV end to end in two minutes, and say why this company specifically.
- Have your salary expectations, notice period and location constraints ready, and ask for the rest of the loop in writing.
Technical and Managerial Interview
Detailed interview with directors, engineering managers, or IT leads, including a conversational segment in English for international candidates.
What to demonstrate
- Detailed interview with directors, engineering managers, or IT leads
- Including a conversational segment in English for international candidates
How to prepare
- Answer aloud and timed: Tell me about a past project where you had to collaborate with non-technical stakeholders, such as manufacturing or operations teams.
- Answer aloud and timed: What development methodologies and tools are you most comfortable using to track and deploy your code?
Onsite Visit
Invitation to visit a local facility or plant, tour the manufacturing floor, and align expectations with the team.
What to demonstrate
- Invitation to visit a local facility or plant, tour the manufacturing floor, and align expectations with the team
- Depth in IT infrastructure fundamentals
How to prepare
- Answer aloud and timed: Describe a technical project you worked on that went wrong. What was the root cause of the failure, and how did you resolve it?
- Answer aloud and timed: How do you handle a situation where there is a misalignment of expectations between the software development team and the business managers?
Where candidates lose points
Research Kelvion's Products
Take the time to understand what industrial heat exchangers are and the industries Kelvion serves (such as energy, data centers, and marine). Showing that you understand the business context of your software will set you apart from other candidates.
Prepare Your "Project Gone Wrong" Story
Be ready with a detailed, honest story of a technical project that faced major challenges. Focus on your analytical approach to identifying the issue, how you communicated with stakeholders, and what permanent fixes you implemented.
Optimising an axis nobody named
Ask which resource is actually scarce here: wall-clock latency, throughput, memory footprint, cost per request, or engineering time. Shaving a constant factor off an in-memory step is wasted effort when the same function makes a blocking remote call inside the loop.
Questions & practice
Merge partitioned event streams into one ordered feed with bounded lateness
Hard · k-way merge · watermarks · out-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
- 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.
- 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.
- 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.
- 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?
Identify the heaviest tenants in a five-minute window under memory pressure
Medium · top-k · heavy hitters · streaming
The edge service handles about 3,000 requests per second across roughly 50,000 tenants, peaking near 9,000. Expose the 50 heaviest tenants by request count over the trailing five minutes so limits can be tightened before one tenant's backfill starves the fleet. You may not retain five minutes of raw records. Give the exact solution and its memory, then the bounded-memory approximation with its error stated as a formula, and say which you would ship and at what tenant cardinality that choice changes.
Approach
- Do the exact version first, because it is affordable at this cardinality: a ring of 300 one-second counters per tenant, advanced lazily, is 1,200 bytes of counters per tenant and roughly 60 to 90 MB for 50,000 tenants with overhead. Carry a running total and subtract the bucket you overwrite so a window read is O(1) rather than 300 adds.
- Extract the top 50 with a size-k min-heap over the tenant sums: O(d log k) for d tenants, against O(d log d) to sort them all. Maintaining the heap continuously instead of on query requires a tenant-to-heap-index map, because incrementing a count already inside the heap means sifting from a known position, and without that map you rebuild the heap on every request.
- State the approximation precisely rather than gesturing at sketches. Misra-Gries with m counters retains every item whose true count exceeds N/(m+1), and each retained count underestimates the truth by at most N/(m+1). With m = 1,000 and N = 900,000 requests in the window the error is roughly 900 requests, which is fine for spotting a tenant sending 50,000 and useless for ranking two tenants 200 apart.
- Say what breaks when the window slides: Misra-Gries and Space-Saving are insert-only and cannot be decremented as records age out. The workable construction is one summary per sub-window, say ten seconds, with 30 summaries merged at query time, and the merged error is the sum of the per-summary errors, so the bound degrades linearly in the number of sub-windows.
Follow-up
- The heaviest tenant is heavy because of one export job rather than user traffic. Should the limiter treat those as the same tenant?
- Two tenants sit tied at the boundary of the top 50. Does your answer flap, and does the flapping matter?
Find overlapping job attempts and peak concurrency from lease records
Medium · sweep line · intervals · leases
A day of job_run history yields about 50,000,000 attempt records: (job_run_id, job_type, attempt, started_at, finished_at which is NULL when the worker died, lease_expires_at). Leases expire on a clock, so a job that outran its lease ran twice. Produce (a) every job_run_id whose attempts overlapped in wall-clock time and (b) the peak number of simultaneously running attempts per job_type with the minute it occurred. Target O(n log n). State how you treat a NULL finished_at and what clock skew does to your answer.
Approach
- Define the interval before sorting anything: an attempt occupies [started_at, COALESCE(finished_at, lease_expires_at)). finished_at is observed and lease_expires_at is only a promise, so every attempt without a finish contributes an estimate and the whole result is a lower bound on overlap rather than an exact count.
- For peak concurrency, sweep: emit 2n endpoints, sort by (timestamp, kind) with ends ordered before starts at equal timestamps, then walk the sequence maintaining a counter per job_type and record each type's maximum with its timestamp. O(n log n) dominated by the sort, O(n) space, or O(1) extra if the sort is external and the walk streams.
- For overlap detection, do not compare attempts pairwise. A single global sort by (job_run_id, started_at) gives both the grouping and the order; within a group, keep the maximum end seen so far and report an overlap exactly when the next start is less than that running maximum, which is one linear pass after the sort.
- Half-open intervals matter and are easy to get wrong: with closed intervals an attempt ending at the same millisecond another begins reads as concurrency two, and across 50,000,000 records that artefact swamps the real signal.
Follow-up
- A handler is not idempotent and you have found 400 overlapping jobs. Which of them actually caused damage, and what would you query to find out?
- Peak concurrency for one job_type is 4 against a configured cap of 4. Is the cap working, or is the data hiding attempts that never started?
Explain how you would optimize a slow-running database query that is bottlenecking an internal engineering too
Medium · Technical and Domain Foundations
Explain how you would optimize a slow-running database query that is bottlenecking an internal engineering tool.
Approach
- Name the grain you start from and join outward from it.
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- Say which index the query would use, and what makes it unusable.
- Handle the rows that do not match: that is usually the actual question.
Follow-up
- How does the query change if that join becomes one-to-many?
- What happens to this when the table is ten times larger?
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
- 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.
- 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.
- 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.
- 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?
Walk me through your CV and describe the technical architecture of a major project you recently completed.
Medium · Background and Project Experience
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Why did you choose to go into engineering, and what specifically attracts you to the Software Engineer role at
Medium · Background and Project Experience
Why did you choose to go into engineering, and what specifically attracts you to the Software Engineer role at Kelvion?
Approach
- Clarify what is being asked and what a complete answer contains.
- State your assumptions explicitly before working the problem.
- Say what you would check first and why it is the highest-information step.
- Work from the requirement backwards to the design.
Follow-up
- What assumption would you test first?
- How would you know your answer was wrong?
What development methodologies and tools are you most comfortable using to track and deploy your code?
Medium · Background and Project Experience
Approach
- Clarify what is being asked and what a complete answer contains.
- State your assumptions explicitly before working the problem.
- Say what you would check first and why it is the highest-information step.
- Work from the requirement backwards to the design.
Follow-up
- What assumption would you test first?
- How would you know your answer was wrong?
How would you design a simple data pipeline to collect and store sensor data from a manufacturing plant floor?
Medium · Technical and Domain Foundations
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
What are the key differences between managing on-premises server infrastructure and deploying services in a cl
Medium · Technical and Domain Foundations
What are the key differences between managing on-premises server infrastructure and deploying services in a cloud environment?
Approach
- Clarify what is being asked and what a complete answer contains.
- State your assumptions explicitly before working the problem.
- Say what you would check first and why it is the highest-information step.
- Work from the requirement backwards to the design.
Follow-up
- What assumption would you test first?
- How would you know your answer was wrong?
What steps do you take to ensure security and reliability when integrating third-party APIs with legacy intern
Medium · Technical and Domain Foundations
What steps do you take to ensure security and reliability when integrating third-party APIs with legacy internal systems?
Approach
- Say who the caller is and what they do when the call fails halfway.
- Define the identity of a request so a retry cannot double-apply it.
- Separate accepted, pending, failed and confirmed; they are different facts.
- Design the error taxonomy before the success shape; callers branch on it.
Follow-up
- What happens if the caller retries after a timeout?
- How does a client discover it is on an old version of this contract?
Describe a technical project you worked on that went wrong. What was the root cause of the failure, and how di
Medium · Behavioral and Problem-Solving
Describe a technical project you worked on that went wrong. What was the root cause of the failure, and how did you resolve it?
Approach
- Establish what changed and when, before forming any theory.
- Pick a bisection that eliminates candidates whichever way it turns out.
- Check the instrumentation before believing the symptom.
- Separate the trigger from the cause; the deploy is rarely the bug.
Follow-up
- What would you look at first, and what would it rule out?
- How would you tell a cause from a coincidence here?
Suggested practice checklist
Built from the rounds and topics Kelvion candidates report.
Day 1 — Map the Kelvion loop
- Write out the reported sequence: HR Phone Screen, Technical and Managerial Interview, Onsite Visit.
- For each round, write one sentence on what it is judging, from the description above, and mark the one you are least ready for.
Deliverable: A one-page map of the 3 reported rounds, with the weakest marked.
Day 2 — Work IT infrastructure fundamentals
- Spend the session on IT infrastructure fundamentals, which Kelvion candidates report being tested on.
- Write one worked example in IT infrastructure fundamentals and time yourself on it.
Deliverable: One timed worked example in IT infrastructure fundamentals.
Day 3 — Work Manufacturing engineering principles
- Spend the session on Manufacturing engineering principles, which Kelvion candidates report being tested on.
- Write one worked example in Manufacturing engineering principles and time yourself on it.
Deliverable: One timed worked example in Manufacturing engineering principles.
Day 4 — Work Industrial engineering principles
- Spend the session on Industrial engineering principles, which Kelvion candidates report being tested on.
- Write one worked example in Industrial engineering principles and time yourself on it.
Deliverable: One timed worked example in Industrial engineering principles.
Day 5 — Answer out loud: Background and Project Experience
- Answer aloud, timed: Walk me through your CV and describe the technical architecture of a major project you recently completed.
- Answer aloud, timed: Why did you choose to go into engineering, and what specifically attracts you to the Software Engineer role at Kelvion?
Deliverable: Spoken answers to 2 reported Background and Project Experience question(s), under time.
Day 6 — Answer out loud: Behavioral and Problem-Solving
- Answer aloud, timed: Describe a technical project you worked on that went wrong. What was the root cause of the failure, and how did you resolve it?
- Answer aloud, timed: How do you handle a situation where there is a misalignment of expectations between the software development team and the business managers?
Deliverable: Spoken answers to 2 reported Behavioral and Problem-Solving question(s), under time.
Day 7 — Answer out loud: Technical and Domain Foundations
- Answer aloud, timed: How would you design a simple data pipeline to collect and store sensor data from a manufacturing plant floor?
- Answer aloud, timed: What are the key differences between managing on-premises server infrastructure and deploying services in a cloud environment?
Deliverable: Spoken answers to 2 reported Technical and Domain Foundations question(s), under time.
Behavioural preparation
Behavioural rounds judge the decision you made and what it cost.
Tell me about a past project where you had to collaborate with non-technical stakeholders, such as manufacturi
Medium · Background and Project Experience
Tell me about a past project where you had to collaborate with non-technical stakeholders, such as manufacturing or operations teams.
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?
How do you handle a situation where there is a misalignment of expectations between the software development t
Medium · Behavioral and Problem-Solving
How do you handle a situation where there is a misalignment of expectations between the software development team and the business managers?
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?
Tell me about a time you had to learn a new technology or domain quickly to solve an urgent problem.
Medium · Behavioral and Problem-Solving
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?
How do you prioritize your tasks when managing multiple urgent requests from different departments?
Medium · Behavioral and Problem-Solving
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?