I build the infrastructure and the pipelines that let a team ship without breaking production.
DevOps and cloud engineer. AWS and Terraform, Kubernetes with GitOps, CI/CD with security gates that block bad builds, monitoring that catches problems in minutes, and infrastructure with no static credentials anywhere.
I also run the customer book on one of these platforms, so an escalation reaches engineering with the detail they need and reaches the customer in language they can act on. See the customer success work
Elizabeth IkechukwuDevOps and cloud engineer, remote from Abuja, Nigeria (UTC+1)
Each one links to its code. The diagrams are drawn from the Terraform in those repositories.
TaskFlow: a task management platform where nobody touches a server
Sole engineer. 10 weeks.
Most teams lose days to deployments: someone signs in to a server, pulls an image, restarts a container, and hopes. TaskFlow removes that person from the loop.
6 gates before anything reaches production. Lint, unit tests, build, Trivy scan, integration tests, publish. The scan blocks on CRITICAL and HIGH, so a bad image fails the build instead of landing in the registry. One run stopped on 6 high-severity findings, which I traced to npm's own dependencies in the Node base image and documented against each CVE with a review date.
6 HIGH findings stop the build before any image reaches ECR.
No AWS credentials to leak. GitHub Actions signs in through OIDC and gets credentials that expire with the job. Every pod holds its own scoped IRSA role, 6 in total, and secrets sync from SSM hourly through External Secrets Operator. Port 22 is closed, deploys run through SSM Session Manager, and every session lands in CloudTrail.
CI never writes to Git. ArgoCD Image Updater watches ECR and promotes the SHA-tagged image itself, so branch protection on main holds with no bypass and every running container traces back to its commit.
14 resources synced from main, 0 out of sync.
The cluster corrects itself. 3 nodes across 2 availability zones, HPA scaling 2 to 5 replicas, PodDisruptionBudgets holding 1 replica up through maintenance, NetworkPolicies limiting the backend to frontend pods and ALB health checks. ArgoCD reverts manual drift within a sync cycle.
Metrics and logs from day one. Prometheus and Grafana for cluster and per-pod metrics, Fluent Bit shipping every container log to CloudWatch, all of it provisioned by Terraform rather than installed by hand.
Cluster metrics while the platform was running, per namespace.Traffic on the left, the delivery pipeline along the bottom.
3 things that broke. ECR returned 403 after OIDC succeeded, so authentication passed and authorization failed: I added the 2 actions buildx needs to check existing layers. Pods couldn't reach RDS because the VPC CNI gives pods their own IPs rather than the node's, so I widened the security group rule to the pod CIDR. ArgoCD was silently applying only namespace.yaml until I set directory.recurse and the other 13 manifests appeared.
Cluster torn down for cost. The live demo runs the same images on 1 EC2 instance, and one terraform apply rebuilds the platform.
PulseOps: incident management for multiple organisations, with tenant isolation proven by a test
Live at pulseops-app.online.
When an incident ends, most teams lose the next hour reconstructing it: who was paged, when it was acknowledged, what actually fixed it. PulseOps writes that record as it happens. Declare, tag severity, track on a live timer, and on resolve a blameless postmortem generates itself, pre-filled with the real timeline and response times.
Isolation proven, not assumed. Every organisation's incidents sit in one database. A test asks for another organisation's incident by its exact record ID and expects a 404, since a 403 would confirm the record exists. It is asserted on read, transition and delete, and runs with 28 others on every push.
4 suites, 29 tests, including tenant-isolation.test.js, on every push.
The isolation sits in the query. Auth verifies the token and extracts the organisation, then every query runs scoped to it. No code path reaches a row without one.
The refused path in red: scoped out at the query, so the response never has to hide anything.
2 pipelines, 2 identities, 0 stored credentials. Terraform assumes an infrastructure role, the deploy workflow a narrower one. Both through OIDC. JWT secrets and the database password live in SSM.
What broke. Terraform and the deploy pipeline were both authoritative over which image version was running. Nothing had failed yet, but the next routine infrastructure change would have rolled back a working deploy with no error and no alert. I split ownership so Terraform controls the service and the pipeline controls the image.
Terraform throughout: a VPC across 2 availability zones, RDS PostgreSQL and Redis in private subnets, ECS on EC2, ECR scanning on push. Every merge tags the image with its commit SHA and rolls out a new task revision. HTTPS went on after launch, on live infrastructure, with no downtime.
I also run its customers. 8 accounts in HubSpot on this platform: onboarding, health scoring, an escalation after our own outage, a quarterly business review and a $65,000 expansion. Read the customer success case study
Banking platform: the infrastructure 3 teams deployed onto
Infrastructure team lead, 23-engineer build. April to May 2026.
Pod 13 shipped a 3-tier banking application: React frontend, a REST API handling auth, accounts and transactions, MySQL behind it. Frontend and backend teams owned their services. I led the 7-person infrastructure team and owned everything those services ran on.
45 AWS resources, none created in the console. A VPC with 6 subnets across 2 availability zones split into public, private and database tiers, an EKS 1.32 cluster scaling 2 to 6 nodes, RDS MySQL with no public endpoint, Route53 and ECR. State in S3.
Delivery ran through the pipeline. A pull request runs fmt, validate and plan so the team reviews the diff; a merge runs apply. ArgoCD syncs both services onto the cluster behind nginx ingress, with cert-manager issuing Let's Encrypt certificates for 3 subdomains.
The platform the frontend and backend teams deployed onto.
2 things that broke. The S3 bucket holding Terraform state was deleted, leaving every live resource untracked including a running EKS cluster: I recreated the bucket, restored state and turned on versioning so it couldn't happen twice. Then the backend team's pods couldn't reach the database, and their credentials were fine: the RDS security group had no rule admitting the node group on 3306, so I added it.
Monitoring that has never fired is a guess. I broke things on purpose to find out whether mine worked.
4 incidents, every one inside SLA. Nginx down, CPU at 95%, disk past 80%, and an HTTP 502 caught by a synthetic check. Datadog detected each in 1 to 11 minutes, fixes took 3 to 43.
The CPU monitor firing at 10:11 and clearing at 10:15.
Every alert carries its runbook. The Slack message holds the checks to run, the remediation script path and a link to the runbook, so whoever is on call does not start by working out where to start. The synthetic check also blocks the pipeline, so a deploy cannot land on a service that is already broken.
The repeatable fix runs itself. A nightly cron job clears disk at 02:00 and logs every run, so the most common failure on this server never needs a human. The CPU script sits alongside it, scoped to this lab: in production a scheduled kill of the top process would eventually take out work that was doing its job, so it would need to target a known runaway process or page someone instead.
The script terminating runaway processes, CPU back to idle in the same run.
What broke. While working the disk incident I found the alert was watching the wrong disk, so it would have stayed silent through the exact failure it was written for. I pointed it at the right one and re-ran the drill to confirm.
Distributed inference on AWS: a language model across 3 machines
Built as a take-home for an internship application.
Running a model on one box is easy. The work is splitting it across machines that have to find each other, stay connected, and keep the model off the public internet.
1 machine reachable from outside. Nginx takes requests on port 80 on a public host. Both workers sit in a private subnet with no inbound route, reaching out through NAT only, and talk to the engine over WebSocket on the internal network.
One public entry point, both workers private.
Sized per workload. The caller worker runs TypeScript on a t3.small; only the inference worker needs a t3.medium, because only it holds the model. Terraform throughout, one compose file per machine, so the reviewer could rebuild all 3 machines from the repo.
AWS: EKS, EC2, ECS, RDS, ElastiCache, VPC, IAM, ALB, ECR, S3, SSM, ACM, Route53, CloudWatch. Terraform with remote state and modular architecture.
Kubernetes and containers
EKS, kubeadm, Docker, Helm, HPA, PodDisruptionBudgets, NetworkPolicies, AWS Load Balancer Controller, nginx ingress, cert-manager. Preparing for the CKA.
CI/CD and GitOps
GitHub Actions with multi-stage pipelines and OIDC authentication, ArgoCD with automated sync, prune and self-heal, ArgoCD Image Updater.
Security
IRSA, External Secrets Operator, SSM Parameter Store and Session Manager, Trivy scanning, CVE triage, non-root containers, TLS end to end, multi-tenant isolation with tests.
Ubuntu and Amazon Linux administration, systemd, Nginx, cron, Bash. VPC design, DNS, TLS, load balancing, subnets, security groups.
Where I have done this
Newest first.
DevOps Engineer and Dev Team Lead
ScaleUpBuild - HelloAgain. Volunteer, remote. July 2026 to present.
Lead the dev team and own infrastructure design for an AI-powered WhatsApp commerce platform: AWS through Terraform, multi-environment Kubernetes with ArgoCD, GitHub Actions, and always-on webhook infrastructure for the WhatsApp Business API. Settled the architecture trade-offs with leadership before anything was provisioned, covering the real-time layer, multi-tenant isolation and data residency, which kept the build off a path that would have needed rework.
Co-Trainer and DevOps Engineer
Digital Witch Support Community. Part-time, remote. January 2025 to present.
Cut environment setup from days of manual work to a version-controlled deployment any engineer can run, with Terraform across development, staging and production. Removed every static credential from delivery with a 6-stage GitHub Actions pipeline on OIDC.
Tuned Datadog thresholds across 2 servers to cut false alarms while still catching a real traffic drop within 5 minutes, then proved it end to end with incident drills. Teach live AWS and Azure sessions and coach trainees through unfamiliar tools and errors.
Infrastructure Team Lead
Fintech Banking Platform, Digital Witch Pod 13. Team project. April to May 2026.
Led the 7-person infrastructure team on a platform built by 23 engineers. Full write-up above.
Customer Service Representative
Various roles, Nigeria. 2017 to 2024.
8 years resolving customer issues end to end across hospitality, retail and consumer electronics, building the communication, escalation and documentation discipline now applied to infrastructure incident response.
Education and certifications
CKA (Certified Kubernetes Administrator), in progress.
DevOps and Cloud Security Certification, Digital Witch Support Community, June 2026.
BSc Cybersecurity, Miva Open University, Abuja.
Technical Support Fundamentals, Google, November 2025.
Hiring for DevOps or cloud?
Email is quickest. I work remotely from Abuja, Nigeria, on UTC+1.