← IBM Interview Insights

IBM·Software Engineer·Online Assessment (OA)·Junior

JuniorPending
Aug 2026Remote

Summary

Took the IBM entry-level software engineering online assessment and the two questions were wildly different in difficulty. The first was a graph/dependency problem that felt manageable, but the second dropped me into a real codebase with failing tests and a spec, which felt less like a coding challenge and more like an actual job.

Questions Asked (2)

Q1

Solve a graph-based dependency problem as part of a timed online assessment.

Algorithms & Data Structures
Author's notes

Not too bad once I figured out what they were actually asking.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

First, identify that the problem is a dependency graph and determine whether it requires topological sorting, cycle detection, or shortest path. Then, choose an efficient algorithm like Kahn's or DFS with memoization, and implement it carefully while handling edge cases such as cycles and disconnected components.

Pro tip: In timed assessments, start by writing a brute-force solution to pass sample tests, then optimize if time permits. Always test with edge cases like empty input, single node, and cycles to avoid hidden failures.

1. Understand the problem

Clarify what the graph represents (e.g., tasks with dependencies) and what output is required (e.g., valid order, shortest path). Identify constraints like node count and edge count to gauge required efficiency.

2. Model the graph

Choose an appropriate representation: adjacency list for sparse graphs or adjacency matrix for dense graphs. Decide if the graph is directed/undirected and whether weights are involved.

3. Select the algorithm

Match the problem to a known graph algorithm: topological sort for dependency ordering, DFS/BFS for cycle detection, Dijkstra for weighted shortest path, etc. Consider time and space complexity.

4. Implement and test

Write clean code with meaningful variable names. Test with provided examples and edge cases (empty graph, single node, cycle, disconnected components) to ensure correctness.

5. Optimize if needed

If time permits, review for potential optimizations (e.g., using iterative DFS to avoid recursion limit, early termination). Ensure the solution meets the time limit.

Key Points to Mention

  • Graph representation: adjacency list vs. adjacency matrix and their trade-offs
  • Topological sorting algorithms: Kahn's (BFS) and DFS-based, including cycle detection
  • Time and space complexity analysis of the chosen approach
  • Handling edge cases: cycles, disconnected components, empty input, and self-loops
  • Use of data structures like queues, stacks, and priority queues for efficient traversal
  • Potential optimizations: memoization, iterative DFS, and early exit conditions

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q2

Given an unfamiliar backend repository, a technical spec, and a set of failing tests, debug and fix the application so all tests pass within the time limit.

API & IntegrationsRoot Cause AnalysisSystem Design
Author's notes

This one nearly broke me.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by reading the technical spec to understand the expected behavior, then run the failing tests to see the errors. Use a systematic debugging approach: reproduce, isolate, hypothesize, fix, and verify. Prioritize fixes that unblock multiple tests and manage time by tackling high-impact issues first.

Pro tip: Before diving into code, check if the repository has a README or setup script to ensure the environment is correctly configured; many failures stem from missing dependencies or misconfigurations. Also, use git bisect or recent commits to identify when tests started failing, which can quickly point to the root cause.

1. Understand the Spec and Test Failures

Read the technical spec thoroughly to grasp the expected functionality. Run the failing tests to capture error messages and stack traces, noting which tests fail and why.

2. Reproduce and Isolate the Issue

Reproduce failures locally in a controlled environment. Isolate the problem by narrowing down to specific modules or functions using debugging tools or logging.

3. Form and Test Hypotheses

Based on the spec and errors, form hypotheses about the root cause. Test each hypothesis by making minimal changes and re-running tests to confirm or refute.

4. Implement and Verify Fixes

Apply targeted fixes, ensuring they align with the spec and don't break other tests. Run the full test suite to verify all tests pass.

5. Refactor and Document

If time permits, refactor code for clarity and add comments or documentation to explain the fix, demonstrating good engineering practices.

Key Points to Mention

  • Systematic debugging methodology (e.g., reproduce, isolate, hypothesize, fix, verify)
  • Effective use of debugging tools (debugger, logging, stack traces)
  • Prioritization and time management under constraints
  • Understanding of the codebase and spec to ensure correct fixes
  • Running tests frequently to validate changes
  • Communication of progress and blockers if in a team setting

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.