Aryan Hamedani — backend & distributed-systems engineer · Tehran · UTC+3:30

I build the unglamorous parts
— the ones you only notice
when they fail.

ARYAN(1)Backend Engineer's Manual

NAME

aryan — backend & distributed-systems engineer

SYNOPSIS

aryan [--domain backend] [--scale production] [--mentor team]

DESCRIPTION

Works on the unglamorous parts: migrations that can't lose a row, services that stay predictable under load, and making cost and failure observable. Currently Technical Manager at Idekavan, leading Dobare and the messaging backbone behind it.

SEE ALSO

work(7) · about(7) · contact(1)

// a worker dies every few minutes on purpose — click to kill one yourself

99.9%

uptime held through a live MongoDB → PostgreSQL migration

85–95%

analytic-store query load removed on the messaging service

−30%

cluster cost, after making spend observable per product

53M+

messages the systems I work on have delivered

01

Career log

$ git log --career --oneline
2024–now LEAD Technical Manager — Idekavan (Dobare), promoted from Backend Developer
2023–24 BACKEND Backend Developer — Idekavan (Dobare)
2023 INTERN Software-engineering intern — Idekavan (Jun–Aug)
2023 TEACHING Lecturer — Maktab Sharif · Django/FastAPI · ~120 students, 3 cohorts
2023 BACKEND Backend Developer — Ettesal Yekparcheh / Video Cake (Mar–May)
2019–20 EDU Computer Engineering — Islamic Azad University (left mid-program)
02

Selected work

written as incident reports
INC-001 · zero-downtime-migrationRESOLVED

Moving a live datastore without losing a row

Moving a live datastore from MongoDB to PostgreSQL without losing a row — the hard part was correctness during cutover, not the schema.

PythonDjangoPostgreSQLMongoDBFeature flagsDomain-Driven Design
read the report
app
 ├─▶ mongo      (old · read)
 └─▶ postgres   (new · dual-write)
       │
  reconcile ──▶ flip read ──▶ retire mongo
  · rollback-safe at every step ·
INC-002 · go-messaging-reliabilityRESOLVED

Keeping one slow provider from stalling everyone

One slow SMS provider could stall all of them. Lane isolation over a shared priority queue; a targeted cache cut analytic-store load 85–95%.

GoKafkaClickHouseRedisEvent-driven
read the report
inbound ▶ ┌─────────────┐
          │  dispatcher │
          └──────┬──────┘
       ┌─────────┼─────────┐
       ▼         ▼         ▼
[lane A]     [lane B]   [lane C]   topic·DLQ·retry
       ▼         ▼         ▼
provider A  provider B  provider C
            (slow)
INC-003 · modular-monolithOPERATING

A monolith that doesn't rot

Scaling a team and product without scattering into premature microservices — ~80 bounded contexts in one deployable, each with an isolated queue.

PythonDjangoCeleryRabbitMQKubernetesMulti-tenant SaaS
read the report
┌──────── one deployable ─────────┐
│ [loyalty▸q] [payments▸q]        │
│ [messaging▸q] [crm▸q] … ~80     │
│ bounded contexts · isolated q   │
└─────────────────────────────────┘

all reports →

03

Working stack

$ stack --grouped

Languages

Python · Go · SQL · Bash · JavaScript · PHP

Backend & async

Django · DRF · FastAPI · Celery · RabbitMQ · Kafka

Data

PostgreSQL · ClickHouse · Redis · MongoDB · Elasticsearch

Infra & observability

Kubernetes · Docker · GitLab CI · Prometheus · Grafana · OpenTelemetry · Sentry

Architecture

DDD · event-driven · hexagonal · multi-tenant SaaS · strangler-fig migration

Leadership

hiring · mentorship · SDLC design · stakeholder reporting