▣phuc.cloud
ap-southeast-1 · Ho Chi Minh City Contact Nguyen Hoang Phuc ▾
Portfolio › Dashboard

Nguyen Hoang Phuc

DevOps Lead · Cloud Architect · 6+ years on AWS and GCP

LinkedIn Contact me

Profile details

Nguyen Hoang Phuc
Role
DevOps Lead · Cloud Architect
Location
Ho Chi Minh City, Vietnam
Clouds
AWS · GCP · hybrid on-prem
Certification
Google Professional Cloud Architect
Focus
Kubernetes platforms, security by design, cost, incident response

Service health

  • Multi-tenant SaaS platform Operational
  • GitOps delivery Operational
  • Cost posture −60% media
  • Compliance ISO 27001:2022

Key metrics

Last updated: today
2,000+preschools served, 12 countries
4×order capacity, 500K → 2M/day
−60%total media spend on ~700 TB
8,000+cameras on one live dashboard
~200services on a GitOps GKE platform

Case studies (12)

Select a name to open it
NameTypeDomainRoleStackStatus
Multi-tenant enterprise SaaS on AWSProjectEdTech SaaSDevOps LeadAWS, EKS, CognitoDelivered
Cutting total media spend by 60%ProjectEdTech SaaSInitiative ownerS3, FFmpeg, Cloudflare Cache ReserveDelivered
Leading a small platform teamProjectEdTech SaaSDevOps LeadLeadership, Mentoring, On-callDelivered
AI-augmented engineering, with guardrailsProjectEdTech SaaSDevOps LeadClaude, Least privilege, Human in the loopDelivered
Replacing the VPN with Cloudflare Zero TrustProjectEdTech SaaSDevOps LeadCloudflare Zero Trust, SSO, Least privilegeDelivered
Incident: a feature-flag server takes production downIncidentEdTech SaaSIncident ownerIncident response, ArgoCD, PostmortemResolved
Incident: database load after the enterprise launchIncidentEdTech SaaSIncident ownerPostgreSQL, Lock contention, k6Resolved
RabbitMQ to Kafka: 4× order capacityProjectE-logisticsSenior DevOps EngineerKafka, Ansible, MigrationDelivered
Live video for 8,000+ camerasProjectE-logisticsArchitect and builderGolang, FFmpeg / HLS, ReactJSDelivered
Hybrid cloud for automated sorting warehousesProjectE-logisticsCo-architectGCP, Cloud Interconnect, CloudflareDelivered
A GitOps GKE platform for ~200 servicesProjectE-logisticsPlatform engineerGKE, Anthos, ArgoCDDelivered
Self-hosted MongoDB, from replica sets to shardingProjectE-logisticsSenior DevOps EngineerMongoDB, Ansible, ShardingDelivered
No case studies match your search.

Multi-tenant enterprise SaaS on AWS

EdTech SaaS · DevOps Lead
AWSEKSCognitoPostgreSQL RLSWAFShift-left security

Context

An enterprise tier for school chains, where each school is a tenant. I designed the infrastructure from scratch for the launch.

What I did

  • Two tenancy models: a shared database with PostgreSQL Row-Level Security keyed on the tenant ID from the user's JWT, and dedicated database and servers for schools whose contracts require their own compliance and data residency.
  • Identity on Amazon Cognito with Google and Microsoft SSO and tenant-aware auth.
  • Perimeter of CloudFront, WAF and ALB in front of EKS, with WAF rules tuned from logs and metrics to remove false positives.
  • Threat model at design time, then SAST, DAST, Aikido, Trivy and Gitleaks in CI/CD.
  • Declined to host an SFTP server for a school's financial files; proposed pulling them from the school's own Azure Blob instead, avoiding a new internet-facing service.

Outcome

Launched for the first 3 school chains (~10,000 students) on schedule. Lesson I now apply everywhere: security is cheapest at design time, so it starts in the first design review.

Multi-tenant SaaS architecture on AWS

Cutting total media spend by 60%

EdTech SaaS · Initiative owner
S3FFmpegCloudflare Cache ReserveFinOps

Context

About 700 TB of photos and videos on S3, with high storage and CloudFront egress costs and weak lifecycle management.

What I did

  • Studied the access pattern first: media is hot for about 30 days, then rarely viewed.
  • Switched video transcoding from GPU to tuned CPU encoding with FFmpeg: slower, but scaled out, and about 80% smaller files at good quality, checked across many phone models.
  • Re-encoded old videos still in Standard and Standard-IA; left colder classes alone where re-encoding cost more than it saved.
  • Put Cloudflare Cache Reserve (R2-backed, 30-day TTL) in front of CloudFront so most views never pay CloudFront egress.

Outcome

Total media spend down 60%, measured in AWS Cost Explorer before vs after.

Media pipeline before and after

Leading a small platform team

EdTech SaaS · DevOps Lead
LeadershipMentoringOn-call
  • Hired a mid-level engineer to share the load so I could focus on architecture, security and compliance.
  • Two-way review: PR reviews for all Terraform, staging before production, runbooks and postmortems. My changes get reviewed too.
  • Grew my teammate through ownership: they had never provisioned an AWS production environment; I gave them that work, and they now run production confidently.
  • When ad hoc requests overloaded the team, I set up a ticket form and filtered the queue, which cut interruptions.
  • Joined the ISO 27001:2022 working group for certification, then led the yearly surveillance audit.
How the team works

AI-augmented engineering, with guardrails

EdTech SaaS · DevOps Lead
ClaudeLeast privilegeHuman in the loop
  • AI helps with debugging, IaC, scripts, architecture and learning, under strict rules: its own read-only access key with a few scoped writes, no access to secrets, and no change without my explicit approval.
  • Designing the CloudFront, WAF and ALB setup with metrics, alerts and logging took about a day instead of days to a week, by my estimate.
  • It is not always right: on an S3 cost spike it pointed at the largest buckets, but the real cause was continuous writes to a small one. I checked the data myself and enabled S3 request metrics. Lesson: AI only knows what it can see.
AI workflow with an approval gate

Replacing the VPN with Cloudflare Zero Trust

EdTech SaaS · DevOps Lead
Cloudflare Zero TrustSSOLeast privilege

Internal tools sat behind a legacy VPN, which trusts anyone on the network. I replaced it with Cloudflare Zero Trust for internal access management, so access is checked per user and per application through the company's identity provider instead of network membership. Internal apps are published through Cloudflare Tunnel, so they need no public inbound ports.

VPN replaced by Cloudflare Zero Trust

Incident: a feature-flag server takes production down

EdTech SaaS · Incident owner
Incident responseArgoCDPostmortem

A consumer bug (an infinite loop with an N+1 pattern) flooded our feature-flag server, which slowed every service that depended on it. With AI triaging a storm of alerts, I found the root cause, scaled the flag server as a hot fix in about 10 minutes, traced the traffic to the exact consumer and release, and rolled back through the ArgoCD repo. Every change was approved by me first.

The postmortem's systemic fix was a cache proxy per service so no single consumer can overload the flag server again. I led that rollout with the teams.

Feature-flag incident timeline

Incident: database load after the enterprise launch

EdTech SaaS · Incident owner
PostgreSQLLock contentionk6

Launch day was fine. Days later, a large school chain's staff all used the same features every morning, and core pages slowed down. Scaling database CPU and memory did nothing, which pointed at the real cause: complex queries locking each other. My team traced and fixed queries and indexes until the database was stable, while the product team kept schools informed.

Afterwards I built k6 load tests for realistic peaks. Lesson: launch-day traffic is not real traffic.

Database incident timeline

RabbitMQ to Kafka: 4× order capacity

E-logistics · Senior DevOps Engineer
KafkaAnsibleMigration

RabbitMQ hit its ceiling at ~500K orders/day ahead of a sale forecast at 2M/day. I proposed Kafka, proved it on a non-critical internal flow, then helped migrate critical flows one at a time with idempotent consumers. Kafka ran self-hosted on VMs via Ansible (3 brokers, replication factor 3). We fixed rebalance stalls with static membership and hot partitions by hashing the order ID.

Outcome: 2M orders/day at the next real sale peak with no degradation. I won the other team leads over with incident data and a low-risk proof of concept.

RabbitMQ to Kafka migration

Live video for 8,000+ cameras

E-logistics · Architect and builder
GolangFFmpeg / HLSReactJSKubernetes

Operations needed to view cameras at 1,000+ sorting stations for theft, damage and disputes. A third-party product was too expensive, so I designed and built our own: on-demand streaming where opening a camera assigns a Golang worker that repackages the NVR stream into HLS with FFmpeg, served to a ReactJS dashboard on Kubernetes in a Vietnam data centre.

Key choices: build over buy, on-demand over record-everything, pass-through over transcoding, and in-country hosting for latency. Delivered as one dashboard for every station, at about 1 Gbps peak.

Camera streaming architecture

Hybrid cloud for automated sorting warehouses

E-logistics · Co-architect
GCPCloud InterconnectCloudflareResilience

Three sites, each for a reason: mission-critical order-to-PLC services run locally in each warehouse, user-facing services run on a local cloud in Vietnam, and cloud-native services run on GCP. Warehouses reach GCP over two Cloud Interconnect lines with a leased line as backup, failing over within ~30 seconds. I owned the Cloudflare load-balancing layer in front of the public APIs, with the local cloud as primary origin and GCP as secondary.

When both Interconnects degraded during a sale-night incident, warehouses kept sorting. I ruled out our stack, found the problem on the carrier's routing, and escalated with evidence until it was fixed in about an hour.

Hybrid cloud topology
Warehouse link incident

A GitOps GKE platform for ~200 services

E-logistics · Platform engineer
GKEAnthosArgoCDVictoriaMetricsELK

10+ GCP projects on Shared VPC, 10+ GKE clusters plus on-prem clusters through Anthos, and teams running up to ~200 services. I owned the GCP side of the platform: GitLab CI builds, tests and scans, ArgoCD syncs from Git to every cluster, and teams deploy and retire services themselves. Observability: Prometheus agents writing to VictoriaMetrics, Grafana, and ELK with hot/warm/cold tiers.

A lesson from production: 50 replicas packed on 3 spot nodes have the availability of 3 nodes. I fixed it with anti-affinity, topology spread and an on-demand base.

GKE platform architecture

Self-hosted MongoDB, from replica sets to sharding

E-logistics · Senior DevOps Engineer
MongoDBAnsibleSharding

Moved off Atlas to a standard self-hosted design (~20 clusters on VMs, Ansible, GCE snapshots with journaling). When the largest ~3 TB cluster hit its vertical ceiling, we converted it in place to a sharded cluster keyed on tenant + order ID, matching the main query pattern. Honest hindsight: today I would default to a managed service unless there is a special need.

MongoDB path to sharding

Experience

CompanyRolePeriodScope
LittleLives (Singapore)Cloud Architect, DevOps Lead2024-05 → presentMulti-tenant EdTech SaaS, 3 AWS accounts, 4 EKS clusters
Giao Hang Nhanh (GHN)Senior DevOps Engineer, Cloud Architect2020-02 → 2024-04Hybrid GCP and on-prem for Vietnam's largest e-logistics company
Dwarves FoundationSoftware Engineer2019-02 → 2020-02Cloud infrastructure and CI/CD for client products on AWS and GCP
Robert Bosch VietnamSoftware Engineer2018-01 → 2018-12Embedded firmware for automotive OEM software

Skills

Cloud
EKSCloudFrontWAFGuardDutySecurity HubIAMLambdaRDSS3AthenaGKECloud RunAnthosCloud ArmorBigQuery
Platform
KubernetesHelmTerraformCrossplaneArgoCDGitLab CIAnsibleNginxIstio
Security & compliance
Cloudflare Zero TrustWAFIAM governanceSAST / DASTISO 27001:2022
Reliability & observability
SLOsHA / DR designPrometheusVictoriaMetricsGrafanaLokiElasticsearchPagerDuty
Data & messaging
PostgreSQLMySQLMongoDBClickHouseKafkaRabbitMQSQS
Code
GoPythonNode.jsBash
B.Eng. Automation Control, International University – VNU HCMC