Applied Research Associates · Software Engineer
Updated · 2026-10-02

Applied Research Associates Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Applied Research Associates (ARA) is a research and engineering firm. Candidates describe its project work as spanning defense, security and transportation, from simulations to infrastructure modeling. Software engineers are reported to sit in teams with scientists and engineers, writing code that analyzes data, models physical phenomena and runs as operational software. Candidates mention modern C++ simulations as well as maintenance of older systems, and C++ is the language most often named for the role, with C#, Python and MATLAB listed as useful on some teams.

This guide is for candidates applying to ARA as a Software Engineer, from new graduates to experienced hires. It covers the three reported rounds (Phone Screening, Technical Evaluations, Technical Presentation), the behavioral and technical questions candidates report, and a seven-day plan that spends most of its time on C++ and Java memory, object-oriented design, complexity, SQL joins, debugging, and the project you will present.

Candidates report three rounds spread over about 3-5 weeks: Phone Screening, Technical Evaluations and Technical Presentation. The pace is reported to vary with project urgency and location.

OOP (Object-Oriented Programming) conceptsInheritance and polymorphismModern C++ features

32 min read

Browse Software Engineer questions

See the practice prompts

16Practice promptsAcross five skill areas

The reported questions cluster around fundamentals rather than puzzles. Expect to explain smart pointers and what people mean by modern C++, the basic ideas of object-oriented programming, stack versus heap (including which one Java uses), when an O(n^2) approach can be a reasonable choice over O(log n), the difference between inner and outer joins, and which design patterns you know. Candidates also describe the Rule of 3/5 and comparisons between data structures such as a hash set and a tree-based set. Prepare each of these as a short spoken explanation with a concrete code example, because a definition alone does not show you can use the idea.

The work described for the role is software that serves scientists and engineers: simulations, data analysis and models of physical systems, plus maintenance of older code. That makes C++ ownership and lifetime, resource management and readable, documented code the most useful things to practise. If you have used C++14 or C++17 recently, pick one feature you can describe precisely (what it replaced, what it changed in your code), since a question asks for exactly that.

Two parts of the loop reward preparation you can do entirely on your own. The Technical Presentation asks you to take a panel through a previous project and defend your design choices, and the behavioral questions (a problem you solved, a project you care about, a conflict, asking for help when stuck, and any concerns about defense work) are all about your own history. Choose your presentation project early, because the same project can anchor several of those answers.

Candidates also describe debugging and logic problems solved on a shared screen or whiteboard without an IDE, including writing pseudo-code for something like a Fibonacci sequence. Practise reading short C++ and Java snippets on paper, saying what each line does, and naming the bug before you fix it.

01

Phone Screening

reported

Candidates report this as an initial screening call to check fit for the role. Little else is reported about its format, so treat it as a conversation about your background: the resume and college or work projects, why this kind of research-and-engineering work interests you, and the basics of the languages you list. Walk in with a short project pitch you can extend if asked, and keep C++ and OOP fundamentals fresh in case the conversation turns technical.

What to demonstrate

  • How clearly you summarize your background and projects
  • Fit for the role as candidates describe the screen
  • Basic command of the languages on your resume

How to prepare

  • Write and rehearse a two-minute summary of your resume that ends on the one project you would present to a panel.
  • Prepare a plain answer to the question about explaining your resume and your college projects, with one technical detail per project.
  • Review one-sentence answers on OOP, stack versus heap and smart pointers in case the call includes quick fundamentals.
  • Prepare questions to ask the recruiter about the next rounds and about which language the team uses.
Applied Research Associates Software Engineer candidate reports ↗
02

Technical Evaluations

reported

Candidates describe this stage as in-depth technical assessments that include coding challenges and evaluations. Reports of the loop's evaluation areas mention language internals, memory management, OOP principles, algorithm complexity, data-structure trade-offs, reading code for logic errors, writing pseudo-code and whiteboarding math or logic problems. Some candidates also report a take-home or live coding assessment depending on the role. Practise explaining while you write, and be ready to work without an IDE.

What to demonstrate

  • Working code and correct reasoning in coding challenges
  • Knowledge of memory management, OOP and complexity
  • Ability to find and explain logic errors in provided code
  • Pseudo-code that shows the algorithm independent of syntax

How to prepare

  • Drill the C++ memory topics: smart pointers, ownership, the Rule of 3/5, and stack versus heap, including what Java does differently.
  • Practise explaining the OOP basics (inheritance, polymorphism, encapsulation, abstraction) with a small class hierarchy you write yourself.
  • Compare a hash set with a tree-based set on lookup cost, ordering and memory, and be able to say when each fits.
  • Do timed paper exercises: write Fibonacci in pseudo-code and discuss its complexity, and sketch inner and outer joins on a whiteboard.
Applied Research Associates Software Engineer candidate reports ↗
03

Technical Presentation

reported

Candidates report that you present a previous project to a panel, showing technical depth and how you communicate. Reports describe slides with graphs and architecture, followed by questions in which you defend your design choices. Pick a project where your own contribution is clear, and structure the talk as problem, design, the obstacle you hit and how you got past it, and the outcome. Expect to explain why you chose your languages and frameworks and to know how any technology you name works underneath.

What to demonstrate

  • Ownership of a technical solution from concept to implementation
  • Communication of complex work to a panel
  • Justification of design and technology choices when questioned

How to prepare

  • Build a short deck with a problem statement, an architecture diagram, one or two graphs of results, and a slide on the biggest obstacle.
  • List every technology on your slides and write two sentences on how each works under the hood and why you chose it.
  • Rehearse the talk aloud for a colleague and collect the hardest questions about your design choices, then write answers.
  • Prepare an honest answer to the question about concerns working on defense or high-stakes technology, since it is a reported question.
Applied Research Associates Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Presenting a project as 'we did' without saying what you built

Mark on each slide what you personally designed, wrote or debugged. Prepare to explain your own module in detail, since the panel Q&A is about defending your design choices.

02

Naming a technology on your slides or resume that you cannot explain internally

For each language, framework or library you list, write two sentences on how it works under the hood (for C++, ownership and lifetime; for Java, where objects and references live) and why you chose it.

03

Giving textbook definitions of OOP, smart pointers or stack versus heap with no example

Attach a short code sketch to each answer: a base class with a virtual function for polymorphism, a unique_ptr transferring ownership, a local variable versus a new allocation. Then state a trade-off.

04

Going quiet when asked to debug or solve a problem without an IDE

Practise narrating on paper: say what each line does, state the invariant you expect, name the bug, then fix it. For pseudo-code tasks like Fibonacci, state the base cases and complexity first.

05

Giving a rehearsed or evasive answer to the question about defense and high-stakes work

Decide your honest position beforehand and be ready to explain it in a few sentences, including what you would want to know about a project's purpose. Do not claim facts about ARA you cannot support.

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

11 technical prompts0 include a worked solution

What are smart pointers, and what is modern C++?

medium
Technical Fundamentals and OOP

What are smart pointers, and what is modern C++?

Approach
  1. Define a smart pointer as an RAII object that owns a heap allocation and frees it in its destructor, so cleanup happens on every exit path, including exceptions, without a manual delete.
  2. std::unique_ptr: sole ownership, move-only (copying does not compile), and with the default deleter it is the size of a raw pointer. Create it with std::make_unique (C++14) and hand ownership on with std::move.
  3. std::shared_ptr: shared ownership through a control block holding a reference count that is updated atomically. The count is thread-safe; the pointed-to object is not. std::make_shared puts the object and control block in one allocation. std::weak_ptr observes without owning, and lock() returns an empty shared_ptr once the object is gone.
  4. Call modern C++ the C++11-and-later style: move semantics and rvalue references, auto, lambdas, range-for, nullptr, constexpr, then C++14 make_unique and generic lambdas, and C++17 std::optional, std::variant, std::string_view and structured bindings. In practice it means the rule of zero: owning members are smart pointers or containers, so the class needs no hand-written destructor.
  5. Name the pitfalls: two shared_ptrs that each point at the other leak because neither count reaches zero (break the cycle with weak_ptr), and building two separate shared_ptrs from one raw pointer deletes it twice. A raw pointer or reference is still fine as a non-owning observer.
Follow-up
  • When would you pick shared_ptr over unique_ptr, and what does it cost you?
  • Explain the rule of three and the rule of five, and how smart pointers let you follow the rule of zero instead.
  • How does weak_ptr break a parent-child reference cycle?

Explain the difference between stack memory and heap memory, and which one Java uses.

medium
Technical Fundamentals and OOP

Explain the difference between stack memory and heap memory, and which one Java uses.

Approach
  1. Stack: each thread has its own stack of frames. Locals are allocated when a function is entered and freed automatically when it returns (LIFO), so allocation is a pointer adjustment and the memory stays cache-friendly. The size is limited, so very deep recursion overflows it.
  2. Heap: memory allocated at runtime whose lifetime is not tied to a scope (new/delete or smart pointers in C++, garbage collection in Java). It is shared by all threads, slower to allocate, can fragment, and is where memory leaks and use-after-free bugs come from in C++.
  3. Java uses both. Every thread's stack holds frames with local primitives and object references, and every object and array lives on the heap, which the garbage collector reclaims once the object is unreachable. HotSpot's escape analysis can scalar-replace objects that never escape a method, but the language model is still that objects live on the heap.
  4. Contrast this with C++, where an object can live on the stack and its destructor runs at scope exit (RAII). Mention the classic C++ bug of returning a pointer or reference to a local, which leaves it dangling.
  5. Name the failure modes: StackOverflowError against OutOfMemoryError in Java, and stack overflow against leaks or heap corruption in C++.
Follow-up
  • In Java, where do a local int and a local reference to a new object live, and what happens to each when the method returns?
  • How does the garbage collector decide an object can be freed?
  • Why might you allocate a large buffer on the heap rather than the stack in C++?

In what case would you use an O(n^2) runtime over O(log(n))?

medium
Technical Fundamentals and OOP

In what case would you use an O(n^2) runtime over O(log(n))?

Approach
  1. Start by saying that Big-O describes how cost grows as n grows. It drops constants and lower-order terms, so for small n the asymptotically worse algorithm can be faster in wall-clock time.
  2. Use the standard example: insertion sort is O(n^2) but has tiny constants, works in place, is stable and runs in O(n) on nearly sorted input. That is why common std::sort implementations (introsort) switch to insertion sort for small partitions.
  3. An O(log n) lookup is never free. Binary search needs sorted data and a balanced tree needs to be built, which costs O(n log n). If you query only once or twice, a plain scan is cheaper overall, and a contiguous array scan often beats pointer-chasing in a tree for small n because of cache locality.
  4. Give the other reasons: simpler code that is easier to verify and maintain, lower memory use (O(1) extra space), and worst-case predictability. Then say how you would decide: measure with realistic sizes and find the crossover point instead of guessing.
  5. State the risk: if n can grow, the quadratic choice becomes the bottleneck. Document the assumed input size or add a size check that switches algorithms.
Follow-up
  • How would you find the input size where the faster asymptotic algorithm starts to win?
  • Quicksort is O(n^2) in the worst case. Why is it still widely used, and how do implementations guard against that worst case?
  • What changes if this code runs on a system with strict timing limits?

Seven days built around the three reported rounds: the C++ and Java fundamentals the technical stage covers, the project you will present, and the behavioral questions candidates report. Each day ends with something you can show.

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 presentation project
  • Write the three reported rounds (Phone Screening, Technical Evaluations, Technical Presentation) and, beside each, what you need ready for it.
  • List your past projects and pick the one you will present to a panel; note your own contribution, the architecture and one obstacle you overcame.
  • Write a two-minute resume summary that ends on that project.

Deliverable: A one-page loop map, the chosen project with its three key points, and a written two-minute resume summary.

Practice prompt ↗
02C++ memory and smart pointers; stack versus heap
  • Write short examples with unique_ptr, shared_ptr and weak_ptr, including a reference cycle and how weak_ptr breaks it, and explain what modern C++ changed compared with raw new and delete.
  • Write a small class that owns a buffer and implement the Rule of 3, then the Rule of 5; note when the Rule of 0 applies.
  • Explain stack versus heap in C++, then what Java does (objects on the heap, references and primitive locals on the stack) and how garbage collection differs from manual ownership.

Deliverable: Working code for the smart-pointer and Rule of 3/5 examples, and a written 60-second spoken answer each for smart pointers and stack versus heap.

Practice prompt ↗Practice prompt ↗
03OOP and design patterns
  • Write a small class hierarchy that shows encapsulation, abstraction, inheritance and polymorphism with a virtual function, and note why a base class needs a virtual destructor.
  • Pick four design patterns (for example factory, observer, strategy and singleton), sketch each in a few lines, and note a downside of each.
  • Record yourself explaining the basic OOP ideas and two patterns without notes.

Deliverable: A hierarchy with working code, four pattern sketches with one trade-off each, and one recorded spoken answer.

Practice prompt ↗Practice prompt ↗
04Complexity, data structures, SQL joins and modern C++
  • Write three reasons an O(n^2) approach can beat an O(log n) one (small n, tiny constants, no preprocessing or index available, simpler and safer code) and test one with a quick benchmark.
  • Compare a hash set with a tree-based set on lookup cost, ordering, memory and worst case, and write when you would pick each.
  • Using two small tables, write inner, left, right and full outer join queries and note which rows each keeps.
  • Choose one C++14/17 feature you have used (for example auto, lambdas, structured bindings, optional or make_unique) and write how it changed your code.

Deliverable: A benchmark result, a hash-versus-tree comparison table, four join queries with outputs, and a written paragraph on the C++14/17 feature.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
05Debugging and pseudo-code without an IDE
  • Print three short C++ or Java snippets with a logic error (off-by-one, dangling reference, integer overflow) and find each by reading, saying aloud what every line does.
  • Write pseudo-code for Fibonacci in recursive, memoized and iterative forms and state the complexity of each.
  • Write a short account of a bug you debugged, in order: symptom, reproduction, hypotheses, the evidence that confirmed the cause, the fix.

Deliverable: Three annotated bug findings, three Fibonacci pseudo-code versions with complexities, and one written debugging story.

Practice prompt ↗
06Build and rehearse the project presentation
  • Build the deck: problem statement, architecture diagram, one or two graphs of results, the obstacle slide, and the outcome.
  • List every technology on the slides and write how each works underneath and why you chose it.
  • Present aloud to a friend and write down the five hardest questions about your design choices, with answers.
  • Rehearse your answers to the questions about a problem you solved and a project you care about.

Deliverable: A finished slide deck, a technology-justification list, and written answers to five hard questions.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Behavioral answers and a full mock
  • Write and say aloud your answers to the internal project conflict question and the question about asking for help when stuck, using situation, action and result.
  • Decide your honest answer on working on defense or high-stakes technology and say it aloud until it takes under a minute.
  • Run one mock loop: a two-minute resume summary, three fundamentals questions drawn at random from days 2 to 4, and your presentation opening.

Deliverable: Three polished behavioral answers and a mock-loop self-review listing what to fix.

Practice prompt ↗Practice prompt ↗Practice prompt ↗

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

The behavioral questions candidates report for this role ask about your own history: a problem you solved, a project you care about, a conflict inside a project, whether you ask for help when stuck, and how you feel about defense or high-stakes work. Candidates also describe presenting a project and answering questions about it, so the same stories do double duty. Prepare each with the situation, your own action in the first person, and a result you can point to.

Describe a problem that you solved at a previous job.

medium
Behavioral and Soft Skills

Describe a problem that you solved at a previous job.

Approach
  1. Choose a technical problem where the cause was not obvious, such as a crash, a wrong numerical result or a slow routine, and where the decision was yours. A story about following a ticket shows little.
  2. Structure it as situation, constraint, options you weighed, the step you took and the measured result. Spend most of the time on how you narrowed the cause (reproduction, logging, bisecting commits, a minimal test) and why you rejected the other options.
  3. State your own part in the first person even if a team worked on it. Say 'I wrote the failing test and traced it to an uninitialized buffer', not 'we fixed it'.
  4. End with evidence the fix worked (a test now passing, a timing before and after, a defect that stopped recurring) and one thing you would do differently.
Follow-up
  • What else did you consider, and why did you rule it out?
  • How did you confirm your change fixed the problem and did not just hide it?
  • What would you do differently if the same problem came up again?

Tell me about a project you have worked on that you care about.

medium
Behavioral and Soft Skills

Tell me about a project you have worked on that you care about.

Approach
  1. Pick a project you can discuss at three levels: why it mattered to you, how it was built, and what you would change. The answer is also practice for presenting a project to a panel, so choose one with real technical content.
  2. Open with the problem it solves and your role in two sentences, then give the architecture in plain terms: main components, language and why, and one design decision you made between alternatives.
  3. Show why you care with specifics rather than enthusiasm: something you learned, a hard part you stuck with, or a result you can point to. Include a number or a working demo if you have one.
  4. Avoid a project you cannot defend. If you name a library or algorithm, be ready to explain how it works, because the follow-up will usually go there.
Follow-up
  • Why did you choose that language or framework over the alternatives?
  • What was the hardest technical decision, and what would you change now?
  • How would the design change if the input were ten times larger?

Describe one time you had an internal project conflict and how did you address it.

medium
Behavioral and Soft Skills

Describe one time you had an internal project conflict and how did you address it.

Approach
  1. Choose a real internal disagreement about the work, such as an interface design, how to split tasks, a testing standard or a deadline trade-off, rather than a personality clash.
  2. Describe both positions fairly, in the other person's terms. A story where the other side is plainly wrong shows poor judgment.
  3. Show how you moved from opinion to evidence: a small prototype, a benchmark, a test case or a code-review thread, and if needed a conversation with a lead or the person who owned the requirement.
  4. Give the outcome, including the case where you were the one who changed your mind, and say how the working relationship stood afterward. Do not claim there has never been a conflict.
Follow-up
  • What would you have done if the other person still disagreed after the evidence?
  • Did you ever change your own position during the conflict?
  • How did the team handle the same kind of disagreement afterward?

Are you comfortable asking questions when you're stuck?

medium
Behavioral and Soft Skills

Are you comfortable asking questions when you're stuck?

Approach
  1. Answer yes, then show the habit behind it. Describe a short routine: reproduce the problem, read the documentation or source, try one or two hypotheses, and then ask.
  2. Give a concrete example of asking well: a message stating what you were trying to do, what you saw, what you already tried and the specific thing you need. Name who you asked and how the answer changed your next step.
  3. Say what you did with the answer, such as adding a note to the project documentation or a test, so the next person does not hit the same wall.
  4. Do not claim you never get stuck, and do not describe struggling silently until the deadline. Both read as a risk on a team that relies on code review and written documentation.
Follow-up
  • How long do you try on your own before asking, and what decides that?
  • Tell me about a time a question you asked turned out to be unnecessary.
  • How do you handle being asked a question you cannot answer yourself?

Since we develop systems for sensitive applications, do you have any concerns working on technology that could

medium
Behavioral and Soft Skills

Since we develop systems for sensitive applications, do you have any concerns working on technology that could be used for defense or high-stakes operations?

Approach
  1. This asks for your own position, so there is no scripted right answer. Decide what you actually think before the interview, and answer plainly.
  2. If you are comfortable, say why with specifics: you understand the work is engineering for defense, security and similar settings, you care about correctness and safety in that kind of software, and you would want to know a project's purpose before joining it.
  3. If you have reservations, state them clearly and narrowly, such as the kinds of end use you would not work on, instead of a general speech. A precise limit is easier to discuss than a vague worry.
  4. Either way, mention how you would handle it in practice: ask about the project's purpose early, raise a concern with your lead if the purpose changes, and keep your work documented and reviewable. Do not claim facts about ARA's programs that you do not know.
Follow-up
  • Would you want to know the end use of a project before accepting it?
  • What would you do if a project's purpose changed after you started?
  • Is there a kind of work you would decline, and why?
  • 01

    Describe a problem that you solved at a previous job.

  • 02

    Tell me about a project you have worked on that you care about.

  • 03

    Describe one time you had an internal project conflict and how did you address it.

  • 04

    Are you comfortable asking questions when you're stuck?

  • 05

    Do you have any concerns working on technology that could be used for defense or high-stakes operations?

  • 06

    Please explain your resume and your college projects.

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

Start with the topics candidates report: smart pointers and modern C++, the Rule of 3/5, OOP basics, stack versus heap in C++ and Java, Big O trade-offs, SQL joins and design patterns. For each, write a short code example and a spoken answer that ends on a trade-off. Then practise reading code for bugs without an IDE.

Applied Research Associates Software Engineer candidate reports ↗
What are the rounds in the Applied Research Associates Software Engineer loop?

Candidates report three rounds over about 3-5 weeks: Phone Screening, Technical Evaluations (coding challenges and in-depth technical assessments) and Technical Presentation, in which you present a previous project to a panel. Timing is reported to vary with project urgency and location, so keep in touch with your recruiter.

PracHub Software Engineer practice ↗
Will I need to do a coding test?

Candidates report coding challenges in the Technical Evaluations round, and some also mention a take-home or live coding assessment depending on the role. Ask your recruiter which applies. Whatever the format, write readable code with comments where the logic is not obvious, and state complexity and edge cases.

Applied Research Associates Software Engineer candidate reports ↗
Which languages should I know?

Candidates describe C++ as the language most wanted for the role, with C#, Python or MATLAB useful on some teams. The reported questions also touch Java (where stack and heap are used) and SQL (inner versus outer joins). If C++ is your strongest language, use it for examples. If it is not, know the memory-ownership ideas well enough to explain them in your own language.

PracHub Software Engineer practice ↗
How do I prepare for the project presentation?

Choose a project where your own contribution is clear. Build slides with the problem, an architecture diagram, graphs of results and the biggest obstacle you overcame, and rehearse the questions about your design choices. Be ready to explain how every technology you name works underneath and why you picked it over alternatives.

PracHub Software Engineer practice ↗
How should I answer the question about defense or high-stakes work?

It is a question about your own view, so answer honestly and specifically. If you are comfortable, say why and mention that you would want to understand a project's purpose. If you have limits, state them precisely and calmly. Either way, avoid claims about ARA's programs that you cannot support.

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.