GOPHP / SYMFONYMICROSERVICESGENERATIVE AI

I design backend systems that stay fast, reliable, scalable.

I’m Tien — a Senior Backend Engineer with 10+ years across generative AI, mobility, travel, and consumer platforms. Recent focus: Go, PostgreSQL, asynchronous workflows and production observability, built on 7 years of Symfony and Laravel for international teams.

COREAPI GatewayAuthPostgreSQLRedisQueueWorkersStorageClientGatewayServicesDB
API StatusOperational
Avg Latency42 ms
Uptime99.99%
Requests12M+
Years Shipping10+
FocusGenerative AI
GoPHPSymfonyLaravelPostgreSQLMySQLRedisElasticsearchRabbitMQAmazon SQSgRPCDockerKubernetesTerraformAWSGitHub ActionsJenkinsPrometheusGrafanaELKLLM APIsStripeAdyen

Systems that work quietly.

Ten-plus years building production systems across generative AI, mobility, travel, and consumer platforms — from seven years of Symfony and Laravel for international markets to Go services orchestrating LLM content pipelines today. I care about concurrency-safe design, performance, legacy modernization — and mentoring the engineers who maintain what I build.

“Great backend systems should be invisible to users, predictable for developers, observable in production, and resilient under pressure.”
tien@prod: ~/whoamilive
$ whoami --verbose
→ role: senior_backend_engineer
→ years_experience: 10+
→ specialties: [go, php_symfony_laravel, generative_ai,
devops, k8s, cloud_infrastructure]
→ stack: docker · kubernetes · terraform · aws
→ ci_cd: github_actions · jenkins · argo_rollouts
→ observability: prometheus · grafana · elk
→ current_focus: llm_content_pipelines
 
$ uptime
→ shipping reliably since 2013 · 0 unhandled panics
 
$ ▊

What I build with.

Go Engineering

Production Go services with Gin, GORM and sqlc — REST APIs and gRPC, concurrency-safe with goroutines, channels and context, table-driven tests.

GoGingRPCsqlc
concurrency · context · table-driven tests

PHP Engineering

Seven years of Symfony and Laravel for international product teams — Doctrine and Eloquent, PHPUnit, and legacy modernization without breaking business logic.

SymfonyLaravelDoctrinePHPUnit
legacy modernization · unit + integration tests

System Architecture

Domain-Driven Design, clean architecture and modular monoliths — SOLID boundaries and event-driven processing, chosen by context.

DDDClean ArchitectureModular MonolithEvent-driven
// boundaries before frameworks

Data, Cache & Search

PostgreSQL and MySQL in production, Redis caching and rate limiting, Elasticsearch-backed search, and SQL optimization with measurable wins.

PostgreSQLMySQLRedisElasticsearch
EXPLAIN ANALYZE before query tuning

Cloud & Delivery

Docker and Kubernetes on Terraform-managed infrastructure, CI/CD with GitHub Actions and Jenkins — monitored with Prometheus, Grafana and ELK.

DockerKubernetesTerraformGitHub Actions
automated test · build · deploy pipeline

AI & Integrations

LLM provider APIs with structured-output validation, retries and fallback — plus Stripe, Adyen, HubSpot and Sendbird through webhooks.

LLM APIsStripeAdyenWebhooks
bounded retry · schema validation · fallback

Code that reads like documentation.

transfer.go · payment-service✓ tests 94.2% · passing
1 // Transfer moves funds between wallets exactly once.
2 func (s *PaymentService) Transfer(
3 ctx context.Context, cmd TransferCmd,
4 ) (*Receipt, error) {
5 ctx, span := s.tracer.Start(ctx, "payment.transfer")
6 defer span.End()
7
8 if err := cmd.Validate(); err != nil {
9 return nil, fmt.Errorf("invalid transfer: %w", err)
10 }
11 if r, ok := s.idempotency.Seen(ctx, cmd.Key); ok {
12 return r, nil // safe retry — no double spend
13 }
14 return s.ledger.WithinTx(ctx,
15 func(tx ledger.Tx) (*Receipt, error) {
16 if err := tx.Debit(cmd.From, cmd.Amount); err != nil {
17 return nil, fmt.Errorf("debit %s: %w", cmd.From, err)
18 }
19 return tx.Credit(cmd.To, cmd.Amount)
20 })
21 }
Quality gates · CI
✓buildpassing · 2m14s
✓coverage94.2% (+0.6)
✓golangci-lint0 issues
✓trivy scanno critical CVEs
Recent commitslive
a8f3e21feat(pipeline): structured-output validation for LLM responsesjust now
4c19d02perf(pricing): cut workflow runtime 65% via indexes + cache4m ago
e7b44c8fix(booking): time-range overlap check under concurrency18m ago
91d0f3atest(payments): idempotent Stripe webhook handling1h ago
Commit activity · 26 weeks
1,284 commits · 26 weeksless ▪▪▪ more

Selected work.

proj-001AI PlatformView on GitHub

AI Content Generation Platform

PROBLEM

Content generation and production ran as manual, multi-step work — slow, inconsistent, and hard to scale.

SOLUTION

Go services (Gin, GORM, sqlc) on PostgreSQL automating the pipeline from generation and validation through downstream processing — LLM provider APIs with structured-output validation, retry handling and provider fallback, Redis caching and rate limiting, RabbitMQ async processing.

GoPostgreSQLRabbitMQRedisgRPCKubernetes
OUTCOMES
E2Epipeline automated — manual work shifted to review
multi-LLMprovider fallback for generation reliability
p99 ↓tail latency via caching + async processing
proj-002Mobility PlatformView on GitHub

Vehicle Booking & Scheduling

PROBLEM

A vehicle-rental platform needed concurrency-safe booking so two customers could never reserve the same vehicle.

SOLUTION

Booking and vehicle-scheduling logic on Symfony with database transactions, locking, and time-range overlap validation — plus SQS-driven background jobs for recurring price checks and customer notifications.

PHPSymfonyMySQLAmazon SQSDDD
OUTCOMES
0double bookings under concurrent load
DDDmodular-monolith architecture
SQSasync price checks & notifications
proj-003PerformanceView on GitHub

Pricing Workflow Optimization

PROBLEM

A long-running, data-intensive pricing workflow was too slow for recurring production runs.

SOLUTION

MySQL query tuning and indexing, Redis caching, and legacy-code optimization across the hot path of the workflow.

PHPMySQLRedisLegacy modernization
OUTCOMES
−65%execution time
indexedquery plans tuned
cachedhot-path reads served from Redis
proj-004Payments & CRMView on GitHub

Payment & Engagement Integrations

PROBLEM

Consumer platforms needed reliable payments and CRM flows across multiple providers.

SOLUTION

Stripe and Adyen with webhook signature verification, idempotent event handling, retries on failed deliveries, and payment reconciliation — HubSpot and Sendbird wired in through APIs and webhooks.

StripeAdyenWebhooksHubSpotSendbird
OUTCOMES
2payment gateways integrated
idempotentevent handling with retries
✓payment reconciliation

How a request moves.

REQUEST PATHASYNC · EVENTSOBSERVEClientweb · mobileAPI GatewayOIDC · rate limitAuth ServiceOAuth 2.0 / OIDCApp ServicesGo · SymfonyPostgreSQLprimary storeRediscache · sessionsMessage QueueRabbitMQ · SQSWorkersjobs · retriesMonitoringProm · Grafana
● request path● async / event pathhover a component to inspect it

LLMs in production, not demos.

pipeline healthy · 42 jobs/min
PROVIDER POOLretryingestcontent requestprompt-buildercontext · templatesllm-routerretry ×3 · fallbackopenaigpt-4o · primaryanthropicsonnet · standbyschema-validatestrict jsonrabbitmqpublish queuedeliverycms · api
● generate → validate → publish · queue depth 12 · all providers healthy
Structured output · retries
→ attempt 1 · gpt-4o · 1.24s
parse ✓ · schema ✗ — missing "seo_title"
→ repair prompt → retry 2/3
→ attempt 2 · gpt-4o · 0.91s
schema ✓ · 412 tokens · $0.0041
Inference metrics · live
tokens / s2,400
p95 latency1.8s
fallback rate0.3%
schema pass99.1%
cost guardrail: $12/day cap · alert at 80% · kill-switch armed

Shipped by pipeline, run on Kubernetes.

cluster: prod-sgp1 · control-plane + 2 nodes · terraform
CLUSTERmTLS · NetworkPolicy · OPA · trivy · RBACCONTROL PLANEcloud-ctrl-mgrscheduleretcdctrl-managerkube-api-serverNODE 1CRIkubeletkube-proxypodpodpodNODE 2CRIkubeletkube-proxypodpodpendingCLOUD API
control-plane ready · nodes 2/2 · pods 5/6 running · 1 pending — v1.4.2 rolling out · 0 downtime
CI/CD · GitHub Actions
✓git push · maina8f3e21
✓tests · 214 passed48s
✓lint · golangci-lint12s
✓docker build · api:v1.4.21m02s
✓push · registry18s
✓rollout · k8s rolling update0 downtime
✓healthy · probes + SLOs greendone
kubectl get pods -n production
NameReadyStatusAge
content-api-7d4f8b1/1Running14m
content-api-9c2e1a1/1Running51m
llm-worker-4b8f2c1/1Running88m
llm-worker-d91e3f1/1Running125m
scheduler-5a7c9d1/1Running22m
gateway-2f6b4e1/1Running59m
Observability · Prometheus0 alerts firing
p99 latency67 ms
error rate0.02%
req / s1.2k
apdex0.99
p99 by service
content-api
48ms
llm-worker
136ms
gateway
22ms
scheduler
50ms
Live trace stream
200POST /v1/generate130ms
200GET /v1/jobs/:id29ms
202POST /v1/webhooks/stripe32ms
SLO 99.9% · 30d error budget71.0% left

From problem to production.

run #351 · all stages passed ✓

Understand the problem

Business context before code — what actually needs to be true.

✓ passed

Define constraints

Requirements, SLOs, budgets, and what we won’t build.

✓ passed

Design boundaries

System edges, contracts, and failure domains.

✓ passed

Model the domain

Entities, invariants, and the language the team shares.

✓ passed

Define APIs

Contracts first — versioned, documented, testable.

✓ passed

Implement & test

Small increments, high-signal tests, honest code review.

✓ passed

Automate deployment

CI/CD, zero-downtime rollouts, one-command rollback.

✓ passed

Observe & optimize

Measure in production; optimize only with evidence.

✓ passed

Where I’ve shipped.

Golang Backend Developer

Sosene

AI content-generation platform integrating LLMs into production workflows. Go services with Gin, GORM and sqlc on PostgreSQL — REST + gRPC, RabbitMQ async processing, GitHub Actions CI/CD to Kubernetes on Terraform, monitoring with Prometheus, Grafana and ELK. Mentored juniors through system-design and code reviews.

↑ E2E content pipeline · multi-provider LLM fallback · ↓ tail latency

Senior Backend Developer (PHP)

NFQ Asia

International product teams for German and global markets — Roadsurfer, LemonSwan, TigerDate, EveryStay, DreamCheaper. DDD on Symfony and Laravel, Elasticsearch-backed search, RabbitMQ and Amazon SQS background processing, Stripe and Adyen payments.

↓ 65% pricing workflow runtime · 0 double bookings · 5 platforms shipped

Web Developer

WIDOSOFT

PHP web applications and backend services for an iOS product with Laravel, Yii and MySQL; administered VPS environments with Redis and LAMP tooling.

production ops from day one

Web Developer

MEDASON

Built an email marketing system on Zend Framework 2, MySQL, HTML5 and Bootstrap.

first production system shipped

How I engineer.

Design for failure.

Timeouts, retries, and fallbacks are part of the design — not an afterthought.

resilience

Keep boundaries explicit.

Clear contracts between services — no reaching across module walls.

boundaries

Secure by default.

Least privilege, encrypted transport, and audited access from day one.

security

Make systems observable.

If you can’t measure it, you can’t operate it.

observability

Optimize only with evidence.

Profile first — fix the measured bottleneck, not the guess.

performance

Write code for future maintainers.

The next engineer should understand it without asking.

maintainability

Choose architecture by context.

Monolith or microservices — the problem decides, not the trend.

architecture

Favor simplicity.

The simplest system that meets the requirement wins.

simplicity

Have a complex backend problem to solve?

Let’s discuss scalable APIs, system architecture, cloud infrastructure, or your next engineering challenge.

EMAIL[email protected]PHONE(+84) 938 63 22 39GITHUBgithub.com/vincent-tienLINKEDINin/tien-dinh-dev
Available for backend engineering opportunities
api playground200 OK · 38ms
$ curl -s https://api.tiendinh.dev/v1/hire
{
"status": "available_for_hire",
"role": "senior_backend_engineer",
"stack": ["go", "php", "kubernetes", "llm"],
"timezone": "UTC+7 · ho_chi_minh",
"response_time": "< 24h",
"contact": "[email protected]",
}
Your details stay private — no mailing lists, ever.
All systems operationallast 45 days · status.tiendinh.dev
content-api99.99%
llm-worker99.95%
gateway100%
billing-svc99.98%