Skip to content
ALGOLOGIX

Product & platform

Data engineering & analytics

Ingestion, transformation, warehousing and the analytics on top. Most disappointing AI projects are a data problem wearing a model costume, so this is often the work that has to happen first.

  • ELT
  • Streaming
  • Warehouse & lakehouse
  • dbt
  • Data quality
  • BI

What we build

Ingestion and ELT pipelines
Reliable extraction from your sources, with backfill and replay built in.
Warehouse and lakehouse models
Dimensional models that answer the questions the business actually asks.
Streaming pipelines
Event processing where a nightly batch is too late to be useful.
Data quality and contracts
Tests, freshness checks and schema contracts that fail loudly rather than silently.
Analytics and reporting
Metrics defined once, so two dashboards cannot disagree about revenue.

Problems this solves

  • Problem
    Two dashboards give two different answers to the same question.
    Approach
    Define metrics once in a versioned semantic layer and build every report from it.
    Outcome
    One definition, reviewable in a pull request, and the argument stops.
  • Problem
    A pipeline breaks quietly and the numbers are wrong for a week.
    Approach
    Freshness and volume tests on every model, with alerting on the test rather than on the job's exit code.
    Outcome
    A broken source is an alert within the hour instead of a discovery at month end.
  • Problem
    The AI project stalls because the data is not usable.
    Approach
    Build the ingestion, cleaning and labelling path as the first slice, and evaluate the model on it early.
    Outcome
    The feasibility question gets answered in weeks rather than after a build.

How we approach it

  1. Discover

    We trace the numbers you already report back to where they come from. That usually finds the real problem, and it is almost never the model.

  2. Design

    The warehouse is modelled for the questions being asked, and the data contracts are written at the same time. A contract is what makes a pipeline fail loudly instead of quietly.

  3. Engineer

    Pipelines are code, with tests, partitions and backfills. Every transformation is reproducible from raw, because a number nobody can rebuild is a number nobody should trust.

  4. Evaluate & harden

    Freshness, volume and referential checks block downstream assets rather than emailing somebody. Cost is attributed per pipeline, so an expensive query is visible before the invoice is.

  5. Launch & operate

    Your analysts work in the warehouse without going through us. Lineage and documentation ship with it, because a pipeline one person understands is an outage waiting for a holiday.

What we build it with

A partitioned asset and a blocking contract check, so nothing downstream builds on data that failed it and nobody finds out a fortnight later.

assets/orders.py
"""A pipeline that fails loudly rather than quietly."""

import dagster as dg

DAILY_FROM_LAUNCH = dg.DailyPartitionsDefinition(
    start_date="2026-01-01",
)


@dg.asset(
    partitions_def=DAILY_FROM_LAUNCH,
)
def orders(context: dg.AssetExecutionContext) -> dg.MaterializeResult:
    day = context.partition_key
    rows = warehouse.load("raw.orders", where=f"day = '{day}'")
    return dg.MaterializeResult(metadata={"rows": len(rows)})


# `blocking` is the whole point: downstream assets do not run
# on data that failed its contract, so nobody builds a report
# on top of it and finds out a fortnight later.
@dg.asset_check(asset=orders, blocking=True)
def every_order_has_a_customer() -> dg.AssetCheckResult:
    orphans = warehouse.count(
        "orders o left join customers c on c.id = o.customer_id "
        "where c.id is null"
    )
    return dg.AssetCheckResult(
        passed=orphans == 0,
        metadata={"orphans": orphans},
    )

Databases

  • ClickHouse

Data platform

  • Airflow
  • Dagster
  • dbt
  • Spark
  • Flink
  • Snowflake
  • BigQuery
  • Iceberg
The full inventory

Related work

  • Healthcare · 2026

    A knowledge assistant that shows its sources

    A retrieval assistant over clinical policy and procedure documents, answering staff questions with span-level citations and refusing to answer when the documents do not support one.

    Answers carrying a verifiable citation
    • rag knowledge systems
    • generative ai
    • data engineering analytics
    Read a knowledge assistant that shows its sources
  • Retail · 2026

    Turning supplier documents into records

    A document-extraction pipeline for a retail group, classifying and extracting structured records from supplier invoices and delivery notes arriving in every format a supplier felt like using.

    Documents extracted without human review
    • generative ai
    • data engineering analytics
    • backend apis
    Read turning supplier documents into records

Questions we get asked

Do we need a warehouse before we can do anything with AI?

Not always, but you do need the specific data the feature reads to be reachable, clean and fresh enough. We scope that narrowly during Discover rather than proposing a platform programme in front of a feature you wanted this quarter.

Batch or streaming?

Batch unless the decision the data feeds genuinely cannot wait. Streaming roughly doubles the operational surface, so it should be paid for by a real requirement rather than by the architecture diagram looking more modern.

How do you keep the numbers trustworthy?

Metrics defined once in a versioned semantic layer, tests for freshness, volume and distribution on every model, and alerting on the tests. Data pipelines are treated as software — reviewed, versioned and deployed like any other service.

Can you work with our existing warehouse?

Yes. Snowflake, BigQuery, Databricks, Redshift or Postgres — we build into what you already run and pay for. Migrating a warehouse is a project of its own and should be justified on its own terms, not smuggled into a feature build.

Tell us what you are trying to ship.

A first call is 30 minutes and costs nothing. Bring the problem rather than a spec — the useful part is usually working out whether this is the right shape of solution at all.