cswork / libraryOpen practice workspace

Interview guides · S&P Global

S&P Global Software Engineer Interview Guide

S&P Global Software Engineer interview guide: reported rounds, questions and how candidates describe the process.

The 60-second brief

As a Software Engineer at S&P Global, you play a central role in driving the technology that powers global financial, commodity, and capital markets. S&P Global delivers essential intelligence, credit ratings, benchmarks, and workflow solutions relied upon by leading institutions worldwide. In this role, you will design, build, and scale low-latency analytical engines, enterprise data pipelines, full-stack web applications, and cloud-native services that process vast amounts of financial data accurately and securely. The technical environment at S&P Global demands precision, resilience, and operational excellence. Software engineers contribute directly to business-critical platforms across key divisions such as S&P Global Ratings, Market Intelligence, Dow Jones Indices, and S&P Global Energy.

This guide is scoped to a Software Engineer candidate at S&P Global.

Focus areas

  • Python
  • AWS
  • SQL

The S&P Global interview process

S&P Global candidates report 3 rounds over 3-5 weeks. The stages below are what candidates describe, not a published process.

Online Assessment

Candidates complete an online assessment that includes aptitude questions and technical multiple-choice questions.

What to demonstrate

  • Candidates complete an online assessment that includes aptitude questions and technical multiple-choice questions
  • Depth in Python

How to prepare

  • Answer aloud and timed: Explain the core concepts of Object-Oriented Programming (OOP) and provide real-world examples for each.
  • Answer aloud and timed: How do SOLID principles apply to software maintenance and unit testing?

Technical Rounds

Candidates participate in two to three technical interviews involving live coding and concept checking.

What to demonstrate

  • Candidates participate in two to three technical interviews involving live coding and concept checking
  • Depth in Python

How to prepare

  • Answer aloud and timed: What is the difference between value types and reference types, and how does python handle memory management with lists vs. tuples?
  • Answer aloud and timed: How do exception handling mechanisms work in Java or Python, and what are best practices when handling runtime exceptions?

Managerial/Director Round

A discussion with a manager or director involving situational questions and behavioral scenarios.

What to demonstrate

  • A discussion with a manager or director involving situational questions and behavioral scenarios
  • Depth in Python

How to prepare

  • Answer aloud and timed: What are abstract classes and interfaces, and when would you choose one over the other?
  • Answer aloud and timed: Given an array of integers, write a function to find two numbers that add up to a specific target value.

Where candidates lose points

Master your resume details thoroughly

Be prepared to explain every framework, library, project contribution, and database system mentioned on your resume. Interviewers will test your depth of experience based directly on your submitted credentials.

Practice writing and tuning SQL manually

Expect live query writing scenarios. Focus on mastering join conditions, aggregation clauses, subqueries, indexing concepts, and execution plan optimization strategies.

Structure your coding solutions out loud

When presented with an algorithmic problem, talk through your thought process before writing code. Clearly explain your brute-force approach first, discuss time and space complexity, and then refactor toward an optimal solution.

Questions & practice

What is the difference between value types and reference types, and how does python handle memory management w

Medium · Core Programming & Object-Oriented Desig

What is the difference between value types and reference types, and how does python handle memory management with lists vs. tuples?

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. 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 exception handling mechanisms work in Java or Python, and what are best practices when handling runtime

Medium · Core Programming & Object-Oriented Desig

How do exception handling mechanisms work in Java or Python, and what are best practices when handling runtime exceptions?

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. 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?

Given an array of integers, write a function to find two numbers that add up to a specific target value.

Medium · Data Structures, Algorithms & Problem So

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. 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 an algorithm to reverse the digits of an integer or swap two numbers without using a third variable.

Medium · Data Structures, Algorithms & Problem So

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. 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 find the maximum element in an array, and what is the time complexity of your approach?

Medium · Data Structures, Algorithms & Problem So

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. 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 HashMap handles collisions under the hood, and describe the time complexity in best and worst-ca

Medium · Data Structures, Algorithms & Problem So

Explain how a HashMap handles collisions under the hood, and describe the time complexity in best and worst-case scenarios.

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. 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?

Solve a classic dynamic programming problem, such as finding the maximum subarray sum or resolving a grid path

Medium · Data Structures, Algorithms & Problem So

Solve a classic dynamic programming problem, such as finding the maximum subarray sum or resolving a grid path challenge.

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. 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 B-Tree indexes work in relational databases, and when might an index slow down query performance?

Medium · Database Management & SQL

Approach

  1. Name the grain you start from and join outward from it.
  2. Check whether any join is one-to-many before aggregating, or the sums inflate.
  3. Say which index the query would use, and what makes it unusable.
  4. 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?

Write a SQL query using INNER JOIN, LEFT JOIN, and aggregate functions (GROUP BY, HAVING) to summarize

Medium · Database Management & SQL

Write a SQL query using INNER JOIN, LEFT JOIN, and aggregate functions (GROUP BY, HAVING) to summarize transactional financial data.

Approach

  1. Name the grain you start from and join outward from it.
  2. Check whether any join is one-to-many before aggregating, or the sums inflate.
  3. Say which index the query would use, and what makes it unusable.
  4. 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 database normalization up to 3NF and discuss scenario trade-offs between normalization and denormaliza

Medium · Database Management & SQL

Explain database normalization up to 3NF and discuss scenario trade-offs between normalization and denormalization.

Approach

  1. Name the grain you start from and join outward from it.
  2. Check whether any join is one-to-many before aggregating, or the sums inflate.
  3. Say which index the query would use, and what makes it unusable.
  4. 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 core concepts of Object-Oriented Programming (OOP) and provide real-world examples for each.

Medium · Core Programming & Object-Oriented Desig

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

How do SOLID principles apply to software maintenance and unit testing?

Medium · Core Programming & Object-Oriented Desig

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

What are abstract classes and interfaces, and when would you choose one over the other?

Medium · Core Programming & Object-Oriented Desig

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. 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 the difference between database partitioning and sharding, and explain how each improves scalability.

Medium · Database Management & SQL

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. 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?

Explain event bubbling and event capturing in JavaScript, and show how to manage event propagation using `even

Medium · Web, Cloud & Architecture

Explain event bubbling and event capturing in JavaScript, and show how to manage event propagation using event.stopPropagation.

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. 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 state management and hooks like useMemo, useCallback, and useEffect optimize rendering performanc

Medium · Web, Cloud & Architecture

How do state management and hooks like useMemo, useCallback, and useEffect optimize rendering performance in React?

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. 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 are the key components of an AWS network architecture (e.g., VPC, public/private subnets, Security Groups

Medium · Web, Cloud & Architecture

What are the key components of an AWS network architecture (e.g., VPC, public/private subnets, Security Groups, NAT Gateways)?

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. 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 secure RESTful APIs using JWT authentication, OAuth2, and token storage best practices in client ap

Medium · Web, Cloud & Architecture

How do you secure RESTful APIs using JWT authentication, OAuth2, and token storage best practices in client applications?

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. 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?

Describe common microservices design patterns, including event-driven architecture using messaging queues like

Medium · Web, Cloud & Architecture

Describe common microservices design patterns, including event-driven architecture using messaging queues like Kafka or RabbitMQ.

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. 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 would you debug a slow-running query in Oracle or PostgreSQL using EXPLAIN ANALYZE?

Medium · Database Management & SQL

Approach

  1. Establish what changed and when, before forming any theory.
  2. Pick a bisection that eliminates candidates whichever way it turns out.
  3. Check the instrumentation before believing the symptom.
  4. 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 S&P Global candidates report.

Day 1 — Map the S&P Global loop

  • Write out the reported sequence: Online Assessment, Technical Rounds, Managerial/Director Round.
  • 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 Python

  • Spend the session on Python, which S&P Global candidates report being tested on.
  • Write one worked example in Python and time yourself on it.

Deliverable: One timed worked example in Python.

Day 3 — Work AWS

  • Spend the session on AWS, which S&P Global candidates report being tested on.
  • Write one worked example in AWS and time yourself on it.

Deliverable: One timed worked example in AWS.

Day 4 — Work SQL

  • Spend the session on SQL, which S&P Global 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: Core Programming & Object-Oriented Design

  • Answer aloud, timed: Explain the core concepts of Object-Oriented Programming (OOP) and provide real-world examples for each.
  • Answer aloud, timed: How do SOLID principles apply to software maintenance and unit testing?

Deliverable: Spoken answers to 2 reported Core Programming & Object-Oriented Design question(s), under time.

Day 6 — Answer out loud: Data Structures, Algorithms & Problem Solving

  • Answer aloud, timed: Given an array of integers, write a function to find two numbers that add up to a specific target value.
  • Answer aloud, timed: Write an algorithm to reverse the digits of an integer or swap two numbers without using a third variable.

Deliverable: Spoken answers to 2 reported Data Structures, Algorithms & Problem Solving question(s), under time.

Day 7 — Answer out loud: Database Management & SQL

  • Answer aloud, timed: How do B-Tree indexes work in relational databases, and when might an index slow down query performance?
  • Answer aloud, timed: Write a SQL query using INNER JOIN, LEFT JOIN, and aggregate functions (GROUP BY, HAVING) to summarize transactional financial data.

Deliverable: Spoken answers to 2 reported Database Management & SQL question(s), under time.

Behavioural preparation

Behavioural rounds judge the decision you made and what it cost.

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

  1. 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.
  2. 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.
  3. 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.
  4. 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?

Turn a code review disagreement into a decision

Easy · code review · optimistic concurrency · communication

A colleague's change updates a row with UPDATE resource SET version = version + 1 WHERE resource_id = $1 AND version = $2 and treats an affected-row count of zero as a successful no-op. You read that as a silently lost update; they think returning 200 is friendlier to clients than returning a conflict. Describe how you have handled a review disagreement of this shape: what goes in the comment, when you leave the thread, and who decides. Then write the comment you would leave here, in under 80 words.

Approach

  1. Sort the disagreement before writing anything. A silently discarded write is a correctness claim about data; the choice between 409 and 412 is taste. Only the first justifies blocking a merge, and saying which one you are doing is most of the value of the comment.
  2. Make the claim reproducible in the comment itself with an interleaving rather than a principle: A reads version 7, B reads version 7, B commits version 8, A's predicate matches zero rows, A is told it succeeded and A's edit is gone.
  3. Offer the alternative with its cost attached: return 409 carrying the current version and the revision that won, so the client can re-read and re-apply. Note that automatic retry is not the fix, because a retry re-reads the winner's state and reapplies an intent formed against data that no longer exists.
  4. Apply an escalation rule you can state: two round trips on the thread, then a call, and the service's owner decides rather than the reviewer. A reviewer who cannot be overruled is a bottleneck with extra steps.

Follow-up

  • Where would you put the test that fails if someone reintroduces the swallowed zero rowcount?
  • The author says clients cannot handle a 409. How do you check whether that is true?

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

  1. 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.
  2. 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.
  3. 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.
  4. 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?