About

Senior backend engineer with 8+ years in production systems

I build, modernize and operate backend systems in PHP and Go. Since 2018 I have worked on SaaS, high-load applications, distributed backend services and trading-related systems — from architecture and database performance to Kubernetes deployments and production incidents.

  • 8+ years commercial backend engineering
  • PHP / Go / Python
  • PostgreSQL / Redis / Elasticsearch
  • Docker / Kubernetes
  • Production systems
  • Europe / CET
  • B2B from Serbia
Pavel Beliaev

Selected Experience

Semrush

Senior Backend Developer · 2023–present

  • Backend architecture and production development
  • PHP / Go / Python
  • PostgreSQL / Elasticsearch
  • Kubernetes
  • CI/CD
  • API and performance work
  • Reduced average response time of key API endpoints by 35%
  • Reduced an analytics query path from approximately 12 seconds to 2 seconds using PostgreSQL and Elasticsearch
  • Worked on Kubernetes migration and zero-downtime deployments
  • CI/CD and production delivery automation

Innowise

Backend Developer · 2019–2023

  • High-load PHP services
  • PostgreSQL
  • Containers and delivery
  • Re-architected a high-load PHP service
  • Improved peak throughput by 40%
  • PostgreSQL optimization reduced server CPU usage by 25%
  • Containerized legacy services
  • Reduced deployment time from approximately one hour to under ten minutes
  • Mentored engineers / participated in engineering collaboration

Intercontinental Exchange (ICE)

Backend Developer · 2018–2019

  • Trading-related backend systems
  • Production reliability
  • Backend development for trading-related systems
  • Production reliability
  • Systems operated against a 99.9% SLA
  • Work in an environment with stricter operational/compliance requirements

Selected Production Work

One upload service instead of scaling two PHP applications

Two PHP products — Blog and Academy — each contained their own file and image upload implementation. The logic was duplicated, so upload and validation rules had to be kept in sync across more than one codebase.

I proposed extracting upload functionality into a separate backend service.

Implementation: a Go upload service, with both PHP backends integrated and one application migrated at a time.

Engineering benefit: one implementation of upload behaviour and validation, independently deployable and scalable upload capacity, and no need to scale a whole PHP application during image-heavy periods.

The extraction added another deployable service and a network dependency, so the boundary had to justify the additional operational complexity.

Performance work before architecture theatre

On production API and analytics paths, the first move was measurement rather than a runtime change.

Average response time of key API endpoints was reduced by 35%.

A separate analytics data path was reduced from approximately 12 seconds to 2 seconds using PostgreSQL and Elasticsearch.

The recurring pattern is to measure the bottleneck first — API code, SQL, data access, caching or architecture — before changing the runtime.

Improving the PHP system instead of replacing it

A high-load PHP service was re-architected in place rather than rewritten.

Peak throughput improved by 40%. PostgreSQL optimization reduced server CPU usage by 25%.

The result is a reminder that PHP → Go work is a selective extraction service, not an automatic migration into Go.

Making production alerts useful again

More than 50 projects shared a production alerts channel. Signal was drowned in repeated, non-actionable events, and important failures risked being lost in noise.

I initiated the review: classified actionable versus expected failures, fixed real bugs found during that pass, and removed or downgraded events that were not useful as production alerts — for example expected 422 invalid-input errors should not have the same severity as actual production failures.

The production channel became substantially less noisy and useful as an operational signal again.

What I Work With

The areas where I can take responsibility for an outcome, rather than everything I have touched at some point.

Languages and frameworks

  • PHP
  • Symfony
  • Laravel
  • Go
  • Python

Production work on both sides of a PHP to Go decision, including cases where the runtime should not change.

Data and infrastructure

  • PostgreSQL
  • Redis
  • Elasticsearch
  • Docker
  • Kubernetes

Schema and query work, caching and search, and the container and deployment layer around a service.

Interfaces and operations

  • HTTP and gRPC APIs
  • Queues and workers
  • Observability
  • Incident debugging

The parts that decide whether a backend is pleasant or painful to run once it is live.

Private AI systems

  • Local LLMs
  • Speech-to-text
  • Document search
  • On-premise inference

Workflows that should run on infrastructure you control, when a public AI API is the wrong default.

How I Work

Measure before deciding

Profiling data and baseline metrics come before any architectural recommendation. Opinions about what is slow are wrong often enough to be worth checking.

Small reversible steps

Work is sequenced so each step can go to production on its own and be rolled back on its own. Long-lived branches and big-bang cutovers are where migrations go wrong.

Inside your process

Your repository, your review rules, your tracker, your deployment pipeline. Introducing a parallel process for one external engineer creates more problems than it solves.

Decisions written down

Architectural choices get a short written rationale, including the options rejected. That is what makes the work maintainable by your team after the engagement ends.

Why I Am Independent of the Rewrite Decision

The Migration Readiness Audit has a fixed price, so the recommendation does not depend on how much implementation work follows. The result can be upgrade, refactor, extract — or leave the component alone.

Working Hours, Communication and Business Setup

I work in Europe/Belgrade, which is CET/CEST, a full working-day overlap with teams in Germany and the wider DACH region, the Netherlands, France, the Nordics and most of the EU. Reviews, planning and incident calls happen inside your working day rather than at the edges of it.

Communication is English, mostly asynchronous, in whichever channels your team already uses. Core hours, meeting cadence and any out-of-hours or incident expectations are agreed at the start of an engagement rather than left to be discovered later.

Contracting is business-to-business: one service agreement with a registered Serbian sole trader, monthly invoicing in EUR, and no employer of record. An NDA can be signed up front, and the rest of the commercial detail is set out on the contractor engagement page.

Working stack

  • PHP
  • Symfony
  • Laravel
  • Go
  • PostgreSQL
  • MySQL
  • Redis
  • REST / gRPC APIs
  • RabbitMQ
  • Docker
  • Kubernetes
  • CI/CD

Remote from Serbia, working hours overlapping CET/CEST. Engagements run on one B2B agreement with a monthly invoice in EUR.

How an Engagement Starts

  1. A short written description

    The stack, roughly what the traffic and data volumes look like, and the problem as you currently understand it. A few paragraphs is enough.

  2. A technical call

    Thirty to sixty minutes with the engineer who would do the work. The goal is to establish whether the problem is what it appears to be and whether I am the right person for it.

  3. A defined first step

    Either a fixed-price migration readiness audit at €1,200, a private AI readiness audit from the same commercial model, or a 10-day paid pilot at €300 per day for a capacity question.

  4. Contract and access

    An NDA if you want one, then the service agreement covering scope, cadence and notice period. After that: access, a repository walkthrough and a real first ticket.

Getting started

Start with the problem, not the paperwork

A few paragraphs about the system and what is going wrong with it is enough to get a useful answer back. If it turns out I am not the right person for it, I will say so.