Microservices
Go
AWS
Terraform

Microservices as One Engineer (Go + AWS + Terraform)

Shihab Shahriar Antor
7 min read

TL;DR

Microservices for one engineer pay off when you have the right tooling: Go services, Terraform IaC, AWS ECS Fargate. Here is the exact pattern I use.

Microservices for one engineer pay off when you have the right tooling: small Go binaries, Terraform IaC, AWS ECS Fargate. I run this pattern across Shahriar Labs products. Here is the exact setup.

Why microservices solo

The standard advice is "monolith first." That's right when you have a team. When you are solo, the calculus shifts:

  • Blast radius matters more. A bug in one service should not take down the others.
  • Mental model matters. A 5k-line Go service fits in your head; a 50k-line monolith does not.
  • Deploy independence matters. I want to deploy LetX's API without touching BikroyBuddy.

The trade-off — operational complexity — is solved by Terraform.

The stack

LayerTech
RuntimeGo (Gin), 5-10 MB binaries
ContainerDocker, distroless base
OrchestrationAWS ECS Fargate
IaCTerraform
NetworkingALB + private VPC + AWS PrivateLink
ObservabilityCloudWatch + OpenTelemetry
SecretsAWS Secrets Manager

Why Go for small services

Go is 5-10 MB binaries idle at 5 MB of RAM. Python's equivalent service idles at 50 MB. When you pay per MB-hour on Fargate, Go pays for itself.

Why ECS Fargate (not k8s)

Fargate runs containers without managing nodes. For under ~50 services, that is right. k8s pays off above that scale; below it, the operational overhead destroys solo founders.

I covered the whole solo stack in The Solo Founder Stack.

Terraform is the rest of the answer

Every service has a terraform/ directory:

terraform/
  main.tf          # ECS service, task def, IAM
  variables.tf
  outputs.tf

terraform apply reproduces the entire service. New region? Same apply. Disaster recovery? Same apply.

The 80/20 of solo microservices

Do:

  • One service = one Go binary = one Terraform module
  • Healthchecks, retries, idempotency in every endpoint
  • Shared observability stack

Don't:

  • Service mesh (yet)
  • Per-service database (use one Postgres until you can't)
  • Custom platform abstractions

When to merge services

When a 2-service deploy correlation is 90%+, fold them. When data flows mostly in one direction, fold them. The micro in microservice is a guideline, not a law.

I touch on related architecture in Building Context-Heavy and How I Built BikroyBuddy.

FAQ

Q: How many services do you run? A: Around 20 across all products. Each is small.

Q: Is k8s ever worth it solo? A: Rarely. The case is "you have an existing k8s skillset and want to leverage it." Otherwise, Fargate.

Q: What about Cloud Run instead of Fargate? A: Cloud Run is excellent for stateless services with cold-start tolerance. Fargate gives me always-warm instances and tighter VPC control. Choose either.


Written by Shihab Shahriar Antor. Hire me for cloud architecture work at Shahriar Labs.

Written by

Shihab Shahriar Antor — AI Engineer & Founder of Shahriar Labs. Creator of LetX, QuantumSketch, and more.

Share this mission log