Case study 09 · Engineering Lifecycle Services

A pipeline engine that runs, pauses and resumes data workflows

The orchestration core of a low-code platform, running visually connected steps in dependency order with breakpoints and resumable runs.

Partner
An international consulting group
Period
October 2024 to January 2026
Photo: Andrew Whitmore on Unsplash
Step types
13
Readers, transformers, aggregators, LLM analysis and writers
Ways to run
3
On demand, on a schedule or as a published endpoint
From saved outputs
Resume
Partial re-runs without repeating earlier steps

The challenge

The platform let users connect data steps visually. Something had to run those graphs correctly, with branches and merges, and let users inspect and repeat parts of a run while building it.

What we built

An orchestration engine that runs each step once all of its inputs are ready, stores every step's input and output with its schema, supports breakpoints, and can rebuild typed data from a previous run to resume without repeating earlier steps.

What was delivered

  • Fan-out and fan-in across steps, run in dependency order
  • Breakpoints and per-step control over what is logged
  • Runs started on demand, by cron schedule or through a published endpoint

Partner background

Our partner is an international consulting group whose teams work with large volumes of documents, spreadsheets, databases and email. It wanted one internal platform where those teams could build data pipelines and AI agents themselves, instead of commissioning a new application for each need. The platform had to run inside the partner's Microsoft 365 and Azure environment, keep each team's work separate, and move work from experiment to production through controlled environments.

The challenge

Graphs, not lists

Users connect steps freely. A join waits for two inputs, and one output can feed several writers. Running steps in the order they were drawn would produce wrong results.

Building is iterative

While designing a pipeline, users need to stop at a step, inspect the data and change something, without paying for every earlier step again.

Sensitive data in logs

Some steps handle data that should not be stored in run logs.

Objectives

  • Run any valid graph of steps in correct dependency order
  • Support breakpoints for inspection during design
  • Resume runs from saved outputs
  • Control logging of inputs and outputs per step
  • Run pipelines on demand, on a schedule or as an endpoint

Our role

CharCentric provided technical leadership and architecture within a multidisciplinary engineering team, and contributed directly to implementation. The platform was built over 16 months, from October 2024 to January 2026, as a Python and FastAPI backend on Azure.

Scope and timeline

The orchestration engine was built between October 2024 and May 2025. Run controls, triggers and publication followed between January and November 2025.

Delivery timeline from the project history, against the overall platform build
Delivery timeline from the project history, against the overall platform build

Approach

Count inputs, release when ready

The engine counts the incoming connections of every step. Steps with none start first. Each time a step finishes, its outputs are passed on and the waiting count of each target drops. A step runs when its count reaches zero.

Store data with its shape

Every step output is stored with a JSON Schema of its data. When a run resumes, the engine rebuilds typed models from the stored schema, so resumed steps receive the same data types as in the original run.

One interface for every step

All steps share one interface and are created by a factory. A scaffolding command generates the class, input model, state and registration for a new step.

Implementation

Architecture overview
Architecture overview

Step library

Thirteen step types in five categories: readers for APIs, CSV, SQL databases, documents, Outlook and SharePoint; a Python code transformer; join and append aggregators; an LLM analysis step; and writers for SQL databases, Outlook and SharePoint.

Run controls

Breakpoints stop execution at chosen steps. Input and output logging can be disabled per step. Runs can be cancelled while in progress.

Triggers

Pipelines run on demand, on cron schedules managed in batches per pipeline, or through published endpoints tied to an environment.

How it works, step by step
How it works, step by step

Tools and technologies

ToolPurpose
Python and asyncioOrchestration engine
PydanticTyped data between steps
PostgreSQLRun records and stored step outputs
RedisTrigger storage
FastAPIInvocation and management endpoints

What was delivered

Step types
13
Step categories
5
Run triggers
3
Resumed data
Typed
  • An orchestration engine for arbitrary step graphs
  • Breakpoints, per-step logging control and cancellation
  • Resumable runs with typed data rebuilt from stored schemas
  • Scheduled and endpoint-triggered execution

Why it matters

A visual builder is only as reliable as the engine behind it. Getting ordering, typing and resumption right is what lets non-specialists build pipelines with confidence.

If your organization is planning a platform of this kind, or needs a specific part of one designed and delivered, we would be glad to discuss it.