A Software Engineer at Leonardo DRS operates at the intersection of complex defense technology and mission-critical engineering. You will be responsible for developing robust, high-performance software solutions that power advanced systems, ranging from signal processing and radar technologies to embedded control systems. Your work directly influences the reliability and effectiveness of hardware that supports defense and aerospace operations globally. This role is not merely about writing code; it is about architectural thinking and understanding how software interacts with physical hardware components like FPGAs, sensors, and communication systems. You will likely work within multi-disciplinary teams, collaborating with systems engineers, hardware designers, and project leads to solve high-stakes technical problems. While the pace can be demanding, the work offers the opportunity to see your contributions integrated into tangible, real-world systems that define the future of defense technology. ##### Tip Be prepared for a high-intensity environment. Some teams operate under strict, mission-driven deadlines, and a "no-nonsense" approach to engineering is common in many departments.
Phone Screen
reportedInitial contact to assess candidate's background and fit for the role.
What to demonstrate
- Initial contact to assess candidate's background and fit for the role
- Depth in Embedded systems programming
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
reportedDeeper technical assessment to evaluate skills and knowledge.
What to demonstrate
- Deeper technical assessment to evaluate skills and knowledge
- Depth in Embedded systems programming
How to prepare
- Answer aloud and timed: Can you explain the Nyquist limit and its implications for our systems?
- Answer aloud and timed: How would you handle signal-to-noise ratio or anomaly detection in radar data?
Panel Interview
reportedOn-site or virtual interview with multiple team members to assess technical and interpersonal skills.
What to demonstrate
- On-site or virtual interview with multiple team members to assess technical and interpersonal skills
- Depth in Embedded systems programming
How to prepare
- Answer aloud and timed: What is your experience with embedded programming and real-time operating systems like VxWorks?
- Answer aloud and timed: Describe in detail how you have solved a difficult technical issue in a past project.
PracHub editorial advice for the preparation topics above.
Know your resume inside out
Every bullet point is fair game for a deep-dive question.
Be prepared to present
Some teams may ask you to present on a project or a specific technical challenge you have overcome.
Ask insightful questions
Use the interview to learn about the team’s current challenges. It demonstrates engagement and strategic thinking.
Stay professional throughout
Even in "laid back" interviews, maintain a high level of professionalism. Your conduct is being evaluated alongside your code.
Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.
Explain the components or a block diagram of a superheterodyne receiver and how it works in different variants
Explain the components or a block diagram of a superheterodyne receiver and how it works in different variants.
Approach
- Say what the runtime actually does before reasoning about the code.
- Name what is shared across threads and what owns each piece of state.
- Identify the window where an invariant is briefly untrue.
- 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?
Here is a CAD drawing; can you deduce its function and describe how it works?
Here is a CAD drawing; can you deduce its function and describe how it works?
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- 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?
If you were tasked with optimizing a system for low latency, where would you start?
If you were tasked with optimizing a system for low latency, where would you start?
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- 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?
How do you approach learning a new, complex technology or system when you are given limited time?
How do you approach learning a new, complex technology or system when you are given limited time?
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- 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?
Replace offset paging on the resource feed with keyset
resource holds resource_id, tenant_id, owner_user_id, title, body_ref, version, status ('draft','active','archived','deleted'), created_at, updated_at, deleted_at, with an index on (tenant_id, status, updated_at DESC, resource_id DESC). The listing endpoint returns active resources for one tenant, newest update first, 50 per page, today with LIMIT 50 OFFSET n. Tenants reach page 400 and rows are created while they read. Write the keyset query, define what the cursor carries and how it is encoded, and say which part of the index each predicate uses. Assume PostgreSQL 16.
Approach
- Name the two failures separately. OFFSET 20000 makes the server produce and discard 20,000 rows, so page cost grows with depth rather than with page size. Independently, any write that changes how many rows sort above the offset moves the window between two fetches, and the direction decides which anomaly you get: an insert lands at the head of updated_at DESC and pushes already-returned rows down past the boundary, so they are returned a second time; a delete above the offset, or a row whose updated_at is bumped above the cursor, pulls rows up and one is never returned at all. Nothing in the response reveals either.
- Write the seek: WHERE tenant_id = $1 AND status = 'active' AND (updated_at, resource_id) < ($2, $3) ORDER BY updated_at DESC, resource_id DESC LIMIT 50. The row-value comparison is one index range rather than a disjunction, and both columns are NOT NULL, which is what makes that comparison well defined.
- Map each predicate onto the index: tenant_id and status are equality on the leading columns, (updated_at, resource_id) is the range, and the ORDER BY matches the index order so no Sort node appears and the scan stops after 50 rows. The DESC in the definition only matters for mixed directions — a plain ascending btree on the same columns is read backwards for this query.
- Put both sort columns in the cursor and nothing the client can tamper with into another tenant: base64 of (updated_at, resource_id), validated server-side, with tenant_id taken from the principal.
Follow-up
- The client asks for 'jump to page 400'. What do you offer instead, and what does the honest version cost?
- Sort order becomes user-selectable across four columns. How many indexes is that, and which would you refuse to add?
Denormalise tenant onto revisions and backfill it live
resource_revision (revision_id, resource_id, version, actor_user_id, change_kind, patch, request_id, created_at) has 400M rows and no tenant column; tenant_id lives only on resource. Two reads need it: a tenant-scoped audit feed ordered by created_at DESC, and an offboarding purge. Both join back to resource today. Justify adding tenant_id to resource_revision against those two reads, name the anomaly the copy introduces and the constraint that prevents it, then give the ordered migration for a live table taking 1.2k writes/second — the lock each step takes, how the backfill is batched, and where each step stops being reversible. PostgreSQL 16.
Approach
- Justify from the access path rather than from taste. Without the column, the audit feed either scans resource_revision by created_at and discards other tenants' rows, or resolves the tenant's resource_ids first and probes with them — both proportional to the tenant's whole history rather than to one page. With (tenant_id, created_at DESC, revision_id DESC) it is a seek that stops at 50 rows, and the purge becomes a ranged delete instead of a join.
- Name the cost exactly: a second copy of a fact can disagree with the first. Make the disagreement unwritable rather than documented — add UNIQUE (resource_id, tenant_id) on resource so it can serve as a foreign-key target, then FOREIGN KEY (resource_id, tenant_id) REFERENCES resource (resource_id, tenant_id) on the revision table. A revision can then only ever carry its parent's tenant.
- Step one, expand: ALTER TABLE resource_revision ADD COLUMN tenant_id BIGINT NULL, with no default, so it is a catalogue change and no rewrite. It still needs ACCESS EXCLUSIVE for an instant, and that instant queues behind the longest open transaction on the table while every later query queues behind it — set lock_timeout to 2s and retry rather than wait.
- Step two, dual-write: deploy the writer that populates tenant_id on every new revision while reads still use the join. Reversible by redeploying the previous build, because nothing reads the column yet.
Follow-up
- The backfill is half finished and a rollback is required. What state is the table in, and what does the previous build do with a half-populated column?
- How do you verify the backfill actually finished, given rows are still being inserted while it runs?
What happens in the frequency domain when you mix signals?
What happens in the frequency domain when you mix signals?
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?
Can you explain the Nyquist limit and its implications for our systems?
Can you explain the Nyquist limit and its implications for our systems?
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 handle signal-to-noise ratio or anomaly detection in radar data?
How would you handle signal-to-noise ratio or anomaly detection in radar data?
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?
Edge instances grow 400 MB per hour until the nightly restart
Edge API instances start at 700 MB resident and grow about 400 MB/hour; a nightly rolling restart has hidden it for weeks. Growth continues unchanged when request rate halves overnight, p99 degrades in the last hours before an instance is recycled, and heap used immediately after a forced full GC rises monotonically. The service holds no product state. Name the discriminating measurement that separates the plausible causes, give the most likely cause, and give the fix and how you would verify it.
Approach
- Separate resident memory from live heap first, because they fail differently. Resident size can grow from fragmentation, native buffers or thread stacks while the heap is flat; heap used after a full GC rising monotonically is the measurement that says objects are reachable and not being released. You already have it, so this is retention, not fragmentation, and that closes off half the candidate list.
- Use the rate's independence from traffic as the discriminator. Growth that continues at half the request rate rules out per-request objects that are merely slow to collect and points at a structure that grows with distinct values observed rather than with call volume. Write the candidates that have that property: a metrics registry keyed on a high-cardinality label, an unevicted cache, an interner, a per-key lock map.
- Take two heap snapshots an hour apart and diff by retained size, reading the dominator tree, not by allocation count or instance count. Expect one root holding a map with millions of entries, then follow the reference chain to the code that inserts and never removes. Allocation profilers point at churn, which is the wrong signal here.
- The candidate that fits this service is an observability label carrying an identifier, such as a request path recorded before templating so that /v1/resources/48213 becomes its own metric series. That grows with distinct ids seen, is independent of rate, and explains the late p99 degradation, since GC cost rises with the size of the live set.
Follow-up
- Post-GC heap is now flat but resident size still creeps. What are you looking at, and does it matter?
- How would you have detected this before an OOM, given the nightly restart masked the trend?
Built from the rounds and topics Leonardo DRS candidates report.
Prepare, practise & reflect
One practical outcome each day. Spend longer where you need it.
0 / 7 done01Map the Leonardo DRS loop
- Write out the reported sequence: Phone Screen, Technical Evaluation, Panel Interview.
- 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.
02Work Embedded systems programming
- Spend the session on Embedded systems programming, which Leonardo DRS candidates report being tested on.
- Write one worked example in Embedded systems programming and time yourself on it.
Deliverable: One timed worked example in Embedded systems programming.
03Work VxWorks (real-time OS)
- Spend the session on VxWorks (real-time OS), which Leonardo DRS candidates report being tested on.
- Write one worked example in VxWorks (real-time OS) and time yourself on it.
Deliverable: One timed worked example in VxWorks (real-time OS).
04Work Signal processing fundamentals
- Spend the session on Signal processing fundamentals, which Leonardo DRS candidates report being tested on.
- Write one worked example in Signal processing fundamentals and time yourself on it.
Deliverable: One timed worked example in Signal processing fundamentals.
05Answer out loud: Technical and Domain Knowledge
- Answer aloud, timed: Explain the components or a block diagram of a superheterodyne receiver and how it works in different variants.
- Answer aloud, timed: What happens in the frequency domain when you mix signals?
Deliverable: Spoken answers to 2 reported Technical and Domain Knowledge question(s), under time.
06Answer out loud: Behavioral and Experience-Based
- Answer aloud, timed: Describe in detail how you have solved a difficult technical issue in a past project.
- Answer aloud, timed: Tell me about a time you had to work with a difficult group member.
Deliverable: Spoken answers to 2 reported Behavioral and Experience-Based question(s), under time.
07Answer out loud: Problem Solving
- Answer aloud, timed: Here is a CAD drawing; can you deduce its function and describe how it works?
- Answer aloud, timed: If you were tasked with optimizing a system for low latency, where would you start?
Deliverable: Spoken answers to 2 reported Problem Solving question(s), under time.
Expand any day for tasks and deliverables. Your progress is saved on this device.
Behavioural rounds judge the decision you made and what it cost.
What is your experience with embedded programming and real-time operating systems like VxWorks?
What is your experience with embedded programming and real-time operating systems like VxWorks?
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?
Describe in detail how you have solved a difficult technical issue in a past project.
Describe in detail how you have solved a difficult technical issue in a past project.
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 work with a difficult group member.
Tell me about a time you had to work with a difficult group member.
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 tight deadlines and high-pressure work environments?
How do you handle tight deadlines and high-pressure work environments?
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?
Walk me through a project on your resume that you are particularly proud of.
Walk me through a project on your resume that you are particularly proud of.
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?
- 01
What is your experience with embedded programming and real-time operating systems like VxWorks?
- 02
Describe in detail how you have solved a difficult technical issue in a past project.
- 03
Tell me about a time you had to work with a difficult group member.
- 04
How do you handle tight deadlines and high-pressure work environments?
How difficult are the technical questions?
Difficulty varies, but they are generally "fair" and focused on your resume. Be ready to explain your past projects in detail, as that is where most technical grilling occurs.
Leonardo DRS Software Engineer candidate reports ↗What is the company culture like?
Most candidates describe it as friendly and relaxed, yet professional. It is a place where you are expected to be a self-starter who can handle the rigors of engineering without constant supervision.
Leonardo DRS Software Engineer candidate reports ↗How long does the hiring process take?
It can be slow. While some processes move quickly, others take several weeks or even months. Stay proactive, but be patient with administrative timelines.
Leonardo DRS Software Engineer candidate reports ↗Should I prepare for behavioral questions?
Yes, but keep them professional. Focus on your experience with teamwork, handling difficult technical challenges, and your interest in the mission of Leonardo DRS. ##### Tip If you are interviewed by a panel, address your answer to the person who asked the question, but make eye contact with the rest of the panel to keep them engaged.
Leonardo DRS Software Engineer candidate reports ↗What topics does Leonardo DRS test in interviews?
Leonardo DRS interviews most often cover Stakeholder Management, Process Improvement, Forecasting, Problem Solving, and Program Management. The exact emphasis depends on the specific role you apply for.
Leonardo DRS Software Engineer candidate reports ↗Sources & methodology 3 sources ↗
No official company page is cited. Rounds and questions come from candidate reports and PracHub editorial material; each source shows the date it was read.
- 01Leonardo DRS Software Engineer candidate reports ↗
Company-reported rounds, questions and FAQ.
Candidate reports · Accessed 2026-09-22 - 02PracHub Software Engineer practice ↗
PracHub practice material, not company-reported.
PracHub page · Accessed 2026-09-22 - 03PracHub preparation framework ↗
PracHub preparation guidance.
PracHub page · Accessed 2026-09-22