Hi, and thanks for making time for this.
You're a data engineer at Nordvik Sparebank, a Norwegian regional savings bank. Today their analytics run directly against a Postgres read-replica. They've asked you to build a small warehouse layer that gets one specific business job done end-to-end.
Most candidates spend two to three hours on this. Spend more if you want, spend less if you want. There's nothing to hand in: when you're done, you'll walk us through what you built. We're more interested in how you think and the calls you made than in any particular output.
We use havn, a self-hosted data platform built on DuckDB. Plain SQL transforms, Python ingest, single-file warehouse. If you've used dbt or Databricks you'll be productive in minutes.
Pick the question that sounds most interesting to you. You don't need to do more than one.
Nordvik's compliance team wants a defensible shortlist of transactions worth investigating. They're tired of looking at "anything over NOK 50,000" and getting either nothing or thousands of rows. Build them something better, and explain what "suspicious" means in your model.
The CFO wants a one-page monthly summary she can read on her phone: total revenue, fee income, active customers, active accounts, top branches, trend versus prior month. Same numbers every month, reconciling cleanly to last month's report, with footnotes for anything that's been restated since.
The retail team wants a per-customer monthly view: inflow, outflow, net flow, top spend categories, churn signals. They'll use it to segment and to prioritise outreach. PII handling is on you; compliance will ask.
Whatever you'd be comfortable presenting. As a starting point:
havn project that builds end-to-end and
answers your route's question.havn projects ship with bronze/, silver/,
gold/ folders under transform/. Use them as you
see fit. We have no prescription for which models to build, what schemas
look like, or what they're called. That's part of what we want to see.
Three setups. Pick the one that matches what you want the two to three hours to be about. All three see the same data and we evaluate them the same way.
The ingest script is already written for you. The five raw tables land
in landing.* when you run it, and you spend your time on
modelling.
pip install havn
havn init nordvik --from https://altrocase.demant.app/bootstrap-with-ingest.tar.gz
cd nordvik
havn serve
Empty scaffold. You write the Postgres-to-DuckDB ingest yourself, then the modelling on top.
pip install havn
havn init nordvik --from https://altrocase.demant.app/bootstrap-no-ingest.tar.gz
cd nordvik
havn serve
Skip havn entirely. Download the five raw tables as Parquet and use whatever you like: pandas, polars, R, DuckDB CLI, BigQuery, your own warehouse. Same data, same evaluation. Tell us what you used when we walk through the work together.
curl -O https://altrocase.demant.app/nordvik-data.tar.gz
tar -xzf nordvik-data.tar.gz
cd nordvik-data
# customers.parquet, accounts.parquet, transactions.parquet,
# fx_rates.parquet, branches.parquet
Customer master. ~10,000 rows
Accounts per customer. ~19,000 rows
Three years of activity. ~2,600,000 rows
Daily FX rates to NOK. ~3,800 rows
Branch master. ~120 rows
2023-01-01 to 2025-12-31.