Capital Fund Management · Software Engineer
Updated · 2026-10-02

Capital Fund Management Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Candidates describe Capital Fund Management software roles as building and maintaining the systems behind trading and investment operations. The reported work is writing, testing and maintaining applications, turning algorithms from quantitative analysts into working code, tuning performance, and fixing problems in systems that already run. Engineers are reported to work alongside quantitative analysts, traders and other engineering teams on software that handles large volumes of data. The stack candidates list is C++, Python and SQL on Linux, with cloud services and microservices as extras and prior financial software as a bonus.

This guide is for software engineers preparing for Capital Fund Management, typically people with a few years of professional experience (the requirements candidates describe mention roughly 2-5 years). It covers the three reported stages, the technical topics candidates list (C++, SQL, Python, Linux command line, algorithms, design patterns), the system design and case-study questions that were reported, and the behavioral stories you should have ready. It also includes a seven-day plan.

Candidates report three stages over roughly 3-5 weeks: a Coding Assessment taken as a coding game, an HR Interview on past experience, and Technical Interviews with managers and team members. This is a candidate-described sequence, not a published process.

C++SQLLinux (command line)

28 min read

Browse Software Engineer questions

See the practice prompts

15Practice promptsAcross five skill areas

The reported topic list is concrete and narrow: C++, SQL, Linux command line, algorithmic problem solving, and the design patterns Builder, Decorator and Factory, with Python also named among the languages. That makes preparation less about breadth and more about being fluent in a small set. You should be able to write a linked-list reversal, a two-sum solution and a binary search in C++ without hesitation, explain how you would speed up a slow SQL query, and show each of the three patterns in code rather than recite their definitions.

The reported questions also reach beyond coding. Candidates mention designing a notification system for a trading application, comparing microservices with a monolith, designing a database schema, preparing a dataset for machine learning, and evaluating a new trading algorithm. These sit close to the work described for the role, where engineers support quantitative analysts and traders. Prepare them as short, structured answers: state assumptions, name the components, and call out the failure modes (duplicate or late messages, ordering, look-ahead bias in a backtest, leakage in preprocessing).

Three of the reported questions are behavioral: a challenging project and what you learned, prioritising several projects, and handling conflict in a team. A fourth, debugging a complex C++ issue, is a technical story. Candidates also say the HR stage centres on past experiences and the technical stage on coding challenges and experience, so the same few projects will be discussed twice, once as a story and once at code level. Pick two or three projects you can describe in both ways and know their details cold.

01

Coding Assessment

reported

Candidates report that the first stage is a coding game, with CodinGame named as an example of the platform. It is an online, problem-solving exercise rather than a conversation, so the working code you submit is what counts. Because the loop's topic list names C++, Python and algorithmic problem solving, treat it as a puzzle-style coding test: read the statement carefully, choose a data structure, and handle edge cases before you submit.

What to demonstrate

  • Working code for algorithmic problems under a time limit
  • Command of core data structures and algorithms such as sorting, searching and graph traversal, which candidates list as topics
  • Comfort in the language you pick, with C++ and Python both named in the requirements

How to prepare

  • Solve a few puzzle-style problems on a game-based platform with a timer you set yourself, in the language you will use on the day.
  • Rehearse the reported coding questions in C++: reverse a linked list, find two numbers that add up to a target, and implement binary search, including empty input and off-by-one boundaries.
  • Refresh the STL containers you will reach for (vector, unordered_map, set, priority_queue) and their complexity, so that you do not look them up mid-problem.
Capital Fund Management Software Engineer candidate reports ↗
02

HR Interview

reported

Candidates describe the HR Interview as a conversation about cultural fit and past experiences, with behavioral questions. The reported behavioral questions concern a challenging project, prioritising several projects, and conflict within a team, and the C++ debugging story fits this stage's focus on experience. Go in with a short list of real stories and a plain account of why this kind of work interests you.

What to demonstrate

  • Your account of your own role and decisions in past projects
  • How you describe working with colleagues, prioritising and handling disagreement
  • Communication and motivation for the role

How to prepare

  • Write one story each for: a challenging project, a prioritisation trade-off, a team conflict and a hard C++ bug, each in first person with a measurable result.
  • Prepare a concise explanation of why you want to work on software close to trading and quantitative research, based on your own experience rather than guesses about the firm.
  • Have a few questions ready about the team, the codebase and how engineers work with quantitative analysts.
Capital Fund Management Software Engineer candidate reports ↗
03

Technical Interviews

reported

Candidates report technical interviews in which managers and team members discuss coding challenges and your experience in depth. Expect to talk through code you have written and problems you would solve, which makes this the stage to be fluent in C++, SQL, Linux command line and design patterns. The system design and case-study questions that were reported (the trading notification system, microservices versus a monolith, schema design, data preprocessing, evaluating a trading algorithm) are good practice for this kind of discussion.

What to demonstrate

  • Depth in the listed technologies: C++, SQL, Python and the Linux command line
  • Reasoning about algorithms and data structures, spoken aloud
  • Design choices, including patterns such as Builder, Decorator and Factory, and system trade-offs
  • Technical depth in your own past work

How to prepare

  • Practise explaining a SQL optimisation end to end: read the plan, check indexes and join order, rewrite, and measure.
  • Write a small Builder, a Decorator and a Factory in C++ and be able to say what each one would let you change later without editing existing code.
  • Prepare two or three designs aloud: the trading notification system, a schema for a new application, and a monolith versus microservices comparison for a trading system.
  • Rehearse how you would assess a trading algorithm: out-of-sample testing, transaction costs, risk-adjusted metrics and the ways a backtest misleads.
Capital Fund Management Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Treating the coding game as a warm-up and reading it for the first time on the day

Do puzzle-style problems under your own timer in the language you will use. Practise reading a long statement, extracting the input limits, and choosing a data structure before typing.

02

Giving linked-list reversal, two-sum or binary search as an outline without the edge cases

Write each in C++ and test empty input, a single node, a repeated value, using the same element twice, and an index calculation that overflows. For binary search, state the loop invariant and whether the bounds are inclusive.

03

Reciting definitions of object-oriented principles or of Builder, Decorator and Factory with no code

Keep a small C++ example of each and say what it lets you change later without editing existing code. For the principles, tie each (encapsulation, inheritance, polymorphism, abstraction) to a class hierarchy you have actually written.

04

Telling project, conflict and debugging stories as "we", with no decision of your own and no method

Prepare each story with your role, the options you considered, the choice and the result. For the C++ bug, give the sequence: reproduce, minimise, hypothesise, confirm with a tool, fix, add a test.

05

Answering the trading-application design and algorithm-evaluation questions generically

For the notification system, cover delivery guarantees, duplicates, ordering and what happens when a consumer is down. For evaluating a trading algorithm, cover out-of-sample data, look-ahead bias, transaction costs and risk-adjusted measures, not just total return.

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

11 technical prompts0 include a worked solution

Write a function to reverse a linked list.

medium
Coding / Algorithms

Write a function to reverse a linked list.

Approach
  1. Write the iterative three-pointer version: prev = nullptr, curr = head. In the loop, save next = curr->next, set curr->next = prev, then advance prev = curr and curr = next. Return prev. It runs in O(n) time with O(1) extra space.
  2. Mention the recursive version (reverse the rest, then head->next->next = head and head->next = nullptr). Its O(n) call depth can overflow the stack on a long list, so the iterative version is the safer default.
  3. Walk the edge cases: an empty list returns nullptr, a single node returns itself, and with two nodes the old head's next must end up null so no cycle is left behind.
  4. In C++, say who owns the nodes. Raw-pointer relinking allocates nothing. If nodes are held by std::unique_ptr, move ownership explicitly at each step. For a doubly linked list, swap prev and next on every node.
  5. Test it by building a list, reversing it, printing it, and reversing it again to check that you get the original order back.
Follow-up
  • Reverse only the nodes between positions m and n, in one pass.
  • Reverse the list in groups of k nodes.
  • Check whether a linked list is a palindrome using O(1) extra space.

Given an array of integers, find two numbers such that they add up to a specific target.

medium
Coding / Algorithms

Given an array of integers, find two numbers such that they add up to a specific target.

Approach
  1. Clarify the contract: return indices or values, whether exactly one answer is guaranteed, whether one element can be used twice, whether negatives and duplicates appear, and whether the input is sorted.
  2. Give the brute force first: check every pair in O(n^2) time and O(1) space.
  3. Use a single-pass hash map from value to index. For each x, look up target - x before inserting x. That ordering handles duplicates such as [3, 3] with target 6 and never pairs an element with itself. The cost is O(n) average time and O(n) space, since std::unordered_map is O(1) on average but O(n) in the worst case.
  4. Offer the alternative: sort, then move two pointers inward, which is O(n log n). It uses O(1) extra space only if you can sort in place and lose the original indices. Keeping the indices means sorting (value, index) pairs. It is the better choice when the input is already sorted.
  5. Flag numeric edge cases in C++: target - x can overflow int, so compute in long long. Also state what to return when no pair exists.
Follow-up
  • Return all unique pairs that sum to the target, without duplicates.
  • Extend it to three numbers that sum to the target, and give the complexity.
  • Design a structure with add(number) and find(target) when one of the two operations is much more frequent.

How would you implement a binary search algorithm?

medium
Coding / Algorithms

How would you implement a binary search algorithm?

Approach
  1. State the precondition (sorted input, or more generally a monotonic predicate) and choose one interval convention. With half-open [lo, hi), loop while lo < hi and set either lo = mid + 1 or hi = mid.
  2. Compute mid = lo + (hi - lo) / 2 so lo + hi cannot overflow. Each step halves the range, giving O(log n) time and O(1) space when written iteratively.
  3. Separate the variants: exact match, lower_bound (first index with a[i] >= target) and upper_bound (first index with a[i] > target). C++ std::lower_bound and std::upper_bound and Python bisect_left and bisect_right follow these definitions, and upper_bound - lower_bound counts the occurrences.
  4. Walk the edge cases: an empty array, a target below the minimum or above the maximum, runs of duplicates, and the infinite loop you get if you set lo = mid with a closed interval when hi = lo + 1.
  5. Generalise to binary search on the answer: if feasible(x) is monotonic, search for the smallest feasible x, as in the minimum capacity to ship within D days or an integer square root.
Follow-up
  • Find the first and last positions of a target in a sorted array with duplicates.
  • Search for a target in a rotated sorted array.
  • How do you binary search for the smallest value that satisfies a monotonic condition?

How would you evaluate the performance of a new trading algorithm?

medium
Problem-Solving / Case Studies

How would you evaluate the performance of a new trading algorithm?

Approach
  1. Define performance as return against risk: annualised return and volatility, the Sharpe ratio (mean excess return over its standard deviation, annualised by the square root of periods per year under an i.i.d. assumption), maximum drawdown, turnover and hit rate, compared with a benchmark or a simple baseline strategy.
  2. Make the backtest honest. Use point-in-time data so no decision sees future information, include delisted instruments to avoid survivorship bias, and charge realistic transaction costs, slippage, market impact and execution delay.
  3. Guard against overfitting. Keep an untouched out-of-sample period, use walk-forward validation, and count how many parameter sets were tried, because the best of many backtests has an inflated Sharpe ratio.
  4. Test significance. With per-period Sharpe S over n independent periods, the t-statistic of the mean return is about S times the square root of n. Check that the result holds across sub-periods and market regimes, not only in one window.
  5. Validate beyond the backtest with paper trading or small live capital. Compare live fills against the simulated ones, monitor for decay, and estimate capacity: how much capital the strategy can trade before its own impact erodes the edge.
Follow-up
  • The backtest Sharpe ratio is high but live results are flat. What do you check first?
  • How do you judge whether a Sharpe ratio is meaningful when many variants were tested?
  • How would you model transaction costs for a strategy that trades very frequently?

The plan follows the reported loop: it starts with the coding game format, covers the languages and topics candidates list, rehearses the reported design and case-study questions, and ends with the behavioral stories.

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 set up timed coding practice
  • Write down the three reported stages and the topics candidates list (C++, SQL, Python, Linux command line, algorithms, design patterns), and mark the two you are weakest in.
  • Solve two puzzle-style problems in the language you will use for the coding game, with a timer you set yourself, and note where you lost time reading or debugging.

Deliverable: A one-page loop map with your two weakest topics marked, and a short note on where time went in the two timed puzzles.

02Core algorithms in C++
  • Write the linked-list reversal iteratively and recursively, and test the empty list and the one-node list.
  • Solve the two-numbers-to-a-target problem with a hash map, then with sorting and two pointers, and compare time and memory.
  • Implement binary search with inclusive and half-open bounds, plus a lower-bound variant, and test duplicates and missing targets.

Deliverable: Three tested C++ functions with a note of the complexity and edge cases for each.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
03SQL performance and schema design
  • Take a slow query on a table you build locally, read its plan, add or change an index, rewrite the join, and record the before and after plans.
  • Sketch a schema for a new application with keys, constraints, normalisation choices and the indexes the main queries need.

Deliverable: A before-and-after query plan comparison and a schema sketch with its main queries.

Practice prompt ↗Practice prompt ↗
04OOP, design patterns and Linux command line
  • Write a short explanation of encapsulation, inheritance, polymorphism and abstraction, each with a C++ class example.
  • Implement a Builder, a Decorator and a Factory in C++ and write one sentence on when each is the wrong choice.
  • Use grep, sort, uniq, awk and xargs to answer five questions about a large log or CSV file on the command line.

Deliverable: One C++ file with the three patterns, and five saved shell one-liners with their outputs.

Practice prompt ↗
05Design and case-study answers
  • Design the trading-application notification system out loud: producers, queue, delivery, deduplication, ordering and failure handling.
  • Prepare a two-column comparison of microservices and a monolith for a trading system, ending with a recommendation.
  • Write your approach to preparing a dataset for machine learning and to evaluating a new trading algorithm, naming leakage, look-ahead bias and transaction costs.

Deliverable: Three structured spoken answers, each with its assumptions and failure modes written down.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
06Debugging in C++
  • Write up your best C++ debugging story using the sequence reproduce, minimise, hypothesise, confirm with a tool, fix, add a test.
  • Work through the debugging practice question in PracHub's practice set, stating your hypotheses before you open any file.

Deliverable: A written debugging story and a short log of the hypotheses you tested on the practice question.

Practice prompt ↗Practice prompt ↗
07Behavioral stories and a full run-through
  • Rehearse the challenging-project, prioritisation and team-conflict answers aloud, in first person, and cut each to a clear structure.
  • Run a full mock: one timed coding problem, one design question, then the three behavioral prompts, and write down what to fix.
  • Prepare three questions about the team, the codebase and working with quantitative analysts.

Deliverable: Three rehearsed stories, a list of fixes from the mock run, and your list of questions.

Practice prompt ↗Practice prompt ↗Practice prompt ↗

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

Candidates describe the HR stage as a conversation about cultural fit and past experiences, and the technical stage as returning to experience in more depth. For this role, prepare stories that show your own decisions, how you work with colleagues and quantitative users, and how you handle a difficult bug in production-style code.

Describe a time when you had to debug a complex issue in a C++ application.

medium
Technical / Domain Questions

Describe a time when you had to debug a complex issue in a C++ application.

Approach
  1. Choose a bug that was hard to find, not one that was only urgent, and state its symptom in a sentence or two, for example a crash that appeared only in release builds or only under load.
  2. Walk through your method in order: reproduce it reliably, shrink the input or the code path, form a hypothesis, then confirm it with a tool such as gdb or a core dump, AddressSanitizer, UndefinedBehaviorSanitizer, Valgrind, or ThreadSanitizer for races. Say why you chose that tool.
  3. Name the root cause precisely, for instance a dangling reference, iterator invalidation, use after free, uninitialised memory, a data race, or an integer overflow, and explain how it explains every symptom you saw.
  4. Close with the fix, a regression test that fails without it, and what you changed to prevent the class of bug (smart pointers, sanitizers in CI, a code review rule). Keep the story about your decisions, not the team's.
Follow-up
  • The bug only appeared in the optimised build. How would you have narrowed it down?
  • How did you know the fix addressed the cause rather than hiding the symptom?
  • What would you have changed in the code or tooling so a colleague would have caught it earlier?

Describe a challenging project you worked on. What was your role, and what did you learn?

medium
Behavioral / Leadership

Describe a challenging project you worked on. What was your role, and what did you learn?

Approach
  1. Pick a project where the difficulty was technical or organisational and real, and state your role in the first sentence: what you owned, what the scope was, and who else was involved.
  2. Use a situation, task, action, result structure but spend most of the time on actions: the options you weighed, the one you chose and the trade-off you accepted. For this role, a project involving data volume, performance or correctness is a natural fit.
  3. Say what made it hard in concrete terms (an unclear requirement, a performance target, a legacy system) and what you did when the first approach failed.
  4. End with a measurable result and a specific lesson that changed how you work afterwards. Say "I" for your decisions and name teammates for theirs; a story told entirely as "we" hides your part.
Follow-up
  • Which decision on that project would you now make differently, and why?
  • What was your part, and what did colleagues do?
  • How did you know the project had actually succeeded?

How do you prioritize tasks when working on multiple projects?

medium
Behavioral / Leadership

How do you prioritize tasks when working on multiple projects?

Approach
  1. Answer with a method and then a real example. Method: list everything you owe, estimate the impact and deadline of each, identify dependencies and blockers, then order by impact and deadline and agree the order with the people affected.
  2. Describe a concrete moment when two projects collided, say what you chose to do first, and what you deliberately delayed or dropped.
  3. Show the communication step: whom you told, how you reset expectations or negotiated scope, and what you did when a request was marked urgent by someone else.
  4. Show how you check in afterwards, for example by re-ranking when new information arrives, and give an outcome, such as a deadline met or a risk avoided. A generic claim of using a task list without a trade-off shows no judgement.
Follow-up
  • Two stakeholders both say their request is the top priority. What do you do?
  • Tell me about something you decided not to do, and how you told the person.
  • What happens to your ordering when a production issue arrives mid-week?

Can you give an example of how you handled conflict within a team?

medium
Behavioral / Leadership

Can you give an example of how you handled conflict within a team?

Approach
  1. Choose a genuine disagreement about work, such as a design choice, a code review comment or a deadline, not a personality clash, and describe both positions fairly without casting the other person as the problem.
  2. Show how you moved it forward: you listened for the reason behind their view, found the actual point of difference, and used evidence such as a benchmark, a prototype or a test case to settle it.
  3. Say whether you compromised or held your position, and what you did when it stayed unresolved, such as bringing in a manager after trying to settle it directly.
  4. Finish with the outcome for the project and for the working relationship, and one thing you now do earlier to avoid that kind of conflict. A story with no tension, or one where you simply won, shows little.
Follow-up
  • What if the other person still disagreed after you showed the data?
  • When would you take a disagreement to your manager?
  • Would you handle it differently if the colleague were more senior than you?
  • 01

    Describe a challenging project you worked on. What was your role, and what did you learn?

  • 02

    How do you prioritize tasks when working on multiple projects?

  • 03

    Can you give an example of how you handled conflict within a team?

  • 04

    Describe a time when you had to debug a complex issue in a C++ application.

  • 05

    What design patterns have you used in your projects, and why?

  • 06

    How do you make sure your code is good before it is deployed?

PracHub preparation framework ↗
What stages do candidates report for the Software Engineer loop?

Candidates report three stages: a Coding Assessment taken as a coding game (CodinGame is named as an example of the platform), an HR Interview about cultural fit and past experiences, and Technical Interviews with managers and team members about coding challenges and experience. Treat this as a candidate-described sequence rather than a published process.

PracHub Software Engineer practice ↗
How long does the process take?

Candidates report roughly 3-5 weeks across the three stages, and another report in the same material puts it at 4-6 weeks depending on scheduling. Plan for the longer end, and keep your practice going between stages instead of preparing everything at the start.

PracHub Software Engineer practice ↗
Which technologies should I prepare?

The requirements candidates describe list C++, Python and SQL, plus experience with Linux and its command-line tools, and an understanding of algorithms and data structures. The topics reported for the technical stage are C++, SQL, Linux command line, algorithmic problem solving and the design patterns Builder, Decorator and Factory. Cloud services, microservices and financial software experience are described as extras.

PracHub Software Engineer practice ↗
How should I prepare for the coding game?

Practise puzzle-style problems on a game-based coding platform with a timer you set yourself, in the language you will use. Rehearse the classic problems reported, reversing a linked list, finding two numbers that add up to a target and binary search, until you can write them correctly with edge cases. Check how the platform reads input and prints output before the day.

PracHub Software Engineer practice ↗
Do I need to prepare system design and case-study questions?

Candidates report questions on a notification system for a trading application, microservices versus a monolith, database schema design, preparing a dataset for machine learning, and evaluating a new trading algorithm. Prepare each as a structured spoken answer with assumptions, components and failure modes, which also helps in the technical discussions.

PracHub Software Engineer practice ↗
Is on-site work or finance knowledge required?

Candidates report that most positions are on-site in Paris, and that the policy may change, so ask during the process. Basic familiarity with financial concepts is reported as helpful, not required; reading about how trading systems and quantitative research use software is enough to follow the conversation.

PracHub Software Engineer practice ↗
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.