cswork / libraryOpen practice workspace

Interview guides · IFS

IFS Software Engineer Interview Guide

IFS Software Engineer interview guide: reported rounds, questions and how candidates describe the process.

The 60-second brief

As a Software Engineer at IFS, you are at the heart of building and maintaining enterprise-grade solutions that empower global organizations to manage their business processes, supply chains, and customer relationships. Your work directly impacts how complex, large-scale industrial software operates, requiring you to balance technical precision with a clear understanding of the business value your code provides. This role is critical because IFS products are often mission-critical for their users. You will likely contribute to evolving existing architectures, debugging complex systems, and implementing new features that drive operational efficiency.

This guide is scoped to a Software Engineer candidate at IFS.

Focus areas

  • Java
  • SQL
  • Coding Challenges / Live Coding

The IFS interview process

IFS candidates report 3 rounds over 3-5 weeks. The stages below are what candidates describe, not a published process.

Initial Screening Call

A preliminary call with HR to discuss your background and assess fit for the role.

What to demonstrate

  • A preliminary call with HR to discuss your background and assess fit for the role
  • Depth in Java

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 Rounds

One or more technical interviews to evaluate your coding skills and problem-solving abilities.

What to demonstrate

  • One or more technical interviews to evaluate your coding skills and problem-solving abilities
  • Depth in Java

How to prepare

  • Answer aloud and timed: What is the difference between an interface and an abstract class, and when would you use one over the other?
  • Answer aloud and timed: How does polymorphism simplify code maintenance?

Management Discussion

A final discussion focusing on behavioral aspects and your fit within the organization.

What to demonstrate

  • A final discussion focusing on behavioral aspects and your fit within the organization
  • Depth in Java

How to prepare

  • Answer aloud and timed: Explain the difference between inner joins, left joins, and outer joins.
  • Answer aloud and timed: How do you optimize a slow-performing SQL query?

Where candidates lose points

Own your resume

Be prepared to explain every single project, technology, or skill listed on your CV in detail. If you list it, be ready to defend it.

Master the basics

Do not overlook fundamental topics like SQL joins or OOP principles; they are the bedrock of most technical interviews at IFS.

Ask questions

At the end of your interviews, ask insightful questions about the team’s current projects or the company’s engineering culture. It shows engagement.

Stay calm

The interviewers are generally friendly and want you to succeed. If you get stuck, explain your thought process—the goal is to see how you think, not just if you reach the final answer.

Questions & practice

Write an algorithm to sort an array or find the maximum element in a data structure.

Medium · Problem-Solving & Coding

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Create a pattern (e.g., a star pyramid or palindrome check) to demonstrate basic algorithmic control flow.

Medium · Problem-Solving & Coding

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Collapse a redelivered event batch into per-aggregate high-water marks

Easy · hashing · at-least-once · aggregation

You drain a batch of up to 5,000,000 events, each (aggregate_id BIGINT, aggregate_version INT, event_type, payload). The log guarantees order within one aggregate only; the batch merges 64 partitions, and a relay failover has redelivered a range, so an older version for an aggregate can appear after a newer one. Given a map of last_applied_version per aggregate, produce the events worth applying, at most one per (aggregate_id, version), plus the count discarded. Target O(n) time. State the memory for 2,000,000 distinct aggregates and what you do when it does not fit.

Approach

  1. One pass, one hash map from aggregate_id to the highest version kept, and a discard counter. An event whose version is at or below last_applied_version for its aggregate is dropped without further work, which is the whole reason the event carries its version rather than a delta. O(n) expected time, O(d) space in distinct aggregates.
  2. Keep the maximum, never the last occurrence. The redelivered range means the final appearance of an aggregate in the batch can be an older version than one seen earlier in the same batch, so last-wins applies stale state over newer state and the projection regresses with no error anywhere.
  3. Cost the memory instead of calling it large: an 8-byte key plus a 4-byte version is 12 bytes of payload, and an open-addressed table held at a 0.7 load factor costs roughly 17 bytes per entry before per-slot metadata, so 2,000,000 aggregates is tens of megabytes in a native layout and several times that in a runtime that boxes both key and value.
  4. If the distinct set exceeds memory, partition on hash(aggregate_id) mod P and reduce each partition independently. Every event for one aggregate hashes to the same partition, so the per-partition result is exact and the merge is concatenation rather than a second reduction.

Follow-up

  • The payload is a patch rather than a snapshot, so applying only the highest version loses the intermediate changes. What changes in your reduction?
  • How do you detect that version 7 arrived while version 6 was never delivered, and what should the consumer do about the gap?

How do you optimize a slow-performing SQL query?

Medium · Database & SQL Proficiency

Approach

  1. Name the grain you start from and join outward from it.
  2. Check whether any join is one-to-many before aggregating, or the sums inflate.
  3. Say which index the query would use, and what makes it unusable.
  4. 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?

Describe the concepts of normalization and when you might choose to denormalize a database.

Medium · Database & SQL Proficiency

Approach

  1. Name the grain you start from and join outward from it.
  2. Check whether any join is one-to-many before aggregating, or the sums inflate.
  3. Say which index the query would use, and what makes it unusable.
  4. 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?

Explain the four pillars of Object-Oriented Programming (OOP) and provide real-world examples for each.

Medium · Programming Fundamentals & OOP

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. 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 do you apply SOLID principles when designing a new feature?

Medium · Programming Fundamentals & OOP

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. 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 is the difference between an interface and an abstract class, and when would you use one over the other?

Medium · Programming Fundamentals & OOP

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. 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 does polymorphism simplify code maintenance?

Medium · Programming Fundamentals & OOP

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

Explain the difference between inner joins, left joins, and outer joins.

Medium · Database & SQL Proficiency

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. 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 are the differences between triggers, stored procedures, and views?

Medium · Database & SQL Proficiency

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. 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 optimize an existing API to reduce latency?

Medium · Problem-Solving & Coding

Approach

  1. Say who the caller is and what they do when the call fails halfway.
  2. Define the identity of a request so a retry cannot double-apply it.
  3. Separate accepted, pending, failed and confirmed; they are different facts.
  4. 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?

Explain how you would approach debugging a system failure in a production environment.

Medium · Problem-Solving & Coding

Approach

  1. Establish what changed and when, before forming any theory.
  2. Pick a bisection that eliminates candidates whichever way it turns out.
  3. Check the instrumentation before believing the symptom.
  4. 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 IFS candidates report.

Day 1 — Map the IFS loop

  • Write out the reported sequence: Initial Screening Call, Technical Rounds, Management Discussion.
  • 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 Java

  • Spend the session on Java, which IFS candidates report being tested on.
  • Write one worked example in Java and time yourself on it.

Deliverable: One timed worked example in Java.

Day 3 — Work SQL

  • Spend the session on SQL, which IFS candidates report being tested on.
  • Write one worked example in SQL and time yourself on it.

Deliverable: One timed worked example in SQL.

Day 4 — Work Coding Challenges / Live Coding

  • Spend the session on Coding Challenges / Live Coding, which IFS candidates report being tested on.
  • Write one worked example in Coding Challenges / Live Coding and time yourself on it.

Deliverable: One timed worked example in Coding Challenges / Live Coding.

Day 5 — Answer out loud: Programming Fundamentals & OOP

  • Answer aloud, timed: Explain the four pillars of Object-Oriented Programming (OOP) and provide real-world examples for each.
  • Answer aloud, timed: How do you apply SOLID principles when designing a new feature?

Deliverable: Spoken answers to 2 reported Programming Fundamentals & OOP question(s), under time.

Day 6 — Answer out loud: Database & SQL Proficiency

  • Answer aloud, timed: Explain the difference between inner joins, left joins, and outer joins.
  • Answer aloud, timed: How do you optimize a slow-performing SQL query?

Deliverable: Spoken answers to 2 reported Database & SQL Proficiency question(s), under time.

Day 7 — Answer out loud: Problem-Solving & Coding

  • Answer aloud, timed: Write an algorithm to sort an array or find the maximum element in a data structure.
  • Answer aloud, timed: Create a pattern (e.g., a star pyramid or palindrome check) to demonstrate basic algorithmic control flow.

Deliverable: Spoken answers to 2 reported Problem-Solving & Coding question(s), under time.

Behavioural preparation

Behavioural rounds judge the decision you made and what it cost.

Tell us about a challenging project you worked on and the role you played in its success.

Medium · Behavioral & Situational

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. 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 disagreements with team members regarding code design or technical approaches?

Medium · Behavioral & Situational

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. 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?

Describe a time you had to learn a new technology quickly to meet a project deadline.

Medium · Behavioral & Situational

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. 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?

What are your long-term career goals, and how does this role at IFS align with them?

Medium · Behavioral & Situational

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. 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?