S. AXADJONOV

SardorbekAxadjonov

Go backend developer with 2+ years in production, building microservices and event-driven serverless systems for travel, e-commerce, and fleet-management platforms. At UDEVS I lead a 5-person cross-functional team delivering two Furasentr products.

+998 20 007 04 24 axadjonovsardorbeck@gmail.com Tashkent, Uzbekistan

2+
years of Go
in production
4+
production platforms
shipped
700
RPS in k6 load tests
on Knative
90%+
test coverage on
booking / payment paths
01 Stack
Language
Go
Data
PostgreSQL, pgvector, Redis, MongoDB, SQL
Services
REST, gRPC, Gin, chi, Knative Eventing / CloudEvents
Auth
JWT, OTP, Casbin (RBAC)
Storage
MinIO, S3, CDN
Integrations
Click, Payme, Firebase FCM, Telegram, Google Gemini, Yandex Maps
Infra
Knative / FaaS, Docker, GitLab CI, goose, k6, Grafana
Architecture
Microservices, event-driven, serverless, monolithic
02 Experience

UDEVS — Backend Developer · Team Lead

Feb 2026 — Present
  • Lead a 5-person cross-functional team (frontend, backend, mobile, QA, PM) delivering two Furasentr products — task breakdown, code review, and release coordination on a Knative serverless, event-driven stack.
  • Delivered the backends for CentralTour, Furasentr, and Furasentr Autopark — detail in Selected Work below.
  • Optimised Redis caching and parallelised independent CRUD queries that previously ran sequentially; k6 load tests at 700 and 500 RPS on Knative, 90%+ coverage on booking / payment paths run in GitLab CI.

Cody Soft — Golang Developer (remote)

Sep 2024 — Feb 2026
  • Built start-up products on microservice and monolithic architectures — gRPC between services, REST + Swagger at the edge, JWT + Casbin RBAC, PostgreSQL with Redis on hot paths, MinIO media, goose migrations, Docker Compose.
  • Sole backend for iMed, an online learning platform now in production — detail in Selected Work below.

Vector-PVT — Golang Developer

May 2025 — Jul 2025
  • Backend for the Vector-Taxi platform across user, admin, and business panels — RESTful APIs with Swagger, Casbin RBAC, and large PostgreSQL and MongoDB datasets.
03 Selected Work

CentralTour

flight & hotel booking platform

Owned the markup / commission engine. Rules are matched across seven dimensions — platform, geography, aggregator, service, hotel, agency, agent profile — and layered by rule level, with exactly one winner per level decided by a specificity score. Platform layers apply in parallel on the same net base, while partner layers cascade, so a subagent's price builds on the agency's cut and no other agent's markup can leak in. Non-UZS fares are priced in the provider currency first and scaled by an FX rate frozen at quote time; every quote is written as an order pricing snapshot, so payment charges exactly what was shown. Integrated GoGlobal, TBO, and Dida, and built the admin-panel backend solo.

Rule selection — one winner per level
markup_rules rule set rows context match platform + channel, exact one rule per level L1 — global only L2 — aggregator / service L5 — per-hotel or agency L7+ — agency, all services tie → specificity score hotel 50 · agency 40 aggregator / service 20 · geo 10
GochiPostgreSQLRedisKnative / FaaS

Furasentr Autopark

multi-tenant fleet-management SaaS

Built the backend for four role-based app surfaces — per-company scoping enforced on every fleet call, with a custom role × module × action layer wired in behind a rollout flag, plus trip / vehicle assignment, multi-device sessions, analytics, and the Yandex geocoder. Telemetry keeps per-trip state in cache (trip:point:<id>, 2 h TTL) holding the last fix, distance covered, and an open stop cluster; a point older than the last one processed is rejected, and haversine against that last fix decides whether it folds into the cluster or flushes it. Access checks cache only the allow, never the block, and mileage diff_km is always recomputed server-side rather than trusted from the client. Load-tested to 700 RPS with k6.

Telemetry ingest — a parked hour is one row, not 180
GPS point driver app trip:point:<id> cache · TTL 2 h haversine vs last fix ≤ 50 m > 50 m stop cluster buffered, no write flush cluster 1 row + dwell time stale point rejected a truck parked one hour writes a single stop row, not ~180 near-identical fixes
GochiPostgreSQLRedisKnative / FaaSk6

Furasentr

truck parts & vehicles e-commerce

One of eleven Go services on the Knative stack — ordering, payment, logistics, IAM, aggregator, image search, webhook, ERP sync, vehicles, notifications. Built the ordering service (native Go PDF invoicing, Click and Payme over JSON-RPC, WebP / CDN catalog images, Firebase fan-out) plus the integrations around it: BuckyDrop for cross-border purchase orders, Measoft for delivery — pickup points, rate calculator, status tracking — and an OX ERP sync for products, shops, and warehouses. AI image search is a two-step flow over pgvector: Gemini locates every part in the photo and returns a crop each, and only the crop the buyer taps is embedded and searched, because searching all of them up front does database work for parts nobody opens. The catalog endpoint that carries the load reads through a 30-second in-process cache fronted by singleflight, so a burst of identical requests on a cold key collapses into one database load, and IAM hands back a rotated refresh token on every renewal. Load-tested with k6 at 500 RPS on a constant-arrival-rate executor.

Two-step search — pay for the crop the buyer actually taps
photo upload Gemini vision locate + label crop per part box_2d · uz/ru/en buyer taps one no DB work yet in parallel embed crop Gemini · goroutine resolve brand + lang DB · same moment pgvector similarity score floor + delta window ranked products one part, one query
GoPostgreSQLpgvectorRedisGeminiFirebasek6

iMed

online learning platform · imedteam.uz

Sole backend for the web-admin and mobile REST APIs — phone-OTP + JWT auth with Casbin RBAC, Firebase push, a Telegram ops bot, and a YouTube→S3 video pipeline (yt-dlp with a PO-token sidecar to clear bot checks without cookies) served through a CDN. Click Merchant API with MD5-signed, row-locked idempotent handlers (SELECT … FOR UPDATE) so retried callbacks never double-charge or double-enrol. Promo-code engine — percent / fixed, per-user and total caps, validity windows, per-course scope — enforced by a redemptions ledger with partial unique indexes and cancel / expire release triggers. Versioned Redis cache: an entity:version counter bumped on every write is folded into the cache key, so stale lists expire by TTL with no SCAN / KEYS.

Click payment — idempotent under retries
Click callback MD5 sign verify FOR UPDATE row lock PAID + enrolment retry → identical response, no double charge

In production: 8,000+ users (3,000+ active) · 70+ courses, 1,500+ lessons, 1,400+ videos · 2,000+ paid orders · 420M+ UZS processed

GoGinPostgreSQLRedisMinIOS3CDNCasbin
04 Education & Languages

Education

Najot Ta'lim

Go Foundation + Bootcamp

Major: Golang

Spoken languages

Uzbek — native

Russian — B2

English — B1

Open to backend roles where Go, throughput, and clean service boundaries matter.