A+E Group · Software Engineer
Updated · 2026-10-02

A+E Group Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Candidates describe A+E Group as an architecture and engineering setting where software engineers build for civil, mechanical and architectural designers. The reported work is internal tooling: custom plugins, scripts that automate repetitive design tasks, integrations between engineering platforms, and code that handles large design datasets. Candidates also mention dashboards and quality-assurance scripts for design output, and describe the work as reducing manual tasks for designers.

This guide is for Software Engineer candidates preparing for A+E Group. It covers the three reported stages, the fifteen reported questions (five coding, five system design, five behavioral) and a seven-day plan. The requirements candidates describe list C#, C++ or Python, design patterns, Git and SQL, with 3+ years of experience typical and AEC or CAD/BIM exposure (Revit, AutoCAD, Civil 3D) as a bonus rather than a requirement.

Candidates report three stages over roughly three to five weeks: a Recruiter Screen, a Technical Assessment built on coding exercises, and Panel Interviews with software engineering leaders and stakeholders from design teams. Stages can vary by team and seniority.

Software EngineeringRequirements AnalysisDesign Thinking

35 min read

Browse Software Engineer questions

See the practice prompts

18Practice promptsAcross five skill areas

The reported work sits between software and physical design. Candidates describe plugins, automation scripts, integrations and tooling for designers, with large design datasets and engineering file formats as the raw material. That shapes the coding questions: the reported set pairs classic exercises (reverse a linked list, find the top three error codes in a log) with ones that borrow the domain (overlapping 2D bounding boxes, flattening a nested parts hierarchy, searching spatial coordinates). Candidates also report scenarios such as routing a pipe along the shortest path through a 3D grid while avoiding exclusion zones, and speeding up a script that takes ten minutes to batch-process mechanical design files. Practise the classics until they are automatic, then practise saying how the same code behaves on a very large input.

The system design questions are mostly about internal platforms: uploading and validating large design files from remote engineers, a REST API feeding a project dashboard, a schema for parts, suppliers and project usage, availability for a tool designers use daily, and moving legacy project data from an on-premise server to a cloud database. Candidates also report scenario prompts such as syncing a civil engineering modelling tool with a project dashboard and logging and recovering errors in a distributed internal tool. Prepare to cover data flow, failure handling and data integrity for each of them.

The behavioral set is about working with people who are not software engineers: explaining a technical issue to a non-technical stakeholder, building a tool for a team's workflow problem, handling shifting requirements, disagreeing with a senior engineer, and a failed project. Because the panel is reported to include stakeholders from design teams, prepare stories where the user was a designer or another domain expert, and be ready to state the operational effect of your code, not just the technology.

01

Recruiter Screen

reported

Candidates describe the first stage as a conversation with a recruiter to assess fit for the role. Treat it as the place to line up your background with the requirements candidates describe: C#, C++ or Python, Git, SQL, design patterns, and any exposure to AEC tools such as Revit, AutoCAD or Civil 3D. A concise account of what you built, for whom and with what result sets up the later stages, and it is the right moment to ask which language and stack the team uses and what the technical stage looks like.

What to demonstrate

  • Fit for the role, as candidates describe the screen
  • How your background lines up with the role's listed requirements (C#, C++ or Python, Git, SQL, design patterns)

How to prepare

  • Write a two-minute walk through your career that names the language (C#, C++ or Python), SQL and Git work you have done, and the user each project served.
  • Prepare one example of software you built for non-software users, since the role is described as working with designers and engineers.
  • List questions to ask the recruiter: which stack the team uses, how the technical stage is run, and whether the team is remote, in the office or mixed.
A+E Group Software Engineer candidate reports ↗
02

Technical Assessment

reported

Candidates describe this stage as an evaluation of baseline technical competence through coding exercises. The reported coding questions are good practice material for it: overlapping 2D bounding boxes, a script that returns the top three error codes from a large log, flattening a nested JSON parts hierarchy, optimising a coordinate search over a large spatial array, and reversing a linked list with its complexity. Practise in the language you will use, write runnable code, and say complexity out loud for every solution.

What to demonstrate

  • Working, readable code for realistic data-handling problems
  • Choice of data structure and awareness of time and memory cost on large inputs

How to prepare

  • Write the bounding-box overlap, the log top-three counter and the iterative JSON flatten from a blank file, with a small test table for each.
  • For the spatial search, outline a ladder of approaches: linear scan, sort plus binary search, grid or hash bucketing, then k-d tree or quadtree, and say when each pays off.
  • Practise string handling, file parsing and basic object-oriented design in your chosen language.
  • Build the habit of covering edge cases before you call a solution done: empty input, malformed log lines, touching or zero-area boxes, and very deep nesting.
A+E Group Software Engineer candidate reports ↗
03

Panel Interviews

reported

Candidates describe the final stage as panel interviews with software engineering leaders and stakeholders from design teams. The mix of audiences suggests preparing two registers: technical depth for engineers and plain-language explanation for designers. The reported system design questions (design file upload and validation, a metadata REST API, a parts and suppliers schema, availability, legacy migration) and the behavioral questions are the practice material for this kind of stage.

What to demonstrate

  • System design reasoning: components, data flow, failure handling and integrity
  • Ability to explain technical decisions to people from a different engineering discipline
  • Collaboration experience with domain experts, conflict and changing requirements

How to prepare

  • Sketch a design for each of the five reported design questions on one page: components, data model, failure paths and what you would build first.
  • Rehearse explaining one of those designs twice, once to an engineer and once to a mechanical designer, without shared jargon.
  • Prepare five stories covering the reported behavioral prompts, each with a measurable result and a named non-software user.
A+E Group Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Solving the bounding-box overlap for the obvious case only

State the convention first (axis-aligned, min and max corners) and compare each axis separately: two boxes overlap when both axis intervals overlap. Decide aloud whether touching edges count, and test containment, identical boxes, zero-width boxes and swapped corners.

02

Loading the whole error log into memory or sorting every count to find the top three

Stream the file line by line, count codes in a dictionary, and select the top three with a size-three heap or a partial selection. Say what you do with malformed lines and with ties.

03

Flattening a nested parts hierarchy with plain recursion and no rules for keys, arrays or depth

Decide the key format (path joined with a separator), how list items are indexed, what empty objects produce and how key collisions are handled. Use an explicit stack if depth can be large, and mention cycles if the data is not guaranteed to be a tree.

04

Answering the design-file upload or legacy migration question with one happy-path pipeline

Cover resumable or chunked upload, validation before a file is marked usable, concurrent uploads of the same file, versioning, and for the migration a dry run, row-count and checksum comparison, and a rollback plan.

05

Telling behavioral stories with no non-software user and no result

For each story name the user (ideally a designer or other domain expert), the problem in their terms, what you built or decided and a measurable outcome, then keep technical detail to what the listener needs.

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

13 technical prompts0 include a worked solution

Write a program to detect if two 2D bounding boxes overlap.

medium
Coding and Algorithmic Problem Solving

Write a program to detect if two 2D bounding boxes overlap.

Approach
  1. I pin the representation first: axis-aligned boxes as (xmin, ymin, xmax, ymax). If the caller passes two arbitrary corners, I normalise them with min/max before comparing anything.
  2. Two boxes overlap unless one lies entirely to one side of the other, so the test is a.xmin < b.xmax and b.xmin < a.xmax and a.ymin < b.ymax and b.ymin < a.ymax. That is O(1) time and O(1) space.
  3. I ask whether boxes that only touch count as overlapping. That choice decides whether I use < or <=. Zero-area boxes (a point or a line) need the same decision.
  4. With floating-point coordinates I compare against a small epsilon tolerance so that shared edges produced by rounding do not flip the result.
  5. To get the overlap area as well, I compute max(0, min(a.xmax, b.xmax) - max(a.xmin, b.xmin)) and the same in y, then multiply. A positive product means the boxes overlap.
Follow-up
  • How would you find every overlapping pair among n boxes faster than O(n^2)? (Sweep and prune sorted on xmin, a uniform grid, or an R-tree.)
  • What changes if the boxes can be rotated? (Use the separating axis theorem on the edge normals of both rectangles.)
  • How would you extend the check to 3D bounding boxes?

Given a large log file of system errors, write a script to parse the file and return the top three most freque

medium
Coding and Algorithmic Problem Solving

Given a large log file of system errors, write a script to parse the file and return the top three most frequent error codes.

Approach
  1. I stream the file line by line rather than loading it, so memory depends on the number of distinct codes and not on file size. I extract each code with one precompiled regex and count malformed lines separately instead of crashing.
  2. I count with a hash map (collections.Counter in Python), then take the top three with a size-3 heap (heapq.nlargest or Counter.most_common(3)). That is O(N) over the lines plus O(U log 3) over U distinct codes, versus O(U log U) for a full sort.
  3. In C# the same plan is File.ReadLines (which streams lazily) into a Dictionary<string,int>, then either a PriorityQueue<string,int> capped at three entries or LINQ OrderByDescending(kv => kv.Value).ThenBy(kv => kv.Key).Take(3).
  4. I settle the edge cases out loud: fewer than three distinct codes, ties at third place (I break them on the code itself so the output is deterministic), mixed case or padded codes, and bad bytes (open with errors='replace').
  5. For a very large file I split it at newline-aligned byte offsets, count each chunk in a separate process and sum the counters. The merge is exact because counts add.
Follow-up
  • The logs are gzipped and rotated across many files on several servers. How does the script change?
  • How would you report the top three over a sliding last-hour window instead of the whole file?
  • What if the distinct codes do not fit in memory? (Hash-partition to disk and count each partition, or use an approximate Count-Min Sketch plus a heap.)

Implement a function to flatten a deeply nested JSON object representing a mechanical parts hierarchy.

medium
Coding and Algorithmic Problem Solving

Implement a function to flatten a deeply nested JSON object representing a mechanical parts hierarchy.

Approach
  1. I agree on the output format first: a flat dict of path to leaf value, with dict keys joined by a separator ('assembly.frame.bolt') and list items written as an index ('parts[2].qty').
  2. The core is a depth-first walk. A dict extends the path with each key, a list extends it with each index, and a scalar or null is written to the output. Time is linear in the number of nodes, but the output strings can total O(nodes x depth) characters.
  3. Because the hierarchy can be deeply nested, I use an explicit stack instead of recursion; CPython's default recursion limit is 1000 frames. In C# I parse with System.Text.Json into a JsonNode and walk it with a Stack<(string Path, JsonNode Node)>, branching on JsonObject, JsonArray and JsonValue.
  4. I handle the edge cases: empty dicts or lists (keep them as {} or [] leaves rather than silently dropping them), keys that already contain the separator (escape them or emit tuple paths), and collisions between a literal 'a.b' key and a nested a then b.
  5. For a parts hierarchy I mention an alternative output: rows of (part_id, parent_id, depth, path), which load straight into a table and can be queried as a tree.
Follow-up
  • Write the inverse function that unflattens the paths back into the nested object.
  • The file is several gigabytes. How would you flatten it without loading it all? (A streaming JSON parser that emits paths as it reads.)
  • The same subassembly appears under many parents and is referenced by id. How does the output change?

How would you optimize a search algorithm looking for a specific coordinate within a massive array of spatial

medium
Coding and Algorithmic Problem Solving

How would you optimize a search algorithm looking for a specific coordinate within a massive array of spatial data?

Approach
  1. I clarify the query first: an exact coordinate match, the nearest point, or everything inside a range. I also ask whether the data is static or updated, whether it is 2D or 3D, and how many queries run against one dataset.
  2. For a single query, a linear scan at O(n) is already optimal and building an index does not pay off. I make the scan fast with contiguous numeric arrays and vectorised comparisons, and memory-map the data if it is larger than RAM.
  3. For many exact lookups I build a hash set of coordinate tuples (O(n) build, O(1) average lookup). Floats need snapping to a tolerance grid first, and a point near a cell boundary means checking the neighbouring cells too.
  4. For range and nearest-neighbour queries I use a spatial index: a k-d tree (O(n log n) build, roughly O(log n) average nearest-neighbour query in low dimensions, O(n) worst case), a uniform grid for evenly spread points, or an R-tree when the data are boxes or live on disk.
  5. A cheaper alternative is to sort the points by Morton (Z-order) code, which interleaves the bits of the quantised coordinates. Exact lookup is then a binary search in O(log n), and nearby points stay mostly adjacent in memory.
Follow-up
  • How do you find all points within radius r of a query point, and what is the cost?
  • Points are inserted continuously while queries run. Which index would you keep, and how would you rebalance it?
  • The data sits in a relational database instead of memory. How would you index it there?

Write a method to reverse a linked list, and explain its time and space complexity.

medium
Coding and Algorithmic Problem Solving

Write a method to reverse a linked list, and explain its time and space complexity.

Approach
  1. I reverse iteratively with three pointers: prev = None, curr = head. In each step I save nxt = curr.next, set curr.next = prev, then advance prev = curr and curr = nxt. When curr is None, prev is the new head.
  2. The cost is O(n) time and O(1) extra space, since each node is visited once and only its next pointer changes.
  3. The recursive version also takes O(n) time but uses O(n) call-stack space, so a long list can overflow the stack. I mention that before choosing the iterative version.
  4. I trace through an empty list, a single node and two nodes, and check that the old head's next ends up as None, so the reversal does not leave a cycle.
Follow-up
  • Reverse only the nodes between positions m and n in one pass.
  • Reverse the list in groups of k, and leave a final group shorter than k unchanged.
  • How does reversal change for a doubly linked list, and how would you use reversal to check whether a list is a palindrome in O(1) space?

The plan follows the reported loop: coding fundamentals first for the technical assessment, then data-handling and design for the panel, and behavioral rehearsal last. Practice-library questions are marked as PracHub practice, not company material.

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 your stack
  • Write one paragraph per reported stage (Recruiter Screen, Technical Assessment, Panel Interviews) with what you will need for each.
  • Choose your interview language from C#, C++ or Python and list the SQL, Git and design-pattern topics you must refresh.
  • Pick three past projects and note the user, the problem and a measurable result for each.
  • Optional: skim the Revit API or AutoCAD .NET API add-in model (transactions, external commands) and write one sentence on how you would build and ship a plugin that automates a repetitive design task.

Deliverable: A one-page loop map, a chosen language with a refresh list, three project summaries with user and result, and an optional one-line CAD plugin pitch.

02Geometry and linked list basics
  • Write the 2D bounding-box overlap function and a table of test cases covering touching, contained, identical and zero-width boxes.
  • Extend the same function to 3D boxes and write down what changes.
  • Write the linked-list reversal iteratively and recursively, and state time and space complexity for each.

Deliverable: Runnable overlap and reversal code with a test table and written complexities.

Practice prompt ↗Practice prompt ↗
03Data processing: logs and nested JSON
  • Write a script that streams a log file and returns the top three error codes, with handling for malformed lines and ties.
  • Write an iterative JSON flatten that produces path keys and handles lists and empty objects.
  • Generate a large synthetic input for both and compare running time and memory.

Deliverable: Two working scripts, test inputs, and a short note on measured time and memory.

Practice prompt ↗Practice prompt ↗
04Spatial search, 3D pathing and performance
  • Write a search ladder for finding a coordinate in a large array of points (linear scan, sort plus binary search, grid bucketing, k-d tree or quadtree), then implement the grid or sorted-array version and time it against the scan.
  • For the piping-path scenario, write BFS on a 3D grid with blocked cells for exclusion zones, then upgrade it to A* with a Manhattan-distance heuristic and compare nodes expanded.
  • For the slow batch-processing scenario, profile a sample script (cProfile or your language's profiler), decide whether it is I/O-bound or CPU-bound, then fix the hot path or spread files across processes with multiprocessing.
  • Work through the practice debugging question on latency growing with page size, to practise finding a slow path.

Deliverable: A timed search implementation, a working BFS and A* on a 3D grid, and a short profiling write-up naming the bottleneck and the fix.

Practice prompt ↗Practice prompt ↗
05Data model and metadata API
  • Sketch the schema for mechanical parts, suppliers and project usage, including the join tables, keys and the three queries you would run most.
  • Outline the REST resources, keyset pagination on an immutable key, filtering and error format for the project metadata dashboard.
  • Do the two SQL practice questions to keep joins and concurrency fluent.

Deliverable: A schema diagram with three queries, an API outline, and completed SQL practice.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
06Large files, availability and migration
  • Design the design-file upload system: chunked upload, validation step, storage, metadata, concurrency and failure recovery.
  • List the availability measures for a daily-use internal tool: redundancy, health checks, backups, graceful degradation and monitoring.
  • Write a migration plan from an on-premise server to a cloud database with dry run, verification and rollback.

Deliverable: Three one-page designs, each with components, failure paths and a first build step.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Behavioral stories and full rehearsal
  • Write a story for each of the five reported behavioral prompts, with situation, your decision, result and what you would change.
  • Prepare an answer to pushing back on an unfeasible request from a senior mechanical engineer: the goal behind it, the evidence for the constraint, the alternative you offered and the decision.
  • Practise explaining one earlier design to an engineer and then to a non-engineer.
  • Run a full mock: one coding exercise aloud, one design, then two stories.

Deliverable: Six rehearsed stories and one recorded mock run with notes on what to tighten.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗

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

Candidates report that the panel includes stakeholders from design teams, and describe the role as building tools for civil, mechanical and architectural designers. Prepare stories where your user was not a software engineer and where you can state what changed for that user. For the prompt about pushing back on a senior mechanical engineer: restate the goal behind the request, show the specific constraint with evidence (a CAD API limit, data volume, a measured run time), offer a feasible alternative or a phased version, and say what was decided.

Tell me about a time you had to explain a complex technical issue to a non-technical stakeholder.

medium
Behavioral and Cross-Functional Leadersh

Tell me about a time you had to explain a complex technical issue to a non-technical stakeholder.

Approach
  1. Choose an issue whose consequence the listener cared about, such as a late batch run, a data-loss risk during a file sync or a limitation in a plugin API, so the story has a stake beyond the jargon.
  2. Set the scene in two sentences, then spend most of the answer on the translation: which terms you dropped, and what comparison from the listener's own work you used (for a designer, something like drawing revisions).
  3. Structure what you said as impact first, then the cause in one sentence, then two or three options with the cost and delay of each, then your recommendation and the decision you needed from them.
  4. Show you checked understanding (asked them to restate it, sent a one-page summary or a diagram) and give the outcome: the decision made and what changed afterwards.
  5. The mistake that sinks this answer is a long technical explanation with no decision at the end, or a story that implies the listener was slow.
Follow-up
  • How did you know they had understood, rather than just nodded?
  • What did you leave out on purpose, and was that the right call?
  • What would you have done if they had rejected your recommendation?

Describe a situation where you identified a major inefficiency in a team's workflow and built a tool to fix it

medium
Behavioral and Cross-Functional Leadersh

Describe a situation where you identified a major inefficiency in a team's workflow and built a tool to fix it.

Approach
  1. Open with how you found the inefficiency: you watched the workflow, counted the manual steps or repeats, and measured the cost in hours or errors before writing any code.
  2. Explain why a tool was the right fix compared with a process change or an existing product, and who you talked to so the tool matched the real workflow rather than your assumption.
  3. Describe the build briefly (language, scope, what you left out of version one) and the rollout: a pilot with one or two users, feedback, then wider adoption.
  4. Close with before and after numbers, who maintains the tool now, and what you did about documentation so it outlived your attention.
  5. The mistake is building from your own guess of the problem, or claiming impact you cannot measure.
Follow-up
  • How did you measure the time or errors saved?
  • How did you get people to switch from their old routine?
  • Who maintains the tool now, and what has broken since?

How do you handle a situation where a project's requirements are constantly changing?

medium
Behavioral and Cross-Functional Leadersh

How do you handle a situation where a project's requirements are constantly changing?

Approach
  1. Answer as a working method, then back it with one real example. Start by asking what is driving each change; often the underlying goal is stable even when the requests are not.
  2. Show how you isolated the parts most likely to move. In tooling for designers, a strong example is moving design rules, tolerances or project standards out of code into configuration that engineers could edit and validate themselves, so a new standard or spec change mid-delivery did not need a code release.
  3. Make the cost of change visible: keep a short written change log, restate scope and impact on delivery with each new request, and get the requester to agree to the trade-off.
  4. Use short iterations with demos to the users so wrong assumptions surface early, and agree what done means for each increment.
  5. The mistake is accepting every change silently and then missing the date, or insisting on a frozen spec and ignoring the users.
Follow-up
  • When did you push back on a change, and how?
  • How did you stop the code quality from degrading under repeated changes?
  • How did you estimate work when the scope kept moving?

Tell me about a time you disagreed with a senior engineer on a technical design. How did you resolve it?

medium
Behavioral and Cross-Functional Leadersh

Tell me about a time you disagreed with a senior engineer on a technical design. How did you resolve it?

Approach
  1. Pick a disagreement about a real technical choice (a data model, a framework, a sync approach) and describe both positions fairly, including the strongest argument for the senior engineer's view.
  2. Say how you moved from opinion to evidence: a small prototype, a benchmark, a failure scenario or a written comparison against criteria both of you accepted, such as maintainability, delivery time and risk.
  3. Show how you conducted yourself: you asked questions, listened to the context you lacked, and kept the discussion on the design rather than the person.
  4. State the resolution honestly, whether you were persuaded, persuaded them, or agreed to try theirs and revisit with data, and the result.
  5. The mistake is a story where you were simply right and the senior engineer gave in, or where you went around them.
Follow-up
  • What if the senior engineer had still disagreed after the evidence?
  • Were you ever wrong in that situation, and what did you learn?
  • How did the working relationship change afterwards?

Describe a project that failed. What did you learn, and what would you do differently today?

medium
Behavioral and Cross-Functional Leadersh

Describe a project that failed. What did you learn, and what would you do differently today?

Approach
  1. Choose a failure you owned part of, with real cost (a missed release, a tool nobody used, a migration that had to be redone), not a disguised success.
  2. State plainly what went wrong and the root cause in your own decisions, such as skipping user input, underestimating data volume or leaving a risk unvoiced, without blaming others.
  3. Mention the warning signs you saw or missed, and when you acted on them.
  4. Finish with the concrete change in your practice and where you applied it later: for example, an early demo to users, a load test on realistic data or a written risk list.
  5. The mistake is a vague lesson with no changed behaviour, or a failure so minor it shows no judgment.
Follow-up
  • When did you first see that the project was in trouble, and what did you do?
  • What would you do differently in the first week if you restarted?
  • Where have you applied that lesson since?
  • 01

    Tell me about a time you had to explain a complex technical issue to a non-technical stakeholder.

  • 02

    Describe a situation where you identified a major inefficiency in a team's workflow and built a tool to fix it.

  • 03

    How do you handle a situation where a project's requirements are constantly changing?

  • 04

    Tell me about a time you disagreed with a senior engineer on a technical design. How did you resolve it?

  • 05

    Describe a project that failed. What did you learn, and what would you do differently today?

  • 06

    How do you push back on a feature request from a senior mechanical engineer when you know it is technically unfeasible?

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

Candidates describe it as coding exercises, and the reported coding questions are bounding-box overlap, the top three error codes in a log, flattening nested JSON, a spatial coordinate search and reversing a linked list. Practise in one language (C#, C++ or Python), write runnable code with tests, and state complexity aloud. Practise string handling, file parsing and basic object-oriented design.

A+E Group Software Engineer candidate reports ↗
Do I need a civil or mechanical engineering background?

Candidates report that it is not required. AEC experience, CAD/BIM APIs such as Revit, AutoCAD or Civil 3D, and computational geometry are listed as nice to have. Make up for it by learning basic geometry (distances, bounding boxes) and by preparing stories about building software for users in another field.

A+E Group Software Engineer candidate reports ↗
How long does the process take?

Candidates report about three to five weeks across three stages: Recruiter Screen, Technical Assessment and Panel Interviews. The stages can vary with the team and seniority, so ask the recruiter for the exact sequence and the format of each stage.

A+E Group Software Engineer candidate reports ↗
Which technologies should I know?

The requirements candidates describe name object-oriented languages (C#, C++ or Python), design patterns, Git and basic SQL. Revise one language deeply rather than three shallowly, be able to write a join and an aggregate in SQL, and have a view on a schema for parts, suppliers and project usage.

A+E Group Software Engineer candidate reports ↗
How much system design should I expect?

The reported design questions cover file upload and validation, a metadata REST API, a database schema, availability for an internal tool, and a legacy data migration to the cloud. Prepare components, data flow, failure handling and verification for each, and one concrete sentence on what you would build first.

A+E Group Software Engineer candidate reports ↗
Does location or remote work come up?

Candidates mention Wilkes-Barre, PA as a location linked to the role, and a general tip is to be ready to discuss working with teams split between remote and office. Ask the recruiter about the team's arrangement, and prepare an example of keeping a project aligned across locations.

A+E Group 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.