Saaim Abdullah

Hi, I’m Saaim. I build software that keeps working when a lot of people use it.

I built a health platform in Spain on my own, from nothing to real customers using it every day. Before that I looked after the systems behind an app a few thousand people used daily. What I enjoy is the unglamorous half of the job: making things that don’t fall over.

Open to full-time roles, remote or relocationBased in Lahore, working European and US-East hoursBackend, distributed systems, and data engineeringAvailable now

  • Python
  • TypeScript
  • SQL
  • Django
  • Django REST Framework
  • FastAPI
  • Node.js
  • Celery
  • PostgreSQL
  • pgvector
  • Redis
  • MongoDB
  • Apache Kafka
  • Apache Spark
  • Apache Airflow
  • RAG
  • Claude
  • OpenAI
  • Pinecone
  • AWS
  • ECS
  • EKS
  • Lambda
  • S3
  • SNS
  • SQS
  • Docker
  • Kubernetes
  • GitHub Actions
  • pytest
  • Next.js
  • React
Sole engineerbuilt a health platform end to end and handed it over live
1,000 to 3,000daily users on backend services I owned at Expertflow
130 ms to 30 msadmin API latency, on Redis caching and index tuning
5 systemswith written architecture breakdowns, not just repos
Work

Systems I’ve built

Not screenshots. Each one is a write-up: the constraint that actually bound, the architecture it forced, the trade-off I made with my eyes open, and the thing I would build differently now. Read one and you know how I think about a system.
Client work, in productionFull stack

Fitter Health: a production platform, built from zero

A Spain-based health team had a validated concept and no engineering function. I built the platform and took it to production alone: entitlements and credits, two-sided booking, invoice reconciliation with Odoo, and the AWS estate under it. Handed over documented.

The hard partSNS fanned out to the notification consumers with no durable buffer, so a failed delivery vanished without raising anything. It surfaced as a product complaint, not an alert.

Read case study
RAG / AIMulti-tenant

Multilingual, multi-tenant RAG engine

Several tenants on one deployment with fully isolated retrieval. The tenant claim lives in the JWT rather than the request, because cross-tenant retrieval is a security bug rather than a quality one. Local embeddings, grounded answers with citations.

The hard partCross-tenant retrieval is a security incident, not a bad answer. The tenant claim had to come from the verified JWT, so a client can never ask for someone else's documents.

Read case study
Data engineering

Real-time e-commerce ETL pipeline

Kafka into Spark Structured Streaming, raw Parquet in bronze, batch stages into silver and gold, landing in a four-table star schema. The medallion split exists so that a change to what revenue means is a rebuild, not a backfill.

The hard partWhen the definition of revenue changes, gold has to be rebuildable from silver without re-ingesting a single event. That is what the medallion split is buying.

Read case study
The founder of the health platform I built and handed over:
He frequently delivered ahead of scope and raised considerations we had not thought to ask about.
Beth IriarteCo-founder & CEO, Fitter Health
Stack

Technical skills

Grouped by what the work is for rather than by language. The sentence is the part that matters; the logos are there for whoever is scanning for a keyword.

Architecture & distributed systems

I decide what a system has to survive before I decide what it does, because that is what the design actually has to answer to. Services split across pods and scaled on throughput, fan-out buffered through durable queues with dead-letter paths, event-driven workflows, REST contract design, multi-tenant isolation, and medallion and star-schema data modelling.

  • System design
  • Event-driven
  • Kubernetes
  • Multi-tenancy
  • REST contracts

Languages

I write backend, data and ML work in Python, and everything the user touches in TypeScript, so one person can carry a feature from the screen to the query. Strong SQL: window functions, query plans, and the indexes that decide whether either one finishes.

  • Python
  • TypeScript
  • SQL
  • JavaScript

Backend & APIs

I build the part of a product nobody sees and everybody depends on: accounts, permissions, payments, bookings and integrations, designed to hold up as traffic grows. Django, DRF, FastAPI, Flask and Node.js/Express, including real-time features over WebRTC.

  • Django
  • Django REST Framework
  • FastAPI
  • Flask
  • Node.js
  • WebRTC
  • Celery

Data Engineering

I build both batch and streaming pipelines, and model the warehouse they land in, so reporting stops disagreeing with itself. Kafka into PySpark Structured Streaming, orchestrated with Airflow and MWAA, processed on EMR and catalogued with Glue, landing as a star schema over a medallion architecture that can be replayed when a definition changes.

  • Apache Kafka
  • PySpark
  • Apache Airflow
  • MWAA (managed Airflow)
  • Amazon EMR
  • AWS Glue
  • Star schema
  • Medallion

Cloud & DevOps

I set up somewhere for a product to live that won’t fall over, won’t leak data, and deploys itself from the repo. Production AWS across Lambda, EC2, ECS, EKS, S3, RDS, SQS and SNS, IAM, VPC and ALB, containerised with Docker, orchestrated on Kubernetes with autoscaling policies, and shipped through GitLab and GitHub CI.

  • AWS
  • Amazon ECS
  • Amazon EKS
  • Kubernetes
  • AWS Lambda
  • Amazon RDS
  • Amazon S3
  • Amazon SQS
  • VPC
  • IAM
  • Docker
  • GitLab CI

Databases

I put the rules in the database rather than the form, so bad data cannot get in through a path nobody remembered. PostgreSQL as the default, including pgvector for retrieval, MongoDB and DynamoDB where the access pattern earns it, and Redis for caching and as a Celery broker.

  • PostgreSQL
  • pgvector
  • MongoDB
  • DynamoDB
  • Redis

AI & ML

I build AI features you can check: a chatbot that answers from your own documents and shows where the answer came from, and recommenders that handle a brand-new user by design. RAG, multilingual embeddings and recommender engines with scikit-learn and TensorFlow, down to TensorFlow Lite Micro for on-device inference.

  • RAG
  • Recommenders
  • pgvector
  • scikit-learn
  • TensorFlow

Frontend

I build the screens people actually use, so the product ships as one thing rather than a backend waiting on someone else. React and Next.js, Angular alongside the frontend team at Expertflow, with clean, accessible, responsive HTML and CSS.

  • React
  • Next.js
  • TypeScript
  • Angular

Testing & quality

I make it hard to break the thing quietly, which is what lets a product keep shipping after I hand it over. Automated test suites running in CI, database-level integrity constraints, clean reversible migrations, and structured logging with request tracing.

  • pytest
  • CI/CD
  • GitHub Actions
  • Migrations
Engineering practice

How I work

Six habits that survived contact with production, each one bought with a specific failure.

Design the failure path first

Before I build a feature I write down how it breaks. The notification pipeline on Fitter Health taught me that expensively: fan-out with no durable buffer drops messages silently, and because nothing errors, nothing alerts. Now a queue gets its dead-letter path before it gets traffic.

Constraints in the database, not the form

Application-level validation is a convenience, not a guarantee. If an invariant actually matters it belongs in a constraint or a transaction, because sooner or later someone writes a management command that never touches your serializer.

Small deployable slices

Every change ships tested and deployed rather than accumulating on a branch. Working alone, this is the only thing standing between you and a three-week integration you cannot debug.

Handover as a deliverable

Fitter Health was handed over documented, with infrastructure the client can rebuild without me. “Can someone else run this” is part of done, not paperwork afterwards.

Read the system before changing it

Inherited code gets a written assessment first: what is solid, what is fragile and load-bearing, and what each change costs. Guessing is how you break the thing that was quietly holding everything together.

Measure before you scale

Scaling is a measurement problem before it is an architecture problem. An admin endpoint at Expertflow went from 130 ms to 30 ms on a Redis cache and two indexes, which no number of extra replicas would have bought. Once the cheap wins are gone, then you split the services across pods and let the autoscaler follow the traffic.

Fundamentals

Algorithms in the open

Most interview loops open with an algorithms round. Mine is public, and has been for a long time.

Structures, implemented not imported

Arrays, linked lists, stacks and queues, binary trees, tries and graphs, each written from scratch. Knowing what a dict costs you, and when a heap beats a sort, is the same instinct that decides whether a query needs an index or a rewrite.

Algorithms with the reasoning attached

Binary search and its off-by-one traps, merge sort, BFS and DFS, Dijkstra and Bellman-Ford, minimum spanning trees, cycle detection, topological sort, sliding window and Kadane, and dynamic programming built up from the recurrence rather than memorised.

Written to be read

Clean Python, more than one approach where the trade-off is interesting, complexity analysis on each, and test cases. The daily problems and the syntax notes live in the same repo, because the point is the reasoning, not the streak.

Credentials

Certifications

Each one links to the issuer’s verification page.
AWS Certified Solutions Architect, Associate: exam scheduled 2026.
What's next

What I'm looking for

Backend, platform, or distributed systems roles where I own a service rather than a ticket queue. I have worked both ends of that: inside a team at Expertflow with live traffic to keep up, and alone on Fitter Health, where every schema decision and every consequence was mine. Owning the consequences is the part I want to keep.

The problems I want more of are the ones that only appear under load: partitioning and replication, back-pressure and retries, idempotent consumers, exactly the class of bug that never reproduces on a laptop. Most fluent in Python and TypeScript, across Django, DRF, FastAPI, PostgreSQL, Kafka and AWS. Going deeper on distributed data processing and retrieval right now, sitting the AWS Solutions Architect Associate exam this year, and keeping the algorithm work in the open on GitHub.

I work best on small teams where the person writing the code talks to the person who needs it, and I would rather join one with senior engineers to learn from than be the most experienced person in the room again. Open to remote roles with EU or US-East teams, and to relocating.

Get in touch

Open to full-time roles and to interesting problems generally. Email is the fastest way to reach me and I reply within a day.
Open to full-time rolesReplies within 24 hoursEU and US-East hours