Interview guides · EOG
EOG Software Engineer Interview Guide
EOG Software Engineer interview guide: reported rounds, questions and how candidates describe the process.
The 60-second brief
As a Software Engineer at EOG, you play a vital role in building and maintaining the high-performance software systems that power one of the industry's leading energy producers. This position drives the creation of internal applications, data pipelines, and analytical tools that directly influence operational efficiency, engineering decisions, and strategic business initiatives. You will work on software solutions that process complex data streams and support critical enterprise operations across exploration, production, and corporate functions. The scope of this role spans multiple modern technology stacks, with teams leveraging Python, Java, React, TypeScript, and database technologies like PL/SQL to deliver robust applications.
This guide is scoped to a Software Engineer candidate at EOG.
Focus areas
- System Design
- Algorithms & Problem Solving
- Whiteboard Coding
The EOG interview process
EOG candidates report 3 rounds over 3-5 weeks. The stages below are what candidates describe, not a published process.
Phone Screen
Initial call to evaluate candidate's background and role fit.
What to demonstrate
- Initial call to evaluate candidate's background and role fit
- Depth in System Design
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 Interview
In-depth assessment of technical skills and problem-solving methodologies.
What to demonstrate
- In-depth assessment of technical skills and problem-solving methodologies
- Depth in System Design
How to prepare
- Answer aloud and timed: What is the difference between synchronous and asynchronous execution in Python, and when would you use each?
- Answer aloud and timed: How do you handle error logging, exception management, and debugging in enterprise Java applications?
Behavioral Interview
Evaluation of interpersonal skills and cultural fit within the company.
What to demonstrate
- Evaluation of interpersonal skills and cultural fit within the company
- Depth in System Design
How to prepare
- Prepare three examples from your own work, each with a decision you made and an outcome you can quantify.
- Re-read the description of the behavioral interview above and write down what you would ask to confirm before it.
Where candidates lose points
Prepare detailed resume narratives
Interviewers frequently dive deep into your previous work history. Be ready to discuss your specific contributions, challenges faced, and the business impact of the projects on your resume.
Communicate your thought process
During technical and coding evaluations, never code in silence. Verbalize your assumptions, explain trade-offs, and talk through potential edge cases as you work toward a solution.
Brush up on fundamental data structures
Ensure you are comfortable with common algorithmic patterns, tree traversals, and array manipulations, as these frequently appear in technical screens.
Demonstrate business curiosity
Showing an interest in how software solutions impact broader business operations and efficiency will resonate strongly with interviewers across technical and management roles.
Questions & practice
What is the difference between synchronous and asynchronous execution in Python, and when would you use each?
Medium · Technical and Domain Knowledge
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?
Solve a tree traversal problem and explain the time and space complexity of your approach.
Medium · Algorithms and Data Structures
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 would you approach a multi-part algorithmic challenge involving arrays or string manipulation within a str
Medium · Algorithms and Data Structures
How would you approach a multi-part algorithmic challenge involving arrays or string manipulation within a strict time limit?
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?
Write a function to check for balanced brackets or parse structured XML data efficiently.
Medium · Algorithms and Data Structures
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?
Discuss how you choose between different sorting or searching algorithms based on dataset characteristics.
Medium · Algorithms and Data Structures
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?
Walk me through how you would optimize a complex SQL query or database interaction in a production environment
Medium · Technical and Domain Knowledge
Walk me through how you would optimize a complex SQL query or database interaction in a production environment.
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?
Find version gaps and relay lag with window functions
Medium · window functions · event tables · frame semantics
outbox_event holds event_id, aggregate_type, aggregate_id, aggregate_version, event_type, payload, status ('pending','published','dead'), attempts, created_at, published_at. A projection is missing rows and you must decide whether the relay skipped events or the consumer dropped them. Write three queries over the last seven days: one listing every aggregate_id whose published aggregate_version sequence has a hole, one giving per-day counts with a running total, and one returning the newest published event per aggregate. For each, say where the window function is evaluated relative to WHERE and LIMIT. PostgreSQL 16.
Approach
- Gaps: compute lead(aggregate_version) OVER (PARTITION BY aggregate_id ORDER BY aggregate_version) in a subquery, then filter next_version <> aggregate_version + 1 in the outer query. Window functions are evaluated after WHERE, GROUP BY and HAVING and before the outer ORDER BY and LIMIT, so the predicate cannot sit in the same WHERE clause and PostgreSQL 16 has no QUALIFY.
- Say what the seven-day filter does to the answer: it truncates every partition, so the first row per aggregate has no predecessor inside the window and a hole spanning the boundary is invisible. Widen the window, or join to resource.version as the authority for the true maximum.
- Running total: SELECT date_trunc('day', created_at) AS d, count() AS n, sum(count()) OVER (ORDER BY date_trunc('day', created_at) ROWS UNBOUNDED PRECEDING). An aggregate inside a window call is legal because grouping runs before windowing. The grouping key is unique per row here so ROWS and RANGE agree, but write the frame anyway — over ungrouped rows with tied timestamps the default RANGE frame pulls in every peer row and the total jumps.
- Newest per aggregate: DISTINCT ON (aggregate_id) ... ORDER BY aggregate_id, aggregate_version DESC is the cheap PostgreSQL-only form when an index matches that order; row_number() OVER (PARTITION BY aggregate_id ORDER BY aggregate_version DESC) = 1 is the portable form and needs a subquery for the same evaluation-order reason as the gap query.
Follow-up
- Relay failover redelivers events. Does a duplicate break the gap query, and how would you detect one from this table alone?
- Turn the gap check into a continuous monitor rather than a query someone runs after an incident. What does it watch?
How would you design a data ingestion pipeline that handles high-volume real-time feeds from remote sensors?
Medium · System Design and Architecture
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?
What considerations do you make when structuring a full-stack application for maintainability and future expan
Medium · System Design and Architecture
What considerations do you make when structuring a full-stack application for maintainability and future expansion?
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?
How do you approach database schema design for an application requiring high read and write throughput?
Medium · System Design and Architecture
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?
Discuss strategies for caching and reducing latency in distributed web applications.
Medium · System Design and Architecture
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?
How do you ensure high availability and fault tolerance in critical backend services?
Medium · System Design and Architecture
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?
Walk through your strategy for debugging a failing test case during a live or automated coding assessment.
Medium · Algorithms and Data Structures
Approach
- Establish what changed and when, before forming any theory.
- Pick a bisection that eliminates candidates whichever way it turns out.
- Check the instrumentation before believing the symptom.
- Separate the trigger from the cause; the deploy is rarely the bug.
Follow-up
- What would you look at first, and what would it rule out?
- How would you tell a cause from a coincidence here?
Suggested practice checklist
Built from the rounds and topics EOG candidates report.
Day 1 — Map the EOG loop
- Write out the reported sequence: Phone Screen, Technical Interview, Behavioral 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.
Day 2 — Work System Design
- Spend the session on System Design, which EOG candidates report being tested on.
- Write one worked example in System Design and time yourself on it.
Deliverable: One timed worked example in System Design.
Day 3 — Work Algorithms & Problem Solving
- Spend the session on Algorithms & Problem Solving, which EOG candidates report being tested on.
- Write one worked example in Algorithms & Problem Solving and time yourself on it.
Deliverable: One timed worked example in Algorithms & Problem Solving.
Day 4 — Work Whiteboard Coding
- Spend the session on Whiteboard Coding, which EOG candidates report being tested on.
- Write one worked example in Whiteboard Coding and time yourself on it.
Deliverable: One timed worked example in Whiteboard Coding.
Day 5 — Answer out loud: Technical and Domain Knowledge
- Answer aloud, timed: Walk me through how you would optimize a complex SQL query or database interaction in a production environment.
- Answer aloud, timed: Explain your experience with modern frontend frameworks like React and how you manage state and component lifecycles.
Deliverable: Spoken answers to 2 reported Technical and Domain Knowledge question(s), under time.
Day 6 — Answer out loud: Algorithms and Data Structures
- Answer aloud, timed: Solve a tree traversal problem and explain the time and space complexity of your approach.
- Answer aloud, timed: How would you approach a multi-part algorithmic challenge involving arrays or string manipulation within a strict time limit?
Deliverable: Spoken answers to 2 reported Algorithms and Data Structures question(s), under time.
Day 7 — Answer out loud: System Design and Architecture
- Answer aloud, timed: How would you design a data ingestion pipeline that handles high-volume real-time feeds from remote sensors?
- Answer aloud, timed: What considerations do you make when structuring a full-stack application for maintainability and future expansion?
Deliverable: Spoken answers to 2 reported System Design and Architecture question(s), under time.
Behavioural preparation
Behavioural rounds judge the decision you made and what it cost.
Explain your experience with modern frontend frameworks like React and how you manage state and component life
Medium · Technical and Domain Knowledge
Explain your experience with modern frontend frameworks like React and how you manage state and component lifecycles.
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 error logging, exception management, and debugging in enterprise Java applications?
Medium · Technical and Domain Knowledge
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 your experience building or maintaining RESTful APIs and ensuring their security and performance.
Medium · Technical and Domain Knowledge
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 challenging technical project on your resume and explain your specific contributions.
Medium · Behavioral and Experience Deep-Dive
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 disagreements with product managers or team members regarding technical direction?
Medium · Behavioral and Experience Deep-Dive
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 a time when you had to learn a new technology or domain rapidly to deliver a project on schedule.
Medium · Behavioral and Experience Deep-Dive
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 prioritize tasks when managing multiple competing deadlines in a fast-paced environment?
Medium · Behavioral and Experience Deep-Dive
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?
Why are you interested in applying your software engineering skills specifically to the energy and resources s
Medium · Behavioral and Experience Deep-Dive
Why are you interested in applying your software engineering skills specifically to the energy and resources sector?
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?