Obi Nnaduruaku

Software engineer

I build software that has to work in two worlds at once.

Software engineer at Visa, where I ship payment infrastructure and the developer tooling around it. Outside work I built OmniMusik — an iOS music client that puts owned files and streaming services in one library, with a real-time effects chain, cross-device sync, and a web companion on AWS.

Obi Nnaduruaku
Now
Software Engineer, Visa
March 2025 – present
Also
Software Developer in Test, ADP
July 2023 – present
Education
B.S. Computer Science
University of Georgia, December 2022

Featured project

OmniMusik — one library for music you own and music you stream

An iOS client that merges local files and Spotify into a single library, queue, search and playlist system, designed for Apple Music behind the same interface. Owned files get a real-time effects chain. Playlists sync to a web companion, and both clients run on AWS infrastructure I provisioned in Terraform.

One libraryLocal files and streaming tracks in a single list, filterable by source.
The StudioWaveform with trim handles and an A/B toggle against the untouched original.
Signal chainSpeed, pitch, EQ and reverb in the order the AVAudioEngine graph runs them.
HandoffCrossing from a local file into Spotify, shown as a deliberate transition rather than a glitch.
Now PlayingA Spotify track driven from OmniMusik's own transport, artwork and all.
PlaylistsMixed-source by design. The tile colour is derived from the id, so it matches on the web.
SpotifyBrowsed through the Web API; played through the Spotify app under OmniMusik's control.
The web companion. Same playlists, same colours, drag-and-drop reordering, and a conflict view when both devices changed the same one.
Inside a playlist: Spotify and local tracks in one ordered list, drag or arrow to reorder, and a Save that only lights up when something changed.
One sign-in flow for both clients: OAuth2 with PKCE against Cognito, no SDK on either side.
The hard part

Streaming audio plays in a process the app does not own — Spotify's, or the system player's — and hands out no samples. Effects are structurally local-only, and the domain model says so rather than leaving it as a comment.

Architecture

Two deliberately separate protocols: how a track plays and where it comes from. They don't map one-to-one, and keeping them apart is why adding Spotify touched no existing source or player.

Sync

Version-checked writes, an 8-case decision table that shows conflicts instead of picking a winner, and a server epoch so a replaced database can never be read as mass deletion.

Infrastructure

Spring Boot / Postgres API on ECS, React companion on CloudFront, Cognito auth — all in Terraform, with keyless CI via GitHub OIDC and a no-NAT network that cut idle cost by about half.

7,800lines of Swift 103automated tests 45AWS resources in Terraform 17documented decisions, with rejected alternatives
Read the thinking
  • System designTwelve diagrams — context, the two protocols, playback, the Spotify boundary, sync, auth, the AWS topology — each with the reasoning the diagram can't show.
  • Field guideThe whole project in ten minutes, organised by the questions it gets asked.
  • Decisions logEvery non-obvious choice, with the alternatives that were rejected and why.

Experience

Where I've worked

Payments infrastructure and the tooling that keeps it shippable.

Mar 2025 – present
Software Engineer
Visa
  • Diagnosed a silent failure blocking every legacy reseller from enabling merchant accounts by tracing raw upstream responses to an unpopulated count the service read as zero; evaluated four fixes on dependency, latency and complexity and shipped a single-call solution 38% faster with 69× smaller payloads than the leading alternative.
  • Redesigned a multi-row, manual merchant rule-enablement workflow into a single guided request backed by an event-driven REST endpoint that publishes a Kafka event per merchant, decoupling intake from asynchronous execution.
  • Built an autonomous UI development agent as a Claude Code command orchestrating Jira, GitHub and Figma through MCP — ticket to open pull request, with React generation, Jest tests, lint remediation, a human review checkpoint and enforced AI-code compliance tagging for a regulated environment.
  • Built five internal developer tools (Python, Node.js) automating QA report consolidation, natural-language test-data provisioning across five environments, and vision-assisted Cypress test authoring.
Jul 2023 – present
Software Developer in Test
ADP
  • Engineered automated test frameworks in Cucumber, Selenium and Java, reducing manual testing effort by 36%.
  • Cut Jenkins test-cycle runtime by 41% by refactoring test scripts.
  • Wrote test plans and cases and monitored Jenkins jobs to track automated results.

Skills

What I work in

Languages
SwiftJavaTypeScriptJavaScriptSQLHTML & CSS
Frameworks & platforms
SwiftUIAVAudioEngineSwiftDataSpring BootReactKafkaOracle DBPostgres
Infrastructure & tooling
AWSTerraformGitHub ActionsJenkinsSeleniumCucumberXcodeClaude Code

Contact

Say hello

Open to conversations about iOS, audio, backend systems, and the infrastructure that runs them.