Profile picture
Paul Abrams
Software Engineer
Home
Software development
DevOps
Personal projects
Blog
CV / Resume
LinkedIn
GitHub
Back

Paul Abrams

Senior Full-Stack Developer | Web & Cloud | CI/CD | 15+ Years Government / Enterprise | Professional Scrum Master

Toronto, Ontario | j.paul.abrams@protonmail.com | LinkedIn | GitHub
Download PDF

Professional Summary

Full-stack developer with 15+ years of progressive experience building web-based B2B and B2C applications in client/server environments, modernizing legacy systems, and operating CI/CD pipelines at scale across the Government of Canada — Department of Justice, CIC / IRCC, ESDC (Benefits Delivery Modernization). Recurring pattern: self-initiated automation that pays back substantial labour cost — an IBM Rational Functional Tester framework that eliminated a 2-week regression cycle (~98% reduction, ~$160K saved per cycle), a self-built availability-monitoring suite that replaced volunteer evening checks, scheduled tooling that closed gaps no off-the-shelf product covered, modernization by deletion (replaced contractor-built UI-driven release apps with PowerShell against REST APIs). Strong on .NET / C# server-side (n-tier ASP.NET / ASP.NET MVC / ADO.NET / Entity Framework / LINQ at 5,000+ users; .NET Framework 2.0 / 3.5 / 4.0 / 4.5 / 5.0 and .NET 6/8 across roles), React + TypeScript on the front end, and Microsoft Azure PaaS (Functions, SQL, APIM, Key Vault, Entra) alongside Azure DevOps Server (TFS) installation, configuration, customization, and multi-environment upgrades. Deep Microsoft toolchain: Visual Studio 2005 → 2022, MS SQL Server 2005 / 2008 / 2008R2 / 2012 / 2016+, IIS 7 / 8 / 10, HTML / CSS / XML / XSLT / JavaScript / jQuery / AJAX, Crystal Reports / SSRS / SSIS, OOP, entity-relationship modelling, FDD/TDD with multi-month work-package-level effort-estimation breakdowns. Comfortable in regulated environments — ITSG-33 / PBMM, WCAG / AODA, ITIL. Professional Scrum Master I. Active open-source contributor (60+ public PRs).

Professional Experience

Full-Stack Developer

Abrams Software Kingston, Ontario - Remote August 2025 - Present
  • TWNR — architected and shipped a public-facing B2C multiplayer trading game as a full-stack web application, solo. Dockerized TypeScript pnpm monorepo: Express + WebSocket server backed by PostgreSQL, terminal-style xterm.js client served by Vite, individual player sign-up with JWT auth, JSON-Schema-generated REST API contract that doubles as live documentation. Concurrency-correct game state via PostgreSQL transactions. Live at twnr.paulabrams.ca.
  • Chess Attack Visualization — React + TypeScript training app consuming the Lichess.org REST API. Diagnosed a missing x-ray attacker feature in chess.js via React-lifecycle breakpoint debugging, opened upstream PR #572, and published a fork as @pabrams/chess.js on npm. Live at paulabrams.ca/chess-attack-visualization.
  • Portfolio site at paulabrams.ca operated as Astro on GitHub Pages with GitHub Actions CI/CD.
  • LLM code evaluation for DataAnnotation.tech and Stellar.ai — designing prompt fixtures and grading rubrics that probe specific model failure modes across .NET / C#, TypeScript, React, Ruby, Python, Go, Rust, and SQL, including security audits at known-vulnerable revisions with CWE/CVSS-graded inventories, adversarial unit tests, and AI-assistant "skills" evaluated through controlled ablation.
  • 60+ public PRs to outside repos — Microsoft's vsts-team-calendar and tfs-cli, the official TypeScript-Website, the Microsoft Authentication Library .NET docs, canada-ca/platform-security, the Dygma split-keyboard configurator, and others.

Senior Software Engineer, Infrastructure and Cloud Enablement

Employment and Social Development Canada (BDM Project) Gatineau, Quebec December 2021 - July 2025
  • Enhanced and maintained a microservices enterprise onboarding application serving procurement, HR, and IT-ops personnel as internal customers across the BDM project — C# / .NET, Blazor, Azure SQL, Azure Functions, GraphQL. Designed and consumed REST APIs between services; integrated with enterprise IAM via Azure AD / Entra (OAuth 2.0, OpenID Connect); published and governed APIs through Azure API Management.
  • Event-driven workflows via Azure Functions — Blazor front-end submissions kicked off Functions that triggered ADO pipelines, applied ADO security and work-item updates, integrated with on-prem Active Directory via AAD Connect, and applied AAD group memberships based on personnel profile.
  • Migrated downstream identity to Azure Managed Identities — replaced rotating Key Vault secrets and ADO Personal Access Tokens (90-day rotation, with all auto-generated ADO work items attributed to one person) with service principals issued at runtime through Entra. Eliminated the secret-rotation incident class and properly attributed automated activity.
  • Designed and shipped custom Azure DevOps web extensions in React / TypeScript / Node.js — a build/deploy analytics widget rendering success-rate charts via the ADO Builds REST API; a people-by-project reporter using an in-memory hashmap for tractable cross-referencing; a weekly work-item digest emailer driven by scheduled pipelines.
  • Built PowerShell tooling against the Azure DevOps REST API to snapshot area paths, iteration paths, and security configurations on a schedule and commit those snapshots into Git as a configuration-drift detector — closing a gap no off-the-shelf product covered.
  • CI/CD pipelines in Azure DevOps for build, test, Docker containerization, Kubernetes deployment, and Azure Data Factory orchestration. Implemented ITSG-33 (NIST-based) security controls — TLS / SSL certificate management, secret hygiene via Azure Key Vault — for SA&A submissions against a PBMM security profile.
  • Administered Azure DevOps Services for all BDM teams; advised on Agile / Scrum / CMMI process templates, branching strategies, PR workflows; connected Power BI to ADO Analytics; ensured WCAG accessibility compliance.

Development Lead, Testing Services

Employment and Social Development Canada Gatineau, Quebec August 2019 - November 2021
  • Co-architected an internal C# / .NET web application enabling QA staff and business analysts to author structured automated test scenarios via a web UI; designed the SQL Server schema and co-designed the REST API on the web-app side enabling bidirectional integration with Azure DevOps pipelines — script-fetch endpoints (versioned Selenium scripts generated on the fly from SQL) and results-push endpoints for structured test outcomes. Integrated with the departmental headless CMS platform.
  • Engineered Azure DevOps CI/CD pipelines for automated testing — provisioned Windows agents to execute parallel Selenium UI tests against deployed applications and integrated logged test results back into ADO work items.
  • Championed the departmental transition from LoadRunner to JMeter, reducing licensing costs while maintaining robust performance-testing capabilities.

Team Lead / Technical Lead

Department of Immigration, Refugees, and Citizenship Canada Ottawa, Ontario April 2018 - August 2019
  • Led Agile / Scrum sprint planning, review, retrospective, daily stand-up, and backlog refinement; pioneered capacity-planning and forecasting using Azure DevOps Server; introduced poker planning estimation across a cross-functional team.
  • Administered departmental TFS instances and maintained heavily customized Agile, Scrum, and CMMI process templates; managed user/group security across multiple project collections.
  • Mentored developers in SQL Server query optimization — query tuning, indexing strategy, partitioned tables, execution-plan analysis — against large TFS databases and warehouses. Also coached on SSRS and C# / .NET.
  • Implemented and deployed custom web extensions in React / TypeScript / Node.js with responsive layouts and accessibility-aligned interactions.

Development Lead — iCase / Microsoft Dynamics CRM Modernization

Department of Justice Canada Ottawa, Ontario January 2016 - March 2018
  • Dev lead on the Legal Case Management System (iCase) — a large n-tier ASP.NET / C# / ADO.NET / .NET Framework 4 enterprise web application used by 5,000+ lawyers — while concurrently building its Microsoft Dynamics CRM successor. Modified iCase schema and front-end UI to surface migration status to users in real time; adjusted the integration stored procedures (icisp_*) consumed by the department's SAP-based financial information system. Stack also: Visual Studio 2013, MS SQL Server 2008R2 / 2012, IIS 7 / 8.
  • Engineered MS Dynamics CRM plug-ins, custom actions, and workflow processes in C#; rewrote SQL stored procedures as C# with LINQ inside CRM; used SSIS for ETL between iCase and Dynamics. Set up relationships between system and custom entities; performed form customization with JavaScript on CRM forms; produced entity-relationship diagrams and detailed multi-month effort-estimation breakdowns (FDD/TDD) prior to implementation. Applied design patterns (Repository, Strategy, Mediator) and clean-code refactoring.
  • Established code-review processes integrated directly with TFS work items — gating standards for maintainability, security, and performance — and mentored junior developers.

Senior Software Engineer · TFS / Release Engineering Lead

Department of Citizenship and Immigration Canada Ottawa, Ontario April 2014 - December 2015
  • Hired alongside one other engineer to take over a TFS / TFVC release-management environment from a contractor team. Decommissioned over-engineered legacy C# desktop release-management apps and replaced them with lightweight PowerShell scripts calling the TFS REST APIs — net result, most of the contractor tooling was simply deleted. Everything about the application ended up in source control — group memberships, permissions, repository access, process template customizations. Used XSLT-via-PowerShell to transform Work Item Template (WIT) XML for automated deployment of custom TFS process templates.
  • Installed, configured, customized, and upgraded TFS / Azure DevOps Server across dev / UAT / production environments — complex multi-step upgrade paths, Kerberos / SPN configuration on application tiers without domain-controller access (coordinated with AD admins), database-tier migration, and process-template re-customization post-upgrade.
  • Maintained a fork of Microsoft's vsts-team-calendar extension with configurable colours, Outlook integration, release-management features, and IE-compatibility shims for the department's mandated browser; contributed back upstream.
  • Guided development teams in migrating from legacy XAML builds to modern, scriptable build definitions; ran Waterfall vs Agile SDLC comparison sessions; wrote runbooks for TFS operation, maintenance, and troubleshooting so the work could be handed off cleanly.

Full-Stack Developer (2010–2014) · Software Development Engineer in Test (2006–2009)

Department of Justice Canada Ottawa, Ontario October 2006 - March 2014

Core contributor to the department's flagship Legal Case Management System (iCase) — a distributed multi-tier ASP.NET / C# enterprise web-based B2B / B2C client/server application used by 5,000+ government lawyers and contracted agent firms across Canada (agents ran their own businesses and tracked billing and timekeeping inside iCase — B2B; financial integration also crossed organizational lines within the department). Multi-tier with role- and object-based security, integrated with records management, financial, and email systems, 24/7 high availability. Stack: Visual Studio 2005 / 2008 / 2010, ASP.NET / ADO.NET, .NET Framework 2.0 → 4.0, MS SQL Server 2005 → 2008R2 → 2012, IIS 6 / 7 / 8, HTML / CSS / XML / XSLT / JavaScript / jQuery / AJAX, Crystal Reports → SSRS.

  • Led design and largely solo implementation of the “My iCase” widget portal — the new entry point to iCase. Ran JAD sessions, produced prototypes, authored BDD/TDD documentation. Built on ASP.NET Web Parts and the Personalization framework with a custom SQL personalization provider, Knockout.js MVVM on the front end, async AJAX, async HTTP handlers, ReportViewer in remote SSRS mode, and an HTML5 polyfill for the department-mandated IE8.
  • Diagnosed a homepage report taking ~10s uncached: profiled with SQL Profiler, Report Execution logs, and execution plans, then replaced live joins with a flat table populated by a nightly job. ~50× faster uncached, 3–4× faster cached.
  • Built a self-initiated availability-monitoring suite for web and document servers (an early SRE-style intervention); eliminated significant overtime and reduced operational risk.
  • Diagnosed and resolved a COM Interop memory leak across the document servers; built automated health monitoring to catch regressions.
  • Co-led the SQL Server 2005 → 2012 database upgrade; migrated core business modules from VB.NET to C#; contributed to the Crystal Reports → SSRS migration including 14 SSRS reports for the Legal Risk Management module.
  • Voluntarily architected a custom Java-based test framework in IBM Rational Functional Tester that parsed English-language scenario documents and auto-generated executable test scripts. Replaced a 2-week, 20–25-tester all-hands regression cycle with one person in five days. ~98% reduction in release validation effort, ~$160,000 saved per cycle, eliminated the standing 2-week code freeze per release. Contributed 500+ posts to the IBM Developerworks Automated Functional Testing forums.

Education & Certifications

Bachelor of Computer Science (Honours)

Carleton University — September 1999 - May 2003

Honours Project: A Hierarchical Genetic Algorithm for the Traveling Salesman Problem

Bachelor of Computer Science degree

Professional Scrum Master I (PSM I)

Scrum.org — September 2025

Verify Certification | View Certificate