Skip to main content
Software EngineerEricsson · Backend · Cloud · DevOps

Software engineer at Ericsson, working across data pipelines, backend services on Kubernetes, and the CI/CD that ships them. Magna cum laude Computer Science graduate from uOttawa, 2026.

Daily stack

PythonFastAPIPostgreSQLDockerKubernetesAWSJenkins
reports/failing_routes.py
1def failing_routes(spark, day: str) -> DataFrame:
2logs = spark.read.parquet(f"s3a://{BUCKET}/dt={day}")
3return (
4logs.filter(F.col("status").isin(SERVER_ERRORS))
5.groupBy("route")
6.agg(F.count("*").alias("errors"))
7.orderBy(F.desc("errors"))
8.limit(50)
9)
spark-submit reports.failing_routesexit 0 · 2m14s
Mrasem, an iOS app built for a client
tests/ · pytest

$ pytest tests/integration -q

localstack s3 ready on :4566

wiremock stubs loaded

....................................

....................................

all passed, no cloud calls

zsh · prod

$ kubectl get pods -n analytics

NAME READY STATUS

api-7c9d5b6f8a-klmno 1/1 Running

worker-8b6a5c4d3e-uvwxy 1/1 Running

scheduler-6f5e4d3c2b-zabcd 1/1 Running

$

About me

I'm Fahad, a software engineer in Ottawa. I started on the infrastructure side at two startups, then joined Ericsson as a software engineer, where the work runs the whole stack: data pipelines, backend services on Kubernetes, and the pipelines that release them.

The problems I like most are the unglamorous ones: a query path that is too slow, a job that fails silently, a release process that is still done by hand. The numbers on the right come from my own projects, where I am free to publish them.

Outside work I take on freelance builds, most recently Mrasem, a concierge booking platform for a client in Saudi Arabia. I also make my own iOS apps, Lapel and Mawaqeet, each with its own API and deployment.

Away from the keyboard

  • Hiking
  • Photography
  • Competitive chess
  • Football
University of Ottawa logo

University of Ottawa

BSc Computer Science

Magna Cum Laude
0.0

GPA out of 4.0

2026

Graduated

Results, and what produced them

0%lower p50 API latency

after moving a 27-module import graph behind a dynamic import, with control endpoints held flat. Lapel

0xfaster webhook lookup

by indexing a query that ran on every provider webhook, 40.5 ms down to 0.17 ms. Lapel

0tests behind a client delivery

XCTest, XCUITest and Vitest suites, including property-based tests, for a paying client's booking platform. Mrasem

0%less compute spend

after adding autoscaling and right-sizing the GKE node pools. HAMS.AI

Anatomy of a request

It starts with a click.

Someone opens a dashboard or taps a screen. The front ends I build range from React dashboards to native SwiftUI apps.

ReactReactNext.jsNext.jsTypeScriptTypeScriptSwiftSwift
trace · GET /reports/daily7 spans184 msin flight
service · operation0ms92ms184ms
client GET /reports/daily
ingress nginx → report-svc
report-svc build_report(day)
gateway auth.verify
s3 read parquet
redis SET report:cache
metrics http_request_duration_seconds
p9542 ms
errors0.00%
pods3/3 ready

Experience

Most of it at Ericsson, after backend and DevOps work at two startups. Each number is tied to the change that produced it.

  1. Ericsson logo

    Ericsson

    Software Engineer

    Jan 2026 – Present
    • Backend services in Python and Java, and data pipelines in PySpark over Parquet
    • Debugged reliability problems in asynchronous job processing and locked the fixes in with regression tests
    • Containerised services and deployed them on Kubernetes with ingress, health probes and resource limits
    • CI/CD pipelines in Jenkins, plus an integration test harness on WireMock and LocalStack that needs no live cloud services
  2. HAMS.AI logo

    HAMS.AI

    DevOps Engineer

    Feb 2026 – Apr 2026
    • Stood up production GKE for an AI voice-agent platform in Terraform, with VictoriaMetrics and Grafana for monitoring
    • Cut compute spend 30% with autoscaling and right-sized node pools
  3. Moneymoon logo

    Moneymoon

    Backend & DevOps Engineer

    Aug 2025 – Dec 2025
    • Containerised the backend on AWS under Kubernetes and built REST services with JWT auth and rate limiting; uptime reached 99.5%, API latency fell 20%
    • Terraform modules for the OCI and AWS environments, with remote locked state

The stack

Grouped by where it sits in the system. Everything here has been in production, either at work or in a shipped project.

Languages

5 tools

SwiftSwift
TypeScriptTypeScript
JavaScriptJavaScript
PythonPython
JavaJava

Frontend & Mobile

6 tools

SwiftUISwiftUI
XcodeXcode
ReactReact
Next.jsNext.js
Tailwind CSSTailwind CSS
Apple PayApple Pay

Backend & Data

9 tools

Node.jsNode.js
FastAPIFastAPI
SpringSpring
PostgreSQLPostgreSQL
MongoDBMongoDB
RedisRedis
RabbitMQRabbitMQ
SupabaseSupabase
StripeStripe

Cloud & DevOps

13 tools

AWSAWS
Google CloudGoogle Cloud
AzureAzure
Oracle CloudOracle Cloud
DockerDocker
KubernetesKubernetes
HelmHelm
TerraformTerraform
VaultVault
AnsibleAnsible
GitHub ActionsGitHub Actions
NGINXNGINX
LinuxLinux

Delivery, observability & quality

8 tools

JenkinsJenkins
pytestpytest
GrafanaGrafana
PrometheusPrometheus
VictoriaMetricsVictoriaMetrics
SonarQubeSonarQube
GitGit
VercelVercel

Projects

Mrasem is a paid freelance build for a client in Saudi Arabia. Lapel and Mawaqeet are my own. All three run on an API, database and deployment I designed, so each is full-stack work, not just an app.

Client work

A freelance engagement: iOS app, admin dashboard and API for a Saudi concierge company.

Mrasem logoClient work · iOS · Admin · API

A luxury concierge booking platform built as a freelance engagement for a client in Saudi Arabia: a SwiftUI iOS app, a Next.js admin dashboard for the client's team, and a Node.js REST API on Supabase. Phone OTP sign-in, QR tickets, and a bilingual EN/AR interface with full RTL layout.

Freelance client, Saudi Arabia

Explore

Four categories, one home screen

Season events, tours, fine dining and chauffeured cars, browsable from a single SwiftUI home fed by the Supabase catalogue.

Four categories, one home screen
Discover

Venues the client edits, not the code

Restaurant cards carry Michelin tags, ratings and cuisine filters. The client's team manages the whole catalogue from the admin dashboard; no release needed to add a venue.

Venues the client edits, not the code
Book

Booking in three steps

Date, time, guests and add-on services become a request the client's team approves or declines from the Next.js admin dashboard.

Booking in three steps
Wallet

A QR ticket for every booking

A confirmed booking issues a QR ticket with its own unique code, kept with the reservation in the app.

A QR ticket for every booking

Design system

Every screen in English and Arabic

Drag to explore

Mrasem Splash screen
Splash
Mrasem Phone OTP login screen
Phone OTP login
Mrasem Venue detail screen
Venue detail
Mrasem Membership card screen
Membership card
Mrasem Event booking screen
Event booking
Mrasem Arabic RTL screen
Arabic RTL
Mrasem Invitations screen
Invitations
admin.mrasem · Next.js
Mrasem admin dashboard built with Next.js
SwiftUINext.jsNode.jsSupabaseVercel
View source

Personal projects

Built in my own time, each with its own API and deployment.

LAPELComing soon to the App Store

An AI try-on app for iPhone. Take one full-length photo, add a piece from your closet or paste a link from a shop, and Lapel shows it on you, backed by a Supabase backend, authenticated edge functions and a provider-agnostic try-on pipeline.

SwiftUISwiftDataSupabaseDeno edge functionsPostgreSQL + RLSGeminiRevenueCatWidgetKit
The same model wearing a camel overcoat, tried on in Lapel
A generated model in a plain t-shirt
Your photoTried on

Drag to compare · generated model, dressed by Lapel

Lapel home with today's suggested look
Lapel garment page with Try it on
Lapel closet grid
Lapel outfit built from the closet

One photo is the fitting room

A single full-length photo is cut out and stood on a plain background. No stand-in models.

Add by photo or link

Photograph what you own, paste a product link, or share into Lapel from any app via the share extension.

A closet that labels itself

Brand and category are recognised on upload, with garment masks segmented by Gemini.

A stylist that works from your closet

Daily looks, a style calendar and a Home Screen widget, never padded with things you don't own.

Private by design

The app never talks to an AI provider. Every generation goes through authenticated edge functions with RLS on every table.

Mawaqeet مواقيتWorks fully offline

Prayer times computed on-device from solar position across 12 calculation methods, a Qibla compass, a Hijri calendar with day correction, and English and Arabic with full RTL. Works with no network; a Node.js and Stripe backend handles support payments.

Mawaqeet Qibla compass screen
Mawaqeet prayer times in English
Mawaqeet prayer tracker screen

Prayer engine

ISNA & Umm Al-Qura calculation methods from solar position.

Qibla compass

CoreMotion heading with live direction to Makkah.

Hijri calendar

Maghrib-based date transitions with ±2 day correction.

Prayer tracker

Mark each prayer complete and review a 7-day trend.

Stripe + Apple Pay

Dockerised Node.js backend for support payments.

Arabic / English

Full localisation with right-to-left layouts.

SwiftSwiftUICoreLocationNode.jsStripe
View source

How I work

Jenkinsfile passing
  1. reviewgerrit · one change per review
  2. buildunit tests · docker image
  3. integratewiremock + localstack · no live cloud
  4. complylicence check · sbom
  5. releasebump version · publish · rollout

One change per review, nothing reaches a cluster by hand, and a release is not done until licence, SBOM and vulnerability checks have passed and the dashboard agrees.

Tests that don't need the cloud

An integration suite should run against WireMock and LocalStack instead of live services, so it finishes in seconds and can gate every merge.

Find the bottleneck before adding capacity

A run of job timeouts can look like a scaling problem. The last one I chased was serial work waiting on a downstream service. Retries and parallel I/O fixed it, and regression tests keep it fixed.

Baseline first, then change one thing

Take the measurement before touching anything, so the result is a number rather than a feeling. On Lapel that was 822 ms down to 503 ms at p50, with four control endpoints held flat to prove the change caused it.

Case studies

Four smaller web builds, each one deployed. Click through rather than take the screenshot's word for it.

Get in touch

Open to software engineering, DevOps and cloud roles. Based in Ottawa.

Email me