Scope

LOT Polish Airlines operates its Contact Center as a distinct business unit, separate from the airline’s core operations (flight crew scheduling, ground handling, MRO). The Contact Center handles customer service — reservations support, complaint management, irregular operations communication — and runs its own WFM function independently of the mainline airline scheduling systems.

This project lives entirely within that Contact Center boundary. It has nothing to do with pilot rosters, cabin crew scheduling, or airport operations. Different domain, different constraints, different tooling.


The Problem

LOT Polish Airlines ran its entire workforce management on a patchwork of Excel files — shift codes entered by hand, data siloed across disconnected spreadsheets, no real-time contact centre visibility. Reports took days. The people responsible spent more time preparing data than reading it.


The Architecture

I designed and built a Medallion Architecture inside Microsoft Fabric, migrating the WFM analytics layer progressively from legacy tooling into a unified Lakehouse. The migration is ongoing — each phase replaces a fragile manual step with an automated, auditable equivalent.

Bronze — Ingest

Raw JSON ingested automatically from the Genesys Cloud API via Data Factory pipelines, replacing manual CSV exports. Bronze is append-only — nothing is transformed, every original record preserved for full auditability.

Silver — Normalize & Validate

Fabric Notebooks (PySpark) flatten deeply nested API responses, resolve agent identifiers across systems, and validate shift codes against the labour law rule set. This is where the hard logic lives.

The compliance engine is worth mentioning separately. Shift rotations at LOT are governed by complex rules — minimum rest periods, maximum consecutive hours, operational exception handling. Previously: manual review. Now: automated on every ingestion cycle, zero faults since go-live.

Gold — Star Schema

Calculations pushed into reusable SQL Views rather than evaluated at query time in DAX. DAX calculates on demand; SQL calculates at load. The difference landed at 80% faster report delivery.


Outcomes

MetricBeforeAfter
Manual preparation40+ hrs / month~0
Report latencyHours / next-dayMinutes
Compliance validationManual, error-proneAutomated, 0 faults
Data sourceExcel filesLive Genesys API

What I Learned

The technical challenge was real — deeply nested API responses, complex shift-rotation logic, a production Power BI environment that couldn’t be broken. But the harder challenge was organisational.

People had strong mental models built around their Excel files. The migration required not just a better system, but one that felt trustworthy from day one. That meant extensive validation layers, transparent audit trails, and a rollout that let analysts compare old and new outputs side-by-side before any switch.