GitHub (opens in a new tab)

Résumé

John Ojo

Software Development Engineer II · Amazon

Experience, technical skills and education on one page.

Open résuméDownload PDFLinkedIn (opens in a new tab)GitHub (opens in a new tab)
↑ ↓ to move · Enter to open · Esc to close
01 · Work

What I build

Software Development Engineer II at Amazon. Distributed systems, event-driven architecture, testing, observability and CI/CD.

Career timeline

2026

Platform Migration · Technical Lead

Amazon · Software Development Engineer II · Oct 2025 – Present
  • Led full-stack migration of a benefits platform (4M+ records, ~200 TPS peak, P99 latency under 55 ms, 100K+ users) from a monolithic shared pipeline into a standalone React application with independent releases.
  • Reduced the release cycle from 4–5 days to 1–2 days and rollback time from hours to under 30 minutes.
  • Built an aggregated API consolidating 4 microservices into a single response, eliminating an N+1 call pattern (8+ round-trips to 1) and reducing frontend latency by over 75%.
  • Designed a dual-auth reverse proxy (SigV4 + token-based) with API Gateway, replacing an intermediary service layer for all GraphQL/REST operations.
  • Built an automated data validation pipeline (S3, SQS, Lambda) comparing legacy and new endpoints field by field across 4M+ records to guarantee zero data loss during cutover.
  • Implemented a phased rollout with independent feature flags and wave-based targeting (45 to 100K+ users), with full observability via custom telemetry, CloudWatch dashboards and Athena queries.
  • Created a Cypress E2E suite (80 automated tests, 134-case QA plan) and authored onboarding documentation adopted as the team standard for new engineers.

Experience

Full résumé →

Highlights below are from my résumé. Internal system names and details stay confidential.

Platform Migration · Technical Lead

Amazon · Software Development Engineer II · Oct 2025 – Present
  • Led full-stack migration of a benefits platform (4M+ records, ~200 TPS peak, P99 latency under 55 ms, 100K+ users) from a monolithic shared pipeline into a standalone React application with independent releases.
  • Reduced the release cycle from 4–5 days to 1–2 days and rollback time from hours to under 30 minutes.
  • Built an aggregated API consolidating 4 microservices into a single response, eliminating an N+1 call pattern (8+ round-trips to 1) and reducing frontend latency by over 75%.
  • Designed a dual-auth reverse proxy (SigV4 + token-based) with API Gateway, replacing an intermediary service layer for all GraphQL/REST operations.
  • Built an automated data validation pipeline (S3, SQS, Lambda) comparing legacy and new endpoints field by field across 4M+ records to guarantee zero data loss during cutover.
  • Implemented a phased rollout with independent feature flags and wave-based targeting (45 to 100K+ users), with full observability via custom telemetry, CloudWatch dashboards and Athena queries.
  • Created a Cypress E2E suite (80 automated tests, 134-case QA plan) and authored onboarding documentation adopted as the team standard for new engineers.

Service Modernization

Amazon · Software Development Engineer II · Jul 2023 – Oct 2025
  • Migrated a high-throughput benefits service (4M+ DynamoDB records) to ECS Fargate (CDK), reducing support tickets 5%+ year on year and eliminating OS patching overhead.
  • Resolved a production-blocking 403 auth failure by tracing it to API Gateway dropping SigV4 headers, and redesigned the networking (NLB to ALB) as a permanent fix.
  • Built a serverless CMS (Lambda, Step Functions, DynamoDB) that reduced engineering dependency for content updates by 80% and time-to-market from days to hours, saving 3 developer-months a year.
  • Developed a geospatial clinic search API (AWS Location Service) with a cache-on-first-visit strategy on Fargate, helping employees across 10+ clinic locations find the nearest care in under 2 seconds.
  • Built local development stack infrastructure (CDK, Docker) that cut the test cycle from 1.5 hours to 10 minutes for 8 engineers, and led its adoption across the team.
  • Pioneered chaos engineering with AWS Fault Injection Simulator, organised and led live gameday exercises, and authored adoption documentation now used org-wide.
  • Migrated containers to ARM64/Graviton for ~20% compute cost reduction and implemented CI/CD with alarm-triggered automated rollback.

Second internship · Service migration

Amazon · Software Engineering Intern · May – Aug 2022
  • Migrated a legacy service onto native AWS, using Lambda with API Gateway as the compute platform.
  • Created and delegated the service's DNS hosted zone.
  • Ran end-to-end testing before onboarding internal and external clients.

First internship · FAQ chatbot

Amazon · Software Engineering Intern · Jun – Aug 2021
  • Built a chatbot with Amazon Lex and QnABot that answered common customer questions automatically, reducing the load on the people answering them.
  • Built the chat interface with the Lex Web UI and Angular so users could talk to the bot.

Education · B.S. Computer Science, University of Texas at Dallas · 2019 – 2023

Skills Select one to see where it's used

Languages
AWS
Tools & frameworks
Practices

33 skills · nothing selected

Case study · Live

FPL Decision Engine

A decision-support system for a Fantasy Premier League manager in a head-to-head league. It ingests player and fixture data, versions the game's rules and won't make recommendations from bad data.

FPL public APIResilient clientRules versioningIngestion jobsData-quality gatePostgreSQL

Select a step to see what it does, or play the data flow.

Problem
Public FPL data is inconsistent and the game's rules change between seasons. Recommendations are only as good as the data under them.
Approach
A resilient API client with retries and health classification, versioned rules snapshots, normalised ingestion into Postgres, and a data-quality gate that blocks optimisation when checks fail.
Code
View on GitHub (opens in a new tab) · Live app (opens in a new tab) (sign-in required)
Python 3.12FastAPISQLAlchemy 2.0AlembicPostgreSQLNext.jsDocker ComposeGitHub Actions
Project · Live

CodeQuest

I turned my own Java interview prep into a game. You solve challenges by writing real Java in the browser, and it runs in an isolated sandbox and gets graded instantly.

Browser editorNext.js APIBudget gateVercel SandboxGradingSupabase

Select a step to see what it does, or play the data flow.

Problem
Interview prep is a grind and easy to drop. I wanted to make practising Java feel like a game I'd actually come back to, and run it for as close to nothing as possible.
Approach
Code runs in a locked-down sandbox built from a pinned runner image, JUnit and contract tests grade every answer, and job and CPU budgets keep it inside free and hobby tiers.
Code
View on GitHub (opens in a new tab) · Live app (opens in a new tab) (sign-in required)
Next.js 16TypeScriptSupabase / PostgreSQLVercel SandboxVitest
Project · Live

johnojo.me

This site. A static personal site for my work, travel and journal, with a private admin where I upload photos from my phone, edit trips and see visitor stats, all on free tiers.

Phone uploadPrivate bucketMedia pipelineGit contentStatic buildCloudflare edge

Select a step to see what it does, or play the data flow.

Problem
I wanted one place for my career, my travels and my writing that loads fast, costs almost nothing to run, and that I can update from my phone without touching code.
Approach
Pages are built ahead of time from YAML and Markdown in Git, so there's no database to run. Photos go through a pipeline that finds faces for cropping, and a storage budget keeps it inside the free tier. The admin sits behind two locks, Cloudflare Access and the site checking the login itself.
Code
Private, because it holds unpublished drafts · Live app (opens in a new tab)
Next.js 16TypeScriptCloudflare PagesCloudflare R2Pages FunctionsSveltia CMSsharpffmpegVitest