Interview guides · Span Construction & Engineering
Span Construction & Engineering Software Engineer Interview Guide
Span Construction & Engineering Software Engineer interview guide: reported rounds, questions and how candidates describe the process.
The 60-second brief
As a Software Engineer at Span Construction & Engineering, you will play a critical role in building, optimizing, and maintaining the proprietary software systems and digital platforms that power our global operations. Our engineering teams design and develop robust applications that streamline complex construction workflows, manage massive supply chains, and enable seamless collaboration between field engineers and corporate stakeholders. This is a highly collaborative environment where software directly impacts real-world physical infrastructure and large-scale engineering projects. In this role, your work directly influences the efficiency, safety, and scalability of our operations. Whether you are working on the MERN stack to build modern web portals or developing enterprise-grade backend services using C# and.NET, you will be solving tangible business challenges.
This guide is scoped to a Software Engineer candidate at Span Construction & Engineering.
Focus areas
- Object-Oriented Programming (OOP)
- React
- SQL
The Span Construction & Engineering interview process
Span Construction & Engineering candidates report 4 rounds over 3-5 weeks. The stages below are what candidates describe, not a published process.
Online Assessment
Candidates complete an online aptitude and technical assessment covering quantitative aptitude, logical reasoning, and core computer science concepts.
What to demonstrate
- Candidates complete an online aptitude and technical assessment covering quantitative aptitude, logical reasoning, and core computer science concepts
- Depth in Object-Oriented Programming (OOP)
How to prepare
- Answer aloud and timed: Explain the four pillars of OOP and provide real-world examples of how you have applied them in your previous projects.
- Answer aloud and timed: What is the difference between an abstract class and an interface in C# or Java? When would you use one over the other?
Group Discussion
Candidates participate in a group discussion to evaluate communication and teamwork skills.
What to demonstrate
- Candidates participate in a group discussion to evaluate communication and teamwork skills
- Depth in Object-Oriented Programming (OOP)
How to prepare
- Answer aloud and timed: How do React hooks work, and what are the rules of using hooks like
useEffectanduseState? - Answer aloud and timed: What are the differences between value types and reference types in C#?
HR Screening Call
For experienced professionals, a direct HR screening call discusses background, expectations, and team alignment.
What to demonstrate
- For experienced professionals, a direct HR screening call discusses background, expectations, and team alignment
- Depth in Object-Oriented Programming (OOP)
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 Evaluations
Technical assessments involve discussions about projects, hands-on coding tasks, and fundamental system design.
What to demonstrate
- Technical assessments involve discussions about projects, hands-on coding tasks, and fundamental system design
- Depth in Object-Oriented Programming (OOP)
How to prepare
- Answer aloud and timed: Explain the differences between
INNER JOIN,LEFT JOIN,RIGHT JOIN, andFULL OUTER JOINwith practical use cases. - Answer aloud and timed: What is Entity Framework, and how does it simplify database interactions for a backend developer?
Where candidates lose points
Master the Basics of SQL
Do not overlook database queries. Be prepared to write queries involving joins, aggregate functions, and subqueries on a whiteboard or shared screen. This is one of our most frequently evaluated areas.
Know Your Projects Inside Out
Be ready to give a detailed walkthrough of your portfolio or final year project. Explain your architectural choices, the challenges you faced, and how you solved them.
Tests that assert on the implementation rather than the behaviour
Assert on what a caller can observe, not on the number of internal calls or the shape of a private field. A test that breaks on every refactor but still passes when the answer is wrong costs more than it protects.
Questions & practice
Explain the four pillars of OOP and provide real-world examples of how you have applied them in your previous
Medium · Object-Oriented Programming (OOP) & Core
Explain the four pillars of OOP and provide real-world examples of how you have applied them in your previous projects.
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?
What is the difference between an abstract class and an interface in C# or Java? When would you use one over t
Medium · Object-Oriented Programming (OOP) & Core
What is the difference between an abstract class and an interface in C# or Java? When would you use one over the other?
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?
How do React hooks work, and what are the rules of using hooks like useEffect and useState?
Medium · Object-Oriented Programming (OOP) & Core
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?
What are the differences between value types and reference types in C#?
Medium · Object-Oriented Programming (OOP) & Core
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?
Explain the concept of method overloading versus method overriding.
Medium · Object-Oriented Programming (OOP) & Core
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?
Write a function to check if a given number is a prime number.
Medium · Data Structures & Basic Logic
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 reverse an array or a string without using built-in language helper methods?
Medium · Data Structures & Basic Logic
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?
What are the primary differences between an array and a linked list? When is one preferred over the other?
Medium · Data Structures & Basic Logic
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?
Explain how a simple search algorithm like binary search works and state its time complexity.
Medium · Data Structures & Basic Logic
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 write a query to find the second-highest salary or value in a database table?
Medium · Database & SQL Queries
Approach
- Name the grain you start from and join outward from it.
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- Say which index the query would use, and what makes it unusable.
- Handle the rows that do not match: that is usually the actual question.
Follow-up
- How does the query change if that join becomes one-to-many?
- What happens to this when the table is ten times larger?
Explain the differences between INNER JOIN, LEFT JOIN, RIGHT JOIN, and FULL OUTER JOIN with practical
Medium · Database & SQL Queries
Explain the differences between INNER JOIN, LEFT JOIN, RIGHT JOIN, and FULL OUTER JOIN with practical use cases.
Approach
- Name the grain you start from and join outward from it.
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- Say which index the query would use, and what makes it unusable.
- Handle the rows that do not match: that is usually the actual question.
Follow-up
- How does the query change if that join becomes one-to-many?
- What happens to this when the table is ten times larger?
Explain the concept of database normalization and why it is important for enterprise applications.
Medium · Database & SQL Queries
Approach
- Name the grain you start from and join outward from it.
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- Say which index the query would use, and what makes it unusable.
- Handle the rows that do not match: that is usually the actual question.
Follow-up
- How does the query change if that join becomes one-to-many?
- What happens to this when the table is ten times larger?
How would you optimize a slow-running SQL query?
Medium · Database & SQL Queries
Approach
- Name the grain you start from and join outward from it.
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- Say which index the query would use, and what makes it unusable.
- Handle the rows that do not match: that is usually the actual question.
Follow-up
- How does the query change if that join becomes one-to-many?
- What happens to this when the table is ten times larger?
What is Entity Framework, and how does it simplify database interactions for a backend developer?
Medium · Database & SQL Queries
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?
Describe how you would write a script to retrieve data from a REST API and render it dynamically on a webpage.
Medium · Data Structures & Basic Logic
Approach
- Say who the caller is and what they do when the call fails halfway.
- Define the identity of a request so a retry cannot double-apply it.
- Separate accepted, pending, failed and confirmed; they are different facts.
- 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?
Walk me through the architecture of your final year project or your most recent professional project. What wer
Medium · Project & Scenario-Based Questions
Walk me through the architecture of your final year project or your most recent professional project. What were the biggest technical challenges you faced?
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Why did you choose the specific technology stack (e.g., MERN stack,.NET) for your previous project?
Medium · Project & Scenario-Based Questions
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?
Every query on one table stalls for forty seconds mid-deploy
Medium · lock contention · ddl · migrations
During a release on PostgreSQL, every query touching resource times out for about 40 seconds and then recovers with no intervention. The release ran one migration, ALTER TABLE resource ADD COLUMN archived_reason TEXT, and the migration log shows it completing in 6 ms. Unrelated tables showed no change in error rate. Explain how a 6 ms statement caused a 40-second stall, give the ordered checks you would run on a live system to confirm it, and give the migration procedure that prevents a repeat.
Approach
- Separate the statement's duration from the lock's duration. ADD COLUMN with no default is a catalogue-only change and genuinely runs in milliseconds, but it requires ACCESS EXCLUSIVE, and it cannot acquire that until every transaction already touching the table has finished.
- Account for the queueing, which is the part that surprises people. A lock request that is waiting blocks later requests for conflicting modes behind it rather than letting them overtake, so one long-open transaction holds the DDL and the DDL holds all the traffic. The stall length is set by the longest open transaction, not by the size of the change.
- Confirm on a live system in this order: pg_stat_activity for that table ordered by xact_start, looking for the oldest transaction and specifically for state = idle in transaction; then pg_locks where granted = false to find the waiter; then join them on pid to name blocker and blocked. pg_blocking_pids() does that join for you and is the fastest single call.
- Prevent rather than merely time it better. Set lock_timeout to a second or two on the migration session so the DDL abandons the queue after a bounded wait and is retried, instead of holding it for as long as the oldest transaction lives. Be exact about what that buys: queries arriving during the wait still queue behind the pending ACCESS EXCLUSIVE request, so each attempt costs them up to one lock_timeout of added latency. The outage goes from 40 seconds to about one second per attempt, not to zero. Also run migrations away from deploy-time peaks, and put a statement timeout and an idle-in-transaction timeout on the analytics role that opens the long transactions.
Follow-up
- The same release also wants NOT NULL on that column. What is the sequence that gets there without a long lock?
- Your lock_timeout retry fails ten times in a row because the analytics transaction is always open. What do you change?
Suggested practice checklist
Built from the rounds and topics Span Construction & Engineering candidates report.
Day 1 — Map the Span Construction & Engineering loop
- Write out the reported sequence: Online Assessment, Group Discussion, HR Screening Call, Technical Evaluations.
- 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 4 reported rounds, with the weakest marked.
Day 2 — Work Object-Oriented Programming (OOP)
- Spend the session on Object-Oriented Programming (OOP), which Span Construction & Engineering candidates report being tested on.
- Write one worked example in Object-Oriented Programming (OOP) and time yourself on it.
Deliverable: One timed worked example in Object-Oriented Programming (OOP).
Day 3 — Work React
- Spend the session on React, which Span Construction & Engineering candidates report being tested on.
- Write one worked example in React and time yourself on it.
Deliverable: One timed worked example in React.
Day 4 — Work SQL
- Spend the session on SQL, which Span Construction & Engineering candidates report being tested on.
- Write one worked example in SQL and time yourself on it.
Deliverable: One timed worked example in SQL.
Day 5 — Answer out loud: Object-Oriented Programming (OOP) & Core Language Concepts
- Answer aloud, timed: Explain the four pillars of OOP and provide real-world examples of how you have applied them in your previous projects.
- Answer aloud, timed: What is the difference between an abstract class and an interface in C# or Java? When would you use one over the other?
Deliverable: Spoken answers to 2 reported Object-Oriented Programming (OOP) & Core Language Concepts question(s), under time.
Day 6 — Answer out loud: Database & SQL Queries
- Answer aloud, timed: How do you write a query to find the second-highest salary or value in a database table?
- Answer aloud, timed: Explain the differences between
INNER JOIN,LEFT JOIN,RIGHT JOIN, andFULL OUTER JOINwith practical use cases.
Deliverable: Spoken answers to 2 reported Database & SQL Queries question(s), under time.
Day 7 — Answer out loud: Data Structures & Basic Logic
- Answer aloud, timed: Write a function to check if a given number is a prime number.
- Answer aloud, timed: How do you reverse an array or a string without using built-in language helper methods?
Deliverable: Spoken answers to 2 reported Data Structures & Basic Logic question(s), under time.
Behavioural preparation
Behavioural rounds judge the decision you made and what it cost.
How do you handle a situation where a project requirement changes mid-development?
Medium · Project & Scenario-Based Questions
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?
Reverse your own decision and price the reversal
Medium · reversibility · measurement · migrations
Describe a technical decision you made and later reversed. Pick one that cost something: a service you split and merged back, a cache you added and removed, an index you created that pushed the planner onto a worse plan, a projection you rebuilt from scratch. State what you believed when you decided, the measurement that changed your mind, how long the wrong version ran in production, and what the reversal cost in migrations, dual writes, and a deprecation window for callers you did not own.
Approach
- State the original rationale without irony, in the version you would still defend given what was known then. If it is not defensible, the story is about carelessness rather than judgement, and a different example serves you better.
- Give the measurement that moved with a before and after: the p99 that did not improve, the cache hit rate that sat at 40%, the plan that flipped to a sequential scan once the table passed a size you can name.
- Cost the reversal in steps, not adjectives: expand-and-contract deploys, the dual-write window, the callers who had to be notified, the rows already written in the wrong shape that had to be backfilled or abandoned.
- Distinguish reversal from rewrite by naming what you kept. Most good reversals preserve the schema or the interface and undo one decision inside it, which is also why they were affordable.
Follow-up
- What in that decision was irreversible, and did you know it was irreversible when you made it?
- How did you tell the people who had already built on top of the original decision?
Tell callers you do not own that their integration breaks
Medium · deprecation · compatibility · stakeholders
A field in a write endpoint's response must change shape. You own the endpoint; you do not own the four internal callers or the outbound webhook consumers who read it. Describe a deprecation you were responsible for: what you shipped first, how you established who was actually reading the field, the window you gave and what set its length, what you did about the consumer who never moved, and how you decided removal was safe. Name the signal you used, not the announcement you sent.
Approach
- Establish the reader set empirically rather than from a wiki of owners: per-field usage counters keyed by principal, or access logs attributed to a consumer. State the blind spot of whichever you pick, since a consumer that reads the field only on a monthly job will not appear in a week of logs.
- Ship additive first. Populate the new field alongside the old one so no reader is forced to move, which is also what keeps a rolling deploy safe, because old and new instances answer the same requests at the same time and a rollback must still find the old shape present.
- Set the window from the slowest legitimate consumer's release cadence, not from your calendar, and decide separately what to do for a consumer with no release process at all, such as an external webhook endpoint you can only email.
- Convert silence into evidence before you rely on it: a short, low-traffic removal window that makes a still-dependent consumer fail visibly and loudly while you are watching, rather than at three in the morning after you have moved on.
Follow-up
- How would you detect a consumer that reads the field only during a monthly export?
- One caller refuses to move and has a commercial relationship behind it. What changes in your plan and what does not?