cswork / libraryOpen practice workspace

Interview guides · Igt

Igt Software Engineer Interview Guide

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

The 60-second brief

As a Software Engineer at IGT (International Game Technology), you sit at the intersection of high-scale gaming technology, regulated casino systems, lottery operations, and interactive digital platforms. Engineers at IGT build, modernize, and maintain critical software that powers land-based electronic gaming machines (EGMs), central terminal systems, sports betting networks, and backend services used globally. The software you write directly impacts millions of players and business clients, demanding exceptional reliability, security, and performance. Depending on the specific team you join—such as Game Development, Platform & Systems, Automation, or Central Services—your tech stack may vary from low-level systems programming in C++ or C to backend services built with Java, C#, or.NET, or frontend web interfaces using modern JavaScript frameworks.

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

Focus areas

  • C#
  • .NET platform
  • REST APIs

The Igt interview process

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

Recruiter Screen

Initial contact with a recruiter to discuss the role and assess candidate fit.

What to demonstrate

  • Initial contact with a recruiter to discuss the role and assess candidate fit
  • Depth in C#

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 Evaluation

Assessment involving basic algorithm questions, language syntax, or code review.

What to demonstrate

  • Assessment involving basic algorithm questions, language syntax, or code review
  • Depth in C#

How to prepare

  • Answer aloud and timed: How does StringBuilder differ from standard string concatenation, and why does memory allocation matter?
  • Answer aloud and timed: Explain memory allocation, pointers, and memory leaks in C/C++.

Management Panel

Final interview with management focusing on cultural fit and review of past work.

What to demonstrate

  • Final interview with management focusing on cultural fit and review of past work
  • Depth in C#

How to prepare

  • Answer aloud and timed: How does garbage collection or manual memory management work in your primary language?
  • Answer aloud and timed: Explain the difference between conditional rendering directives like v-if and v-show (or framework equivalents).

Where candidates lose points

Review Your Resume Thoroughly

Expect interviewers to pull directly from past project bullet points. Be prepared to explain architectural choices, libraries used, and what you would do differently today.

Master Your Primary Language Fundamentals

Be ready to answer "under the hood" questions regarding standard library constructs, memory management, and class relationships in C++, Java, or C#.

Prepare for Panel Interactions

Practice speaking clearly in front of multiple interviewers. Address the entire panel when answering questions and maintain a steady, conversational pace.

If you get stuck during a technical discussion, express your underlying thought process out loud

Interviewers at IGT appreciate candidates who communicate systematically when working through unexpected problems.

Questions & practice

How does StringBuilder differ from standard string concatenation, and why does memory allocation matter?

Medium · Core Programming & Object-Oriented Conce

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

Explain memory allocation, pointers, and memory leaks in C/C++.

Medium · Core Programming & Object-Oriented Conce

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

How does garbage collection or manual memory management work in your primary language?

Medium · Core Programming & Object-Oriented Conce

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

How do you approach multithreading and thread safety in your backend applications?

Medium · Systems, OS & Testing Fundamentals

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

How do you isolate errors in a array or dataset where elements appear multiple times?

Medium · Systems, OS & Testing Fundamentals

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?

Find version gaps and relay lag with window functions

Medium · window functions · event tables · frame semantics

outbox_event holds event_id, aggregate_type, aggregate_id, aggregate_version, event_type, payload, status ('pending','published','dead'), attempts, created_at, published_at. A projection is missing rows and you must decide whether the relay skipped events or the consumer dropped them. Write three queries over the last seven days: one listing every aggregate_id whose published aggregate_version sequence has a hole, one giving per-day counts with a running total, and one returning the newest published event per aggregate. For each, say where the window function is evaluated relative to WHERE and LIMIT. PostgreSQL 16.

Approach

  1. Gaps: compute lead(aggregate_version) OVER (PARTITION BY aggregate_id ORDER BY aggregate_version) in a subquery, then filter next_version <> aggregate_version + 1 in the outer query. Window functions are evaluated after WHERE, GROUP BY and HAVING and before the outer ORDER BY and LIMIT, so the predicate cannot sit in the same WHERE clause and PostgreSQL 16 has no QUALIFY.
  2. Say what the seven-day filter does to the answer: it truncates every partition, so the first row per aggregate has no predecessor inside the window and a hole spanning the boundary is invisible. Widen the window, or join to resource.version as the authority for the true maximum.
  3. Running total: SELECT date_trunc('day', created_at) AS d, count() AS n, sum(count()) OVER (ORDER BY date_trunc('day', created_at) ROWS UNBOUNDED PRECEDING). An aggregate inside a window call is legal because grouping runs before windowing. The grouping key is unique per row here so ROWS and RANGE agree, but write the frame anyway — over ungrouped rows with tied timestamps the default RANGE frame pulls in every peer row and the total jumps.
  4. Newest per aggregate: DISTINCT ON (aggregate_id) ... ORDER BY aggregate_id, aggregate_version DESC is the cheap PostgreSQL-only form when an index matches that order; row_number() OVER (PARTITION BY aggregate_id ORDER BY aggregate_version DESC) = 1 is the portable form and needs a subquery for the same evaluation-order reason as the gap query.

Follow-up

  • Relay failover redelivers events. Does a duplicate break the gap query, and how would you detect one from this table alone?
  • Turn the gap check into a continuous monitor rather than a query someone runs after an incident. What does it watch?

Keep soft-deleted accounts from blocking re-registration

Easy · soft delete · unique constraints · engine differences

app_user holds user_id, tenant_id, email CITEXT, password_hash (NULL for SSO principals), email_verified_at, auth_version, status ('invited','active','suspended','deactivated'), created_at, updated_at, deleted_at. Two live accounts for one address inside a tenant must be impossible, but an address freed by a soft delete must be reusable, and the same tenant may delete and re-register it repeatedly. Write the uniqueness DDL for PostgreSQL 16, then the equivalent for MySQL 8 where partial indexes do not exist, and say what each permits once three deleted rows already hold that address.

Approach

  1. Start from what is actually unique: not (tenant_id, email), but (tenant_id, email) among live rows. PostgreSQL says that directly — CREATE UNIQUE INDEX app_user_live_email ON app_user (tenant_id, email) WHERE deleted_at IS NULL. A full constraint over the same two columns burns the address permanently the first time someone deletes an account.
  2. Keep case-insensitivity in the type or the index, never in the application: CITEXT as given, or UNIQUE (tenant_id, lower(email)) as an expression index where the extension is unavailable. A case-sensitive unique column is exactly how two accounts for one human appear.
  3. For MySQL 8 the predicate has to move inside the key: add a discriminator column that is a constant 0 while the row is live and is set to user_id on delete, with UNIQUE (tenant_id, email, deleted_marker). Live rows share the constant and still collide; deleted rows differ from each other and stop colliding.
  4. State the NULL variant and its dependency: leaving the marker NULL for deleted rows also works, because a unique index treats NULLs as distinct — true in MySQL, and true in PostgreSQL only under the default NULLS DISTINCT, which PostgreSQL 15 lets you reverse. Check the polarity against the three existing deleted rows: constant-on-live is what preserves the collision you want, and reversing it silently admits duplicate live accounts.

Follow-up

  • A deleted account re-registers with the same address the next day. Do the old resource rows follow the new user_id, and how does the API keep the two principals apart?
  • How do you honour an erasure request while resource_revision.actor_user_id still references this table?

What are the four core pillars of Object-Oriented Programming, and how have you applied them in your projects?

Medium · Core Programming & Object-Oriented Conce

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 key difference between a class and a struct?

Medium · Core Programming & Object-Oriented Conce

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 conditional rendering directives like v-if and v-show (or framework equival

Medium · Web Technologies & Front-End Fundamental

Explain the difference between conditional rendering directives like v-if and v-show (or framework equivalents).

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 CSS stacking context, and how does z-index evaluation work?

Medium · Web Technologies & Front-End Fundamental

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 flexbox shorthand properties, and how do you layout responsive components?

Medium · Web Technologies & Front-End Fundamental

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?

Give a concise definition of a REST API and how HTTP methods map to actions.

Medium · Web Technologies & Front-End Fundamental

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?

What is semantic HTML, and why is it important for accessibility and structure?

Medium · Web Technologies & Front-End Fundamental

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 common Linux commands used for process management, file navigation, and environment configuration?

Medium · Systems, OS & Testing Fundamentals

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 test methodologies and frameworks do you use to ensure software reliability before deployment?

Medium · Systems, OS & Testing Fundamentals

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?

Describe your process for setting up unit tests and validating design patterns in desktop or embedded environm

Medium · Systems, OS & Testing Fundamentals

Describe your process for setting up unit tests and validating design patterns in desktop or embedded environments.

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?

Listing latency scales with page size, not with filters

Easy · n+1 · latency · query batching

The tenant listing endpoint reads resource filtered by tenant_id and status, ordered by updated_at DESC, and returns each row plus the owner's display name from app_user and the actor of that resource's latest resource_revision. p99 is 55 ms at 10 rows per page and 1.4 s at 200. Database telemetry shows 401 statements per request, each under 1 ms, and nothing in the slow-query log. Diagnose the cause and give the fix, stating the statement count per request and the p99 you expect afterwards.

Approach

  1. Read the counters before forming a theory. 401 statements for 200 rows is one driver query plus two per row, and sub-millisecond execution with an empty slow-query log rules out a bad plan. The time is round trips, which is why it is invisible in every per-query metric and scales with rows returned rather than with filter selectivity.
  2. Name the two per-row statements from their normalised text: a single-row app_user lookup by user_id, and a resource_revision lookup by resource_id ordered by version DESC LIMIT 1. Confirm by dropping those two response fields and watching the statement count fall to one. That locates the calls in the serialisation layer, not the repository.
  3. Check that the arithmetic accounts for the whole gap. Measure one round trip to the replica in isolation; 400 trips at roughly 3 ms of network plus 0.2 ms of execution is about 1.3 s on top of a 55 ms baseline, which matches. If the multiplication had fallen short, the N+1 would only be part of the story and you would keep looking.
  4. Batch both lookups. Collect owner_user_ids and resource_ids from the driver query, then issue WHERE tenant_id = $1 AND user_id = ANY($2) for the users, and PostgreSQL's SELECT DISTINCT ON (resource_id) ... WHERE resource_id = ANY($2) ORDER BY resource_id, version DESC for the latest revision, which the UNIQUE (resource_id, version) index serves directly. On an engine without DISTINCT ON, use a lateral join or a row_number window. Three statements per request at any page size.

Follow-up

  • The page size is capped at 200 today. What breaks first if it is raised to 2,000, and is it still this bug?
  • How do you stop the next N+1 from reaching production, given that no individual query is slow and the endpoint's tests pass?

Suggested practice checklist

Built from the rounds and topics Igt candidates report.

Day 1 — Map the Igt loop

  • Write out the reported sequence: Recruiter Screen, Technical Evaluation, Management Panel.
  • 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 C#

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

Deliverable: One timed worked example in C#.

Day 3 — Work .NET platform

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

Deliverable: One timed worked example in .NET platform.

Day 4 — Work REST APIs

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

Deliverable: One timed worked example in REST APIs.

Day 5 — Answer out loud: Core Programming & Object-Oriented Concepts

  • Answer aloud, timed: What are the four core pillars of Object-Oriented Programming, and how have you applied them in your projects?
  • Answer aloud, timed: What is the key difference between a class and a struct?

Deliverable: Spoken answers to 2 reported Core Programming & Object-Oriented Concepts question(s), under time.

Day 6 — Answer out loud: Web Technologies & Front-End Fundamentals

  • Answer aloud, timed: Explain the difference between conditional rendering directives like v-if and v-show (or framework equivalents).
  • Answer aloud, timed: What is the CSS stacking context, and how does z-index evaluation work?

Deliverable: Spoken answers to 2 reported Web Technologies & Front-End Fundamentals question(s), under time.

Day 7 — Answer out loud: Systems, OS & Testing Fundamentals

  • Answer aloud, timed: What are common Linux commands used for process management, file navigation, and environment configuration?
  • Answer aloud, timed: How do you approach multithreading and thread safety in your backend applications?

Deliverable: Spoken answers to 2 reported Systems, OS & Testing Fundamentals question(s), under time.

Behavioural preparation

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

Walk us through a recent project listed on your resume: what was your exact contribution, and what would you c

Medium · Behavioral & Past Experience

Walk us through a recent project listed on your resume: what was your exact contribution, and what would you change in retrospect?

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 when you experienced a major technical success and a major failure.

Medium · Behavioral & Past Experience

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 resolve internal disputes or technical disagreements with developers or QA testers?

Medium · Behavioral & Past Experience

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 work environments where requirements change or cross-team support is needed?

Medium · Behavioral & Past Experience

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?

Tell us about a time you had to learn a new tool, language, or platform quickly to deliver a project feature.

Medium · Behavioral & Past Experience

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?