Obi Nnaduruaku

Software engineer

I turn hard problems into shipped software.

I am a 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
Before
Associate Application Developer, ADP
July 2023 – Feb 2025
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
Visa
Software Engineer
  • Diagnosed a silent failure blocking all resellers on the legacy platform from enabling Cybersource products for merchant accounts by tracing raw upstream API responses using AI to an unpopulated count field the service read as zero; evaluated four fixes on cross-team dependency, latency, and complexity and shipped a single-call solution benchmarked 38% faster with 69× smaller payloads than the leading alternative.
  • Redesigned a multi-row, manual merchant transactional configuration workflow for a platform of 5,000 merchants into a single guided React (JavaScript) UI backed by a new event-driven REST endpoint (Vert.x) that publishes a Kafka event per merchant, decoupling request intake from asynchronous downstream execution.
  • Built an autonomous UI development AI agent as a Claude Code slash command, orchestrating Jira, GitHub, and Figma MCP servers to take a feature from ticket to open pull request: React component generation, Jest tests, lint remediation with a human-in-the-loop review checkpoint and enforced AI-code compliance tagging for a regulated fintech environment.
  • Built a suite of five internal developer tools (Python, Node.js) used by other team members for automating QA report consolidation, natural-language test-data provisioning across five environments and two platform architectures, and Claude Vision AI assisted Cypress test authoring that reduced automated test development times by 80%.
Jul 2023 – Feb 2025
ADP
Associate Application Developer
  • Developed the React, TypeScript, and Redux frontend alongside Spring Boot REST APIs for a prototype electronic I-9 application, leveraging Spring Cache (@Cacheable) to store high-frequency reference data and eliminate redundant database queries.
  • Engineered automated testing frameworks using Cucumber, Selenium, and Java, achieving comprehensive application feature coverage and reducing manual testing effort by 36%.
  • Reduced overall runtime of test cycle execution in Jenkins by 41% by refactoring test scripts.

Skills

What I work in

Languages
SwiftJavaTypeScriptJavaScriptSQLHTML & CSS
Frameworks & platforms
SwiftUIAVAudioEngineSwiftDataSpring BootVert.xReactKafkaOracle DBPostgres
Infrastructure & tooling
AWSTerraformKubernetesGitHub ActionsJenkinsSplunkSeleniumCucumberXcodeClaude Code

Contact