Chicago-based software engineer

I build confidence
into software.

Software Engineering✦ Test Infrastructure✦ Release Systems✦ Developer Tooling✦

How I got here

I started in support. Then I started testing and developing.

I started on a service desk in 2016. By 2018, I was writing C# integration tests and working with database restores and deployments. Later roles took me into Ruby and Python. Most of my current framework work is in TypeScript, with Buildkite running the integration pipelines.

I studied computer science at DePaul, with a concentration in software engineering. Outside of work, I wrote BAR-TABS in Swift and kept it in the App Store from 2018 through 2024. That meant owning the product, not just one part of its codebase.

Work history

The code, systems, and products I’ve worked on.

Sep 2025 — Present Invoca

Software Engineer in Test II

I work on the shared framework and integration pipelines behind Invoca’s automated coverage. The product connects marketing and contact center data with revenue.

  • Build and extend Mosaic, a shared TypeScript testing framework consumed by other teams across Invoca
  • Write UI and API automation against the platform
  • Work directly in Buildkite integration pipelines to keep regression feedback fast
  • Use Claude Code and Cursor day to day, including agent workflows for framework and test development
  • Claude Code
  • Agent workflows
  • Framework development
  • Mosaic
  • Buildkite
  • TypeScript
  • Cursor AI
Sep 2022 — Sep 2025 Benchmark Analytics

Senior QA Engineer

Promoted from QA Engineer · Sep 2022 — Apr 2024

  • Built and maintained API and UI automation suites in Postman, Cypress, and Rest Assured
  • Implemented CI/CD pipelines for regression automation using GitLab runners
  • Built performance metrics dashboards in Datadog backed by Rest Assured
  • Ran release testing and handled promotion into client-facing environments
  • Maintained test cases for new features and regression coverage in TestRail
  • Leaned on Claude and GitHub Copilot while writing the implementation
  • Cypress
  • Rest Assured
  • Postman
  • GitLab CI
  • Datadog
Sep 2021 — Aug 2022 The Coda Collection

QA Engineer

I worked on a music platform with subscription video on Amazon Prime Channels and a separate editorial site.

  • Developed component-driven unit and end-to-end tests with TypeScript, Jest, and GraphQL mocks
  • Started the automated mobile test suite from scratch with Appium and Java
  • Used GitHub Actions for QA environment deployments and end-to-end suite runs
  • Debugged web and native mobile apps through Contentful, Proxyman, Postman, and Cypress
  • Ran release candidate regression across the native mobile applications
  • TypeScript
  • Jest
  • GraphQL
  • Appium
  • GitHub Actions
Aug 2019 — Sep 2021 Invoca · DialogTech

Release Engineer I · QA Automation & Release Engineer

Joined as QA Engineer at DialogTech, acquired by Invoca in 2021

  • Implemented UI and API automated tests with Ruby, Capybara, Airborne, and RSpec
  • Created an internal GUI tool in Python that pulls, checks, and deploys code
  • Merged and deployed code to staging and production environments
  • Refactored the codebase so legacy and new automated tests failed safely
  • Set up visual testing with Applitools and kept it running
  • Reviewed code with onsite and offshore teams, and mentored QA engineers moving into automation
  • Ruby
  • RSpec
  • Capybara
  • Python
  • AWS
  • Applitools
Feb 2019 — Jul 2019 SA Ignite

QA Engineer

  • Stood up the first Selenium suite and tuned the selectors so dynamic elements stopped flaking
  • Queried databases with PostgreSQL and SSMS to verify and manipulate data
  • Created test cases and plans from acceptance criteria and exploratory testing in Practitest
  • Ran manual regression and new-feature testing ahead of releases
  • Selenium
  • PostgreSQL
  • SSMS
  • Jira
May 2016 — Feb 2019 Coyote Logistics

Quality Assurance Analyst

Started as IT Intern, then Service Desk Analyst · May 2016 — Jan 2018

  • Wrote integration tests in C# to automate manual test cases
  • Managed database restores and deployed databases and builds through Octopus
  • Tested the backend against SQL Server Management Studio and MongoDB, and the APIs through Swagger
  • Tested the Android and iOS apps, both built on React Native
  • Reviewed teammates’ code and ran the integration and unit tests in Visual Studio
  • C#
  • SQL Server
  • MongoDB
  • Swagger
  • React Native

Personal projects

Code I shipped under my own name.

View GitHub

Where I spend my time

The engineering work behind reliable releases.

01

Frameworks and tooling

I help build Mosaic, the shared TypeScript framework used by teams across Invoca. Earlier work includes a Python deployment tool and suites in Ruby, Java, and C#.

02

CI and releases

I work in Buildkite now. At Benchmark, GitLab runners handled the regression suite. GitHub Actions covered QA deployments at Coda, and I’ve promoted releases into client-facing environments.

03

Application and API code

TypeScript for current framework work. Swift for BAR-TABS. Ruby and Python for automation and internal tools, with APIs ranging from GraphQL mocks to Swagger.

04

System-level debugging

I’ve traced problems through browsers, native mobile apps, APIs, and databases. The stack has included PostgreSQL, SQL Server, MongoDB, Contentful, and Proxyman.

RubyTypeScriptC#PythonSwiftSQL CypressRSpecCapybaraRest AssuredSeleniumAppiumJest PostmanGraphQLBuildkiteGitHub ActionsGitLab CI AWSDatadogTestRailApplitoolsJira Claude CodeCursor AIAgent workflows

Want to compare notes?

Send me
a message.