jj.dev
SUPPORT OPERATIONS AUTOMATION · CONSULTING

Justin Johnson

Operator turned engineer ★ AWS Certified Solutions Architect

I ran BPO support operations for 900+ agents, then became a cloud engineer. Now I help support teams handle more customers without adding headcount, using process, automation, integrations and AI, and prove it in the numbers leadership already watches: cost per contact, service levels and customer satisfaction.

900+BPO agents led
15%SLA attainment gain
30%fewer failed deploys
20%compute cost cut
jj@prod-cluster:~
$

Outcomes that matter

Results from my professional roles. Operations first, because that is where technology has to pay off.

900+
BPO agents directedBell Canada · support operation across multiple lines of business
+15%
SLA attainmentBell Canada · analytics that removed tier-1 support bottlenecks
+30%
Cross-sell close rateBell Canada · training program for a 176-agent team
~30%
Fewer failed deploymentsBell Media · automated release pipelines, several releases a week
5+ hrs
Saved per sprintBell Media · internal tooling that removed repetitive setup work
~25%
Faster release cycleCallTek · standardized Jenkins, Docker and Helm pipelines
~30%
Less environment setup effortCallTek · reusable Terraform and Ansible modules
~20%
Lower compute costCallTek · right-sized Kubernetes workloads, no loss of availability

The dashboard that hid our SLA breaches

A short case study from running BPO support operations. It is the lens I bring to every support team I work with.

Professional experience · Bell Canada · 2020 to 2022

Context

A support operation that grew from a 176-agent team I managed directly to 900+ BPO agents across several lines of business, all measured on service level agreements (SLAs).

Problem

Leaders saw performance through lagging, manually built reports. By the time a breach showed up, the day was already lost, and the same tier-1 bottlenecks kept repeating.

What I did

  • Replaced lagging reports with real-time KPI dashboards
  • Used the data to find and remove recurring tier-1 bottlenecks
  • Redesigned staffing and shift models to cut overtime
  • Worked with IT on monitoring alerts that caught issues before customers did

Result

SLA attainment up 15%, fewer undetected breaches, lower overtime spend, and clear ownership during incidents.

Why it matters now: most support problems I see today have the same shape. Nobody sees the right number in time, and nobody owns fixing it. I set up the measurement first, then fix the process, automation and AI behind it.

Career Timeline

Senior DevOps Engineer · CallTek
Oct 2024 – Present
  • Designed Jenkins CI/CD pipelines with Docker and Helm across dev, staging, and production. −25% deploy time
  • Built reusable Terraform & Ansible modules for AWS and GCP multi-region environments. −30% provisioning effort
  • Automated backup and disaster recovery workflows, improving RTO and platform resilience against unplanned outages.
  • Optimized container resource allocation and workload scheduling on managed EKS clusters. −20% compute cost
Freelance Software & DevOps Engineer · Independent
Oct 2023 – Oct 2024
  • Delivered cloud infrastructure, full-stack apps, and DevOps tooling for multiple clients, consistently on schedule.
  • Shipped React and Node.js applications end-to-end: UI, API integration, and AWS deployment with automated CI/CD.
  • Built and maintained personal AWS projects at production-grade reliability using containerization and automated pipelines.
  • Configured AWS-native services including S3, CloudFront, Lambda, and API Gateway for client production workloads.
DevOps / Software Engineer · Bell Media
Mar 2022 – Oct 2023
  • Implemented automated CI/CD pipelines enabling multiple production releases per week. −30% deploy failures
  • Built React components and Node.js REST APIs for internal editorial and content-ops tooling.
  • Created internal developer tooling that standardized environment setup and deployment. 5+ hrs saved/sprint
  • Embedded vulnerability scanning and secrets detection into delivery pipelines with the security team.
Senior Operations Manager · Bell Canada
Feb 2021 – Mar 2022
  • Directed BPO support operations spanning 900+ agents across multiple lines of business, maintaining SLA targets for enterprise service delivery. 900+ BPO agents
  • Identified bottlenecks across tier-1 support workflows using data analytics and reporting. +15% SLA attainment
  • Led cross-functional incident response coordination, reducing mean time to resolution across business units.
  • Aligned operational reporting with ISO 27001 governance requirements across multiple business units.
Operations Manager · Bell Canada
Apr 2020 – Feb 2021
  • Managed 176 agents and implemented targeted training programs. +30% cross-sell close rate
  • Deployed KPI reporting dashboards that measurably reduced undetected SLA breaches across service lines.
  • Optimized staffing allocation models and shift workflows, reducing overtime costs.
  • Worked with IT to implement proactive monitoring alerts for earlier issue detection before customer impact.

Featured Work

Personal projects, built to production patterns. They show how I build; each one says why it matters to a business.

Spring Boot
→
Maven
→
Docker
→
GH Actions
→
Helm
→
Kubernetes
→
Kafka
Personal project
// Java + Kubernetes + Platform Engineering

Spring Boot Service to Production

Takes a Java Spring Boot service the whole way to production: a Maven build, a small container image, a Helm chart on Kubernetes that rolls out new versions with no failed requests, a pipeline that publishes every tested commit, and a Kafka lab for event streaming. Each stage was tested on purpose, including breaking things to measure what goes wrong.

Why it matters to a business: customers keep getting answers while new versions ship, Java services don't get killed for running out of memory, and only tested code ever reaches the image registry.
0 / 289
requests failed in a rollout
18 / 114
failed without probes
138 MB
Java runtime image
< 2 min
pipeline per commit
01 · Build 02 · Containerise 03 · Deploy 04 · Automate 05 · Stream (Kafka)
  • Multi-stage Dockerfile: Maven and the JDK build the app, only the JRE and JAR ship, running as a non-root user
  • Reproduced an OOMKill (exit code 137) in a 256 MB container, then fixed it with container-aware heap sizing
  • Helm chart with startup, readiness and liveness probes, graceful shutdown and atomic rollback
  • GitHub Actions builds, tests and checks the chart, then publishes images tagged by commit
  • Kafka lab on consumer groups and lag, including a hot partition caused by key skew
  • Every result is written up in the repository, with commands to reproduce it
Tickets
→
Contact reasons
→
Readable rules
→
Local model
→
Cost model
→
Report
Personal project
// Support operations + AI automation

Support Ticket Diagnostic

Reads a support ticket export and answers three questions: what customers contact you about, which of those contacts can be handled without a person, and what the difference is worth per month. The output is one shareable report with every input and its source printed on the page. Sample run on a public dataset of 26,872 support messages.

Why it matters to a business: automation is costed against measured routing accuracy rather than a vendor's assumption that routing is perfect, and the contact reasons that need a person are named as such instead of being automated badly.
26,872
tickets classified
95.8%
accuracy on unseen tickets
0.9%
held back for a person
$0
AI cost per ticket
01 · Contact reason taxonomy 02 · Rules a client can edit 03 · Local language model 04 · Cost model Decision records
  • 27 raw intents grouped into 16 contact reasons, each tagged by how it should be resolved
  • Readable rules classify 88.1% correctly on held-out tickets, four passes to get there
  • A local model handles only what the rules cannot match, taking the total to 95.8%
  • Weak matches are held for a person rather than guessed, so confident misrouting stays rare
  • Containment targets are cut by measured accuracy, so the business case never assumes perfect routing
  • Every assumption, limitation and reversed decision is recorded in the repository
GitHub
→
GH Actions
→
OIDC Auth
→
API Gateway
→
Lambda
→
DynamoDB
→
CloudFront
Personal project
// AWS Solutions Architecture + DevOps

AWS Hybrid Architecture Portfolio

Four AWS builds, each documented the way a team would hand it over: architecture, security, operations and teardown notes, with decision records for the key trade-offs. Built and tested in a live AWS account, and the static site deploys through GitHub Actions with OIDC, so no AWS keys are stored.

Why it matters to a business: every design choice is written down with its trade-offs, and deployments need no stored cloud credentials that could leak.
4
AWS builds
0
stored AWS keys
ADRs
for key trade-offs
Teardown
steps for every build
01 · Serverless API 02 · Event-Driven Architecture 03 · Static Site + CDN 04 · CI/CD with OIDC ADR Decision Records
  • Serverless REST API on API Gateway, Lambda and DynamoDB, with decision records on Lambda vs EC2 and DynamoDB vs RDS
  • Event-driven system with SNS, SQS and dead-letter queues, with failure handling documented
  • Secure static delivery with S3 and CloudFront, using a private origin
  • GitHub Actions deploys through OIDC, with zero long-lived AWS credentials
  • Security, operations and teardown notes for every build
  • Built and tested in a live AWS account, with screenshots as evidence
Pull Request
→
GH Actions
→
OIDC · Entra ID
→
Approval Gate
→
Terraform
→
Azure
Personal project
// Azure DevOps + Platform Engineering

Azure Terraform Pipeline with OIDC

A GitHub Actions pipeline that builds Azure infrastructure with Terraform without storing a single password. Every pull request gets a security scan and a Terraform plan posted for review, and production changes wait for a person to approve them.

Why it matters to a business: every infrastructure change is reviewed, approved and traceable, with no stored credentials to leak. Changes made by hand outside the pipeline are caught and reversed.
0
stored secrets
PR
plan posted for review
1
approver before prod
Drift
detected and reverted
01 · OIDC Sign-in 02 · Plan on Pull Request 03 · Approval Gate 04 · Locked Remote State Drift Detection
  • Workload identity federation, no secrets in GitHub
  • Least-privilege identity scoped to one resource group
  • Format check, Checkov scan and plan on every PR
  • Protected prod environment with a required approver
  • State in Azure Storage: keyless, versioned, locked
  • Drift caught by plan and traced in the Activity Log
Docker
→
Ollama
→
RAG / LangChain
→
FastAPI Agent
→
Prometheus
→
React UI
Personal project
// MLOps / LLMOps Platform Engineering

LLMOps Reference Platform

6 stages LLMOps platform

End-to-end LLMOps platform built to production deployment standards: model serving, RAG pipelines with vector search, CI/CD-gated evaluation, Prometheus observability, and multi-agent orchestration — deployed on containerized infrastructure reflecting enterprise AI patterns.

Why it matters to a business: AI answers are tested before anyone sees them. A 32-test evaluation suite runs on every model or prompt change, the same discipline support teams need before an AI agent talks to customers.
6
MLOps stages
Local
first inference
Live
WebSocket UI
Eval
CI pipeline
Stage 1 · Model Serving Stage 2 · RAG Pipeline Stage 2.5 · DevOps AI Agent Stage 3 · CI/CD for AI Stage 4 · Observability Stage 5–6 · Multi-Agent UI Security Hardening
  • Full LLMOps lifecycle: model serving, RAG, CI/CD evaluation, and observability
  • Local-first inference via Ollama, with optional fallback to Amazon Bedrock; MLflow experiment tracking
  • DevOps AI agent with Docker socket access for container orchestration via natural language
  • CI/CD evaluation gate: automated pytest eval suite runs on every model or prompt change
  • Production observability: Prometheus, Grafana, and Evidently AI for model drift monitoring
  • Multi-agent orchestration with streaming React/WebSocket UI

Cloud Architecture Explorer

Interactive diagram of the AWS Hybrid Architecture Portfolio. Click any service to learn more.

Toolkit

Operations and engineering skills come from professional roles; AI tooling comes from my personal projects.

SLA Management Real-time KPI Dashboards Staffing & Shift Models Agent Training & Coaching Incident Response ISO 27001 Reporting Amazon Bedrock RAG Pipelines Vector Search (Qdrant) LLM Evaluation Multi-agent Orchestration AWS EKS IAM VPC CloudWatch GCP GKE Docker Helm Linux RHEL Terraform Ansible Jenkins GitHub Actions CI/CD Pipelines Kubernetes Container Scheduling Prometheus Grafana ELK Stack Alerting Image Scanning Secret Detection AWS Secrets Manager Parameter Store OIDC Python Bash / Shell Groovy JavaScript
Support Operations
AI (personal projects)
Cloud & Containers
IaC & Orchestration
Observability
Security
Languages

Credentials

🏅
AWS Certified Solutions Architect — Associate
Amazon Web Services
🧠
AWS Certified Generative AI Developer — Professional (in progress)
Amazon Web Services
🎓
Software Development
Bell University
⌨️
Full Stack Engineering
Codecademy
📊
Project Management · Business Ops · Data Analytics
Microsoft Learn
⌘