Go Engineering
Production Go services with Gin, GORM and sqlc — REST APIs and gRPC, concurrency-safe with goroutines, channels and context, table-driven tests.
concurrency · context · table-driven testsI’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.
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.”
Production Go services with Gin, GORM and sqlc — REST APIs and gRPC, concurrency-safe with goroutines, channels and context, table-driven tests.
concurrency · context · table-driven testsSeven years of Symfony and Laravel for international product teams — Doctrine and Eloquent, PHPUnit, and legacy modernization without breaking business logic.
legacy modernization · unit + integration testsDomain-Driven Design, clean architecture and modular monoliths — SOLID boundaries and event-driven processing, chosen by context.
// boundaries before frameworksPostgreSQL and MySQL in production, Redis caching and rate limiting, Elasticsearch-backed search, and SQL optimization with measurable wins.
EXPLAIN ANALYZE before query tuningDocker and Kubernetes on Terraform-managed infrastructure, CI/CD with GitHub Actions and Jenkins — monitored with Prometheus, Grafana and ELK.
automated test · build · deploy pipelineLLM provider APIs with structured-output validation, retries and fallback — plus Stripe, Adyen, HubSpot and Sendbird through webhooks.
bounded retry · schema validation · fallback1 // 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()78 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 spend13 }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 }
Content generation and production ran as manual, multi-step work — slow, inconsistent, and hard to scale.
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.
A vehicle-rental platform needed concurrency-safe booking so two customers could never reserve the same vehicle.
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.
A long-running, data-intensive pricing workflow was too slow for recurring production runs.
MySQL query tuning and indexing, Redis caching, and legacy-code optimization across the hot path of the workflow.
Consumer platforms needed reliable payments and CRM flows across multiple providers.
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.
Business context before code — what actually needs to be true.
✓ passedRequirements, SLOs, budgets, and what we won’t build.
✓ passedSystem edges, contracts, and failure domains.
✓ passedEntities, invariants, and the language the team shares.
✓ passedContracts first — versioned, documented, testable.
✓ passedSmall increments, high-signal tests, honest code review.
✓ passedCI/CD, zero-downtime rollouts, one-command rollback.
✓ passedMeasure in production; optimize only with evidence.
✓ passedAI 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.
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.
PHP web applications and backend services for an iOS product with Laravel, Yii and MySQL; administered VPS environments with Redis and LAMP tooling.
Built an email marketing system on Zend Framework 2, MySQL, HTML5 and Bootstrap.
Timeouts, retries, and fallbacks are part of the design — not an afterthought.
resilienceClear contracts between services — no reaching across module walls.
boundariesLeast privilege, encrypted transport, and audited access from day one.
securityIf you can’t measure it, you can’t operate it.
observabilityProfile first — fix the measured bottleneck, not the guess.
performanceThe next engineer should understand it without asking.
maintainabilityMonolith or microservices — the problem decides, not the trend.
architectureThe simplest system that meets the requirement wins.
simplicityLet’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