Technology
The tools we build with.
The honest answer is whatever fits the client. This is the default stack we reach for when nothing forces a different choice, and every item on it has earned its place on a real project.
How we choose
Boring beats novel
For anything that has to run unattended we pick the tool with the fewest surprises, not the newest one.
Your team can run it
Everything we ship must be operable by your engineers after we leave, which rules out tools that need a specialist on call.
Easy to remove
We prefer tools you can replace. Lock-in is a cost we would rather not bill you for later.
What we use, and why.
Ten groups and 62 tools, from the language everything is written in to the way it reaches production. One line each on how we use it and why.
01 · Python and data
One language from the first exploration to the production API.
Code lives in packages with tests, not in notebooks. SQL does most of the heavy lifting and dbt keeps it testable.
Python
Every model, pipeline and API we ship is Python, so one team carries a project from the first notebook to production.
pandas
The first look at any dataset, and the feature engineering on anything that fits in memory.
Polars
Takes over from pandas when the data is large or the job must be fast. The same laptop handles ten times the rows.
NumPy
Underneath everything numeric: arrays, linear algebra and the search spaces for tuning.
- SQL
Most of the heavy lifting happens in the database, where the data already is, before Python sees a row.
dbt
SQL transformations as versioned, tested models, so the numbers behind every report can be reproduced.
FastAPI
Models reach production as small, typed HTTP services, with the documentation generated from the code.
Django
The products with users, accounts and admin screens. Batteries included, and boring in the right way.
PostgreSQL
The default database for anything we build: relational, dependable, and the home of pgvector for embeddings.
BigQuery
Analytics at scale on Google Cloud, queried straight from dbt and the BI tools.
02 · Machine learning
Gradient boosting first, then everything else.
For tabular business data LightGBM and XGBoost win more often than the papers suggest. PyTorch comes out for sequences, images and structure.
scikit-learn
Baselines, cross-validation, pipelines and the ensemble glue. The reference for tabular work.
LightGBM
Our first choice on tabular data: fast to train, strong out of the box, and missing values handled natively.

The second boosting library in every ensemble. A different set of biases makes the average better.
CatBoostGradient boosting that takes categorical columns as they are, for data that is mostly labels.
PyTorch
Sequences, images and structured deep learning when trees are not enough. The research standard, so papers port quickly.
SHAPEvery prediction explained in units the business understands. The explanation ships with the model.
NixtlaStatistical and machine learning forecasters behind one interface, for demand and load work at scale.
MLflow
Every experiment, parameter and metric logged, and the registry that decides which model goes to production.
03 · Generative AI
Models are a commodity. Evaluation is not.
Commercial models where data can leave the building, open-weight models in EU regions where it cannot, and an evaluation suite that runs on every change.
Anthropic
Claude for reasoning, extraction and agents where data may leave the building. Our default commercial model.
OpenAI
GPT models and embeddings where a client already runs on them, and a second opinion in evaluations.
- Open-weight models
Llama, Mistral and Qwen, served in an EU region or on your own hardware when data cannot leave.
LangGraph
Agent workflows as explicit graphs with state, retries and human checkpoints, not prompt spaghetti.
pgvector
Embeddings stored beside the data they describe, in the PostgreSQL you already run. No extra vector service.
- Evaluation harnesses
A set of real cases scored on every prompt and model change, so quality is measured, not felt.
04 · Palantir Foundry and AIP
Certified on Foundry, five years in.
Pipelines, Ontology, Workshop applications and AIP use cases, built to Palantir’s own patterns on your enrollment.
Palantir Foundry consultingFoundry
The platform: data integration, lineage and governance on the client’s own enrollment.
AIP
Large language models inside Foundry, with the Ontology as their guardrails and their tools.
Ontology
Objects, links and actions that turn tables into the business’s own vocabulary.
Pipeline Builder
Point-and-click transformations with full lineage, for the pipelines that do not need code.
Workshop
Operational applications for the people who act on the data, built without a front-end team.
Code Repositories
Python and SQL transforms under version control, with checks and branches, for everything else.
AIP Logic
LLM-backed functions that read and write the Ontology, wired into workflows with approvals.
05 · Dashboards and front ends
Interfaces people actually open.
Streamlit and Dash put an internal tool in front of a team in days. Astro and Next.js carry the products that need a real front end.
Streamlit
An internal tool in front of a team in days. The fastest way from a model to a screen someone can use.
Dash
Analytical apps with richer interaction and Plotly charts, when Streamlit runs out of road.
Astro
This site and the content-heavy products: static, fast, and almost no JavaScript shipped by default.
Next.js
Products that need a real application front end, with server rendering and a component ecosystem.
Tailwind CSS
Design tokens in the markup and one system across every screen. No stylesheet nobody dares to touch.
Grafana
Operational dashboards on metrics and logs, for the models and for the machines they run on.
06 · Business intelligence
Your BI tool, not a new one.
We publish to the tools your analysts already use and design the models underneath so that every dashboard agrees on the numbers.
Tableau
Where many analysts already live. We design the data model underneath and publish to it.
Power BI
The Microsoft shops. Reports served from the same warehouse, so every one agrees on the numbers.
dbt
The layer under the dashboards: one definition of revenue, tested and documented.
BigQuery
The warehouse the dashboards query, partitioned and clustered so they stay fast and cheap.
Snowflake
The other warehouse, when a client runs on it. The same dbt models on a different engine.
07 · Cloud
Your cloud, your accounts.
Deployed in your Azure, Google Cloud or AWS tenant, EU-hosted by us for a first project, or on-premise when data cannot leave the building.
Azure
Functions, storage and managed Postgres in the client’s own tenant, with EU regions for data that must stay in Europe.
Google Cloud
BigQuery and Cloud Run for the data-heavy work. Simple pricing, strong analytics.
AWS
S3, ECS and the rest of the catalogue when the client’s estate already runs there.
Cloudflare
DNS, caching and protection in front of everything we host, and Pages for the static sites.
- Object storage
Raw data, artefacts and models live in buckets with lifecycle rules, never on someone’s laptop.
Managed Postgres
Backups, failover and patching handled by the cloud, so we operate the data, not the database.
08 · Pipelines and streaming
Every job has an owner, an alert and a retry.
Airflow where a client already runs it, Databricks where the data already lives there, Kafka where it arrives as a stream.
Airflow
Scheduling and dependencies where a client already runs it. Every job gets an owner, an alert and a retry.
Databricks
Spark, notebooks and jobs on the lakehouse when the data already lives there. We build to its patterns.
Kafka
Events as they happen, for the cases where a nightly batch is a day too late.
dbt
The transformation layer inside the pipeline, tested on every run.
09 · AI engineering tools
Agents in the loop, engineers in charge.
We build with Claude Code and Codex every day. Review and tests decide what ships, and the same tools go into the workflows we build for clients.
Claude Code
Our daily pair: it plans, implements and tests against the codebase. Review and tests decide what ships.
OpenAI Codex
A second agent on parallel tasks and a cross-check on the first. Different models, fewer blind spots.
Claude API
The same models wired into client workflows: extraction, classification, and agents with tools.
GitHub
Pull requests, review and CI as the gate for human and agent work alike.
10 · Deployment and DevOps
Small, stateless, observable.
Containers on managed services, infrastructure as code and CI/CD from the first commit. Kubernetes only when the workload earns it.
Docker
Every service ships as a container, so it runs the same on a laptop, in CI and on the cloud.
Git
Version control for code, configuration and infrastructure alike. Nothing ships from a folder.
GitHub
Repositories, reviews and issues. The system of record for everything we build with a client.
GitHub Actions
Tests, builds and deployments on every push, defined next to the code they check.
Terraform
Infrastructure as code, reviewed and versioned, so an environment can be rebuilt rather than remembered.
Kubernetes
Only when the workload earns it: many services, real scale, or a client platform already on it.
Linux
Everything runs on it. We keep the servers minimal and the images small.
Nginx
Reverse proxy and TLS in front of the services. Simple, fast, predictable.
Prometheus
Metrics from every service and model, with alerts on the numbers that matter.
Grafana
The dashboards on top of Prometheus and the logs, shared with the client’s operations team.
Cloudflare Pages
Static sites deployed from the repository on every push, with a preview for each branch.
What we stopped using.
- Notebooks as the unit of delivery. Excellent for exploration, terrible for production. Code moves into packages with tests before anything ships.
- Kubernetes for small workloads. A container on a managed service is enough for most models and far easier to operate.
- Platforms that promise everything. Every one we evaluated did one thing well and four things badly, and the client paid for all five.
Want this stack on your problem?
Tell us what you run today. We will tell you what we would keep, what we would add and what it would take.