Work

9 case studies · 2019 → 2026

Nine pieces of work from the last six years, each with the problem, what I did and the outcome. Written for a public page: the methods and results are real; the figures, client names and partner names stay with my employer.

Retiring the legacy warehouse

A company-wide warehouse migration to BigQuery

WalaPlus, 2026 · Staff Data Engineer, then Head of Data

ProblemThe company ran two warehouses, a legacy cloud vendor as primary and BigQuery as secondary, with the cost of both growing. Every dashboard, service and view had to move without a reporting outage.

What I didDesigned the path in stages: a resumable bulk-mirror engine that copied the tables into Cloud SQL with atomic per-table swaps; then direct nightly BigQuery loads with parity checks, legacy fallbacks and a live cutover registry that showed exactly what had moved. Ran the database workshops with the CTO that approved the plan, the cost trajectory and a data-asset naming standard. Then led the cutover itself.

OutcomeEvery dashboard and service re-pointed to BigQuery, warehouse-only views rebuilt, the historical data archived and re-verified, dead call sites removed, and the legacy vendor retired with no reporting outage.

BigQueryCloud SQLPythonAirflowdbtCloud Build
zero
reporting outages
one
warehouse left standing
nightly
parity checks on every load

The BI portal

One front door for every dashboard

WalaPlus, 2025 to 2026 · Staff Data Engineer

ProblemReporting was spread across ad-hoc apps, query tools and spreadsheets, with no single place to find a number or control who could see it.

What I didBuilt the portal from the ground up: FastAPI/Python services, a React and TypeScript frontend, Redis caching with a nightly preload, Google OAuth with group-based authorisation enforced server side, user management and view-as-user, Excel/PDF export on every dashboard. Added a strategy-KPI app behind the portal's single sign-on, and hardened the service and the machine it runs on.

OutcomeOne place for every dashboard across the business, with access controlled by group; the previous ad-hoc tools retired.

FastAPIReactTypeScriptViteTailwindRedisGoogle OAuthCloud RunDockerPlaywright
one
front door for every dashboard
SSO
group-based access, enforced server side
export
Excel and PDF on every dashboard

Finance you can reconcile

Star schema, three-way reconciliation and reporting assurance

WalaPlus, 2025 to 2026 · Staff Data Engineer

ProblemFinance and FinTech dashboards read from a sprawl of fragmented bronze views, each with its own logic; numbers disagreed between reports and the ledger could not be tied to invoices.

What I didReplaced the views with a normalised star schema refreshed nightly as the single source of truth. Delivered the CFO's ledger executive summary with per-channel margins, three-way reconciliation between the ledger, the accounting system and Finance's own records, discrepancy reports, revenue master, unit economics, cost ledger and executive overviews, with every figure verified at source before release. Reconciled a full year of partner settlements against the partner's own API. Re-derived every published client metric independently before a report went out.

OutcomeOne finance model everyone reads from; the ledger ties to invoices; discrepancies and miscalculations are caught before publication rather than after.

BigQuerySQLdbtPythonAirflow
three-way
reconciliation, nightly
one
finance model everyone reads from
zero
unverified figures published

Two platform migrations

From legacy MySQL to PostgreSQL on Cloud SQL

WalaPlus, 2026 · Staff Data Engineer

ProblemTwo customer-facing platforms were being rebuilt on PostgreSQL; their data, including customer balances, had to move from legacy MySQL with no discrepancies and no downtime customers would notice.

What I didOwned the data side of both migrations: three-tier drift checkers, parity audits, per-client rolling cutovers, day-of remediation scripts, and a portal section tracking every issue and its answer.

OutcomeBoth cutovers completed in production with zero errors, every verification check green and every balance reconciled one to one.

MySQLPostgreSQLCloud SQLPythonSQL
zero
errors at cutover
every
balance reconciled one to one
rolling
per-client cutovers, no visible downtime

Owning every production database

Audits, index verification and cost engineering

WalaPlus, 2026 · Head of Data

ProblemThe production database estates, MySQL and PostgreSQL, had no single owner; proposed cleanups risked dropping indexes that production depended on, and BigQuery costs were rising with unpartitioned scans.

What I didAudited every estate into owned remediation epics. Verified every proposed index drop against live usage counters before allowing it. After job-cost telemetry showed where the scans were coming from, partitioned and clustered the hot mirror tables at load time with a self-healing loader that re-creates a table when its partition spec drifts. Started a daily database health report, covering job failures, mirror freshness, storage and remediation progress, for the CTO, DevOps and team leads.

OutcomeIndex drops that would have hurt production were stopped; cost is controlled structurally rather than query by query; storage that never needed migrating was identified and an instance proven consolidatable.

PostgreSQLMySQLBigQueryCloud SQLRedisMongoDB AtlasPython
all
production estates audited and owned
every
index drop verified against live counters
daily
database health report to the CTO

Platform DevOps

GitHub, Cloud Build and a clean security backlog

WalaPlus, 2026 · Head of Data

ProblemSource control and deploys ran through older tooling that was slow and lightly gated, and a backlog of security alerts had built up.

What I didMoved source control to GitHub and deploys to Google Cloud Build over an IAP tunnel; set up PR gates for type checks, linting, end-to-end tests and static analysis, with automated dependency updates; worked the alert backlog down and retired the previous tooling.

OutcomeMerge to live in minutes; a clean security backlog; every change gated and traceable.

GitHubGitHub ActionsCloud BuildIAPSonarCloudCodeQLDependabotPlaywrightDocker
minutes
from merge to live
clean
security backlog
gated
every change, with automated checks

A churn model Customer Success actually uses

Validated out of sample before anyone acted on it

WalaPlus, 2026 · Head of Data

ProblemCustomer Success had no early warning of which client accounts were likely to leave.

What I didBuilt the model end to end: a point-in-time panel to avoid leakage, walk-forward XGBoost with SHAP explanations, probability calibration, and portal dashboards for the model itself. Validated it out of sample before anyone acted on it, then turned it into a live at-risk list.

OutcomeValidated out of sample before use: the flagged accounts did churn, with weeks of notice. Customer Success works from the list today.

XGBoostSHAPscikit-learnPythonBigQueryFastAPIReact
validated
out of sample, before anyone used it
weeks
of notice on flagged accounts
live
at-risk list in the portal

An AI-assisted engineering practice with guardrails

Multiply output, not mistakes

WalaPlus, 2026 · Head of Data

ProblemAgentic coding tools can multiply a small team's output or multiply its mistakes; the company wanted the former with an audit trail.

What I didSet up parallel agentic sessions (Claude Code, Cursor, Windsurf) under written guardrails, mandatory review gates and per-session contribution reporting that feeds the monthly technology readout to the CTO; sat on the internal AI committee that extended the practice to other teams.

OutcomeEvery change traceable through Jira and Confluence; the practice is what let a small team deliver the work above in a year.

Claude CodeCursorWindsurfJiraConfluence
written
guardrails and review gates
traceable
every session's contribution
monthly
readout to the CTO

Building a data function inside a construction company

From spreadsheets and Primavera to a team of 10

Rowad Modern Engineering, 2019 to Sep 2025 · Projects Control Manager to Data Engineering & ML Lead

ProblemA large contractor ran project controls on spreadsheets and Primavera, with ERP data locked in Oracle.

What I didAs Projects Control Manager (2019) built a PostgreSQL database to automate the sector's revenue and cash tracking and connected ERP, warehouse and Power BI. Moved into data full time in 2020: on-premises servers, Airflow and Spark, PL/SQL ETL from Oracle ERP; integrated Oracle Unifier, CRM, Primavera P6 EPPM and HR systems into a central warehouse; automated processes saving 200+ hours a month. Built cash-flow forecasting models as Data Scientist and ran the Scrum process. As Data Engineering Lead established and led a team of 10 (six data engineers and analysts, two ML engineers, two technical-office engineers), with pipelines on AWS, Azure and GCP, Kafka/Spark streaming at 10M+ records a day, and a Snowflake/Databricks warehouse that cut query times by 75%. As Data Engineering & ML Lead in 2025 led the data and AI team of 10: a production RAG chatbot, a full-stack analytics platform on Oracle ERP, deep learning models, and GPU-accelerated agent tooling that cut debugging time by 60%.

OutcomeA data engineering function where none existed, 95% sprint completion, internal knowledge access improved by 60%.

PostgreSQLOracleAirflowSparkKafkaSnowflakeDatabricksAWSAzureGCPPower BIPyTorchLangChainKubernetesMLflow
10
people in the data team I established
10M+
records a day, streaming
200+
hours a month saved
↑ top