Finance and strategy consultant in Zürich — CFO advisory, global business services, finance transformation. Currently at EY.
I write code because consulting runs on information that arrives a week too late to change a decision. Most of what's here is an attempt to close that gap: pipelines that read the market on a schedule, retrieval over financial reporting, and process analysis that turns an operation's own exhaust into a number someone can act on.
I'm not a software engineer by training. The projects below run in production anyway.
p2p-process-mining
Process mining on a real 1.6M-event SAP purchase-to-pay log. Only 20% of 251,734
cases follow the process's own most common path — the rest scatter across 11,973
variants. Rework carries a 19.6-day median cycle-time penalty, and the expensive
rework is not the common kind. Includes a citation-grounding eval for LLM-written
case narratives: every claim checked against the raw event log rather than judged
by a second model.
Python · DuckDB · LLM API · matplotlib
gbs-agentic-shift
McKinsey argues agentic AI is turning the GBS talent pyramid into a diamond — a
shrinking transactional base and a new layer managing the "agent force."
Classified 2,110 live GBS/finance-operations postings across ten markets to test
that claim against the market instead of the pitch deck: agent-ops roles are 2%
of postings, and the transactional base didn't shrink so much as move to
third-party providers — 84% transactional there versus 38% at captive functions.
Python · DuckDB · LLM API · matplotlib · pytest
gbs-business-case
The other half of the same problem: what those findings are worth. Baseline
measured from the same 1.6M events instead of estimated in a workshop, with
measured facts and assumptions held in separate files so a reader can see which
half of the answer is evidence. Monte Carlo over the declared ranges, plus a
variance decomposition that says which week of diligence buys the most
confidence. At central assumptions the case does not clear the hurdle —
NPV −€142,931, 26% odds of a positive result — because reworked cases average
1.48 touches, not the multi-touch slog usually assumed.
Python · DuckDB · NumPy · matplotlib
dax-intelligence
Ask one question across 15 DAX 40 annual reports, get an answer with company and
page citations, behind a prompt that will not answer without a source. Retrieval
and generation eval harness: precision@k / recall@k, faithfulness, citation
accuracy.
Python · ChromaDB · Streamlit · pytest
fpa-decision-model
A driver-based forecast for adidas AG, backtested against what actually happened
instead of validated on its own assumptions. Built from FY2024 data and adidas's
own stated FY2025 guidance, it beat a naive top-down extrapolation on every
metric — free cash flow error of 3.4% versus 14.8%. A Monte Carlo run shows
working-capital assumptions, not revenue growth, explain most of that
uncertainty.
Python · NumPy · LLM API · pytest
gbs-intelligence-agent
69 RSS feeds across 33 consulting firms, analyst houses and client companies.
The LLM scores every article 0–3 for strategic relevance; only the top tier
reaches the Monday brief, the rest stay searchable in a dashboard. 1,132 articles
scored, 30 reached the brief, 16 weekly editions shipped without a manual step.
Python · LLM API · SQLite
Python, DuckDB, ChromaDB, SQLite, the LLM API. Where something needs a UI I tend to write plain HTML — the dashboards are single files you open in a browser, no server, no build step. Easier to hand to a colleague that way.
Where a project makes a claim, there is a script that reproduces it.
MSc Financial Economics, Erasmus University Rotterdam.