Work

Proof, not promises.

A cross-section of modernization, DevOps, integration, identity and data work delivered in production environments. Client and partner details are kept confidential; the engineering is not.

Modernization

Fleet-wide desktop platform migration

Challenge

More than fifteen interdependent line-of-business desktop applications and shared libraries were pinned to an aging framework and an old project format, with builds that depended on specific machines.

Approach

  • Mapped the dependency graph and migrated in tiers, shared libraries first, so nothing broke downstream
  • Converted every project to SDK-style with PackageReference and modern build targets
  • Added a YAML pipeline per app with signing, versioning and verified deployment
  • Shipped same-day fixes during each cutover window with a forced-redirect switch for stragglers

End-of-life framework risk removed across the portfolio, faster builds and a clean path to future framework upgrades.

  • WinForms
  • VB.NET
  • C#
  • .NET 8 / 10
  • MSBuild
  • ClickOnce
  • Azure DevOps
DevOps

Shared pipeline template library

Challenge

Every repository carried its own hand-built pipeline, so signing, versioning and deployment behaved slightly differently everywhere and fixes had to be repeated dozens of times.

Approach

  • Built a versioned library of reusable YAML templates for web, desktop, service and package builds
  • Encoded hard-won lessons (certificate import, manifest signing order, deployment folder selection) once, for everyone
  • Added fail-fast settings validation, release tagging and post-deploy verification
  • Migrated classic release definitions to pipeline-as-code with schedule audit reporting

A force multiplier: every team that consumes the templates inherits the same signing, deployment and audit behavior.

  • Azure DevOps
  • YAML
  • PowerShell
  • MSBuild
  • NuGet
DevOps

Automated code signing certificate lifecycle

Challenge

Code signing certificate renewals were manual and error prone, and an expired certificate took signed applications offline more than once.

Approach

  • Built a console service that renews certificates and deploys them as trusted publishers
  • Moved private keys out of source control and into protected pipeline storage
  • Made signing a pipeline-only step so developers never handle the key

A recurring outage class eliminated and a clear audit trail for every signed release.

  • C#
  • .NET
  • PowerShell
  • Azure DevOps
  • Certificates
Data

Schema snapshots and environment drift reporting

Challenge

Development, test and production databases had drifted apart and nobody could say with confidence what was different or why.

Approach

  • Automated nightly schema snapshots of several databases into source control
  • Built a drift report that compares environments and delivers a chat summary plus a generated workbook
  • Fixed formatting noise at the source by pinning tooling and canonicalizing output
  • Separated expected migration changes from unexpected drift with configurable markers

Close to a thousand false flags reduced to a few dozen genuine differences, so the report is trusted and acted on.

  • SQL Server
  • Database Projects
  • Azure DevOps
  • C#
  • Microsoft Teams
  • Excel
Identity

IT self-service portal

Challenge

Routine account and workstation tasks consumed help desk time and required elevated tools on technician machines.

Approach

  • Built an Angular portal on an ASP.NET Core API using Windows Authentication
  • Exposed Active Directory account lookup and common account actions behind group-based authorization
  • Added remote session and device management for support staff
  • Kept privileged operations on the server, never in the browser

Faster resolution of everyday requests with consistent, logged actions instead of ad hoc admin sessions.

  • Angular
  • ASP.NET Core
  • Active Directory
  • Windows Authentication
  • CIM
Modernization

Central job and task hub

Challenge

Dozens of scheduled console apps and watchdog services were spread across servers, with failures that went unnoticed for days.

Approach

  • Consolidated jobs into a modern .NET service with persistent scheduling and history
  • Replaced fragile trigger chains with queue processors that claim work atomically
  • Routed alerts to chat and email with enough context to act on
  • Retired legacy executables one by one as their jobs moved over

One place to see, run and troubleshoot background work, and fewer servers to babysit.

  • .NET 10
  • Quartz.NET
  • Dapper
  • Serilog
  • Microsoft Graph
Integration

Partner integration services

Challenge

Order, status and document exchanges with outside partners relied on manual steps and brittle file transfers.

Approach

  • Built REST services and inbound webhooks with IP allow-listing and credential vault integration
  • Replaced file-based partner exchanges with API messaging and status tracking
  • Added token caching, connection diagnostics and production hardening

Major reduction in manual hours and developer involvement for day-to-day partner traffic.

  • ASP.NET Core
  • REST
  • Webhooks
  • Dapper
Product

Batch pricing automation tool

Challenge

Pricing large request batches meant hours of copy and paste between spreadsheets and web portals.

Approach

  • Built a desktop tool that processes batches against multiple pricing APIs in parallel
  • Added configurable client selection, timeouts with re-run prompts and session logs
  • Covered the conversion logic with unit tests

A large productivity gain for the team using it, and faster turnaround on revenue-generating work.

  • C#
  • .NET 9
  • WinForms
  • REST
  • MSTest
Identity

Credential store and shared libraries

Challenge

Secrets and connection details were duplicated across configuration files in many applications.

Approach

  • Created read-only client libraries for a central credential store
  • Packaged them on a private feed with dependency injection extensions
  • Added shared IP allow-listing and email modules so services stop re-implementing them

Secrets out of config files and a consistent way for every new service to get what it needs.

  • .NET 10
  • NuGet
  • Dapper
  • Dependency Injection
Identity

Remote desktop gateway certificate automation

Challenge

Gateway certificate renewals broke remote access whenever a post-renewal script failed.

Approach

  • Replaced the broken post-renewal step with an idempotent PowerShell binding script
  • Ran it under a group managed service account instead of a domain admin

Hands-off renewals with least-privilege automation.

  • PowerShell
  • Remote Desktop Services
  • gMSA
  • Windows Server
Product

Developer extensions for pipelines and code search

Challenge

Finding pipelines, releases and code across many repositories meant endless clicking through a portal.

Approach

  • Designed and published three platform marketplace extensions
  • Built pipeline exploration, release monitoring and cross-repository, cross-branch code search
  • Matched the host theme and permissions model so they feel native

Publicly available tools in daily use for navigating large DevOps estates.

  • TypeScript
  • React
  • Extension SDK
  • REST APIs
Product

Role-based community and booking portals

Challenge

Small organizations needed secure member portals without enterprise budgets.

Approach

  • Built Angular front ends with role-based access and modern sign-in
  • Backed them with .NET and Node APIs on MySQL
  • Shipped as hardened containers behind an automatic TLS front door

Production sites with admin workflows, notifications and one-command deployments.

  • Angular
  • .NET 10
  • Node.js
  • MySQL
  • Keycloak
  • Docker
  • Caddy