Cases: infrastructure, platform and service management
The 2-minute version for hiring managers. I work across four problem areas: scaling platforms, reducing infrastructure cost, improving production reliability and building operating models for infrastructure teams. The cases below are grouped along those axes — filter them to match your pain.
Two tracks within the ITG group. At SimpleOne — product infrastructure and platform: Kubernetes readiness, object storage, processes and capacity. At ITGLOBAL.COM — Managed Services: a team of 13 engineers (DevOps, SRE, Managed Apps, Linux/Windows, DBA).
SimpleOne · Head of Infrastructure
Infrastructure and platform at SimpleOne
The product is deployed as an HA cluster across 20+ servers (Docker Compose + Ansible) and shipped to customers on-prem. My cases here are about Kubernetes readiness, object storage, reproducible processes and deliberate capacity planning.
15microservice repositories in the Kubernetes-readiness audit
~8 TiBproduction data in the S3 migration plan (1.8M objects)
up to 180 GBobject-storage reduction potential
01Platform · Kubernetes
Kubernetes-readiness audit — 15 microservices
Context
The product is deployed as an HA cluster across 20+ servers via Docker Compose and Ansible; the strategic goal is a move to Kubernetes. The microservice codebase was built for Compose: networking through an external Docker network, DNS via the embedded resolver, database and broker configs defaulting to 127.0.0.1/localhost. In Kubernetes these assumptions silently break on deploy — I needed to understand what blocks the migration and estimate the scope of changes.
What I did
ran a static analysis of 15 repositories: Go services, a PHP monolith, HAProxy/Nginx configs, integration services
categorized findings by criticality: migration-critical (block startup) vs. low-priority (dev/CI/test)
found 12+ spots with hardcoded DNS/IP assumptions, 7+ loopback defaults for databases and brokers, Docker-specific resolvers in proxies and a healthcheck bound to localhost instead of the pod IP
gave a concrete recommendation for each finding: replace defaults with mandatory env variables that fail fast at startup, move the Docker network to K8s Services, extract hardcoded gRPC addresses into config
flagged a separate class of problems: a service with a peer's address baked into compiled code — needs refactoring, not a config change
Result
On schedule
the product's K8s sandbox is deployed and running, Q2 2026
the document was adopted as the architectural basis for planning the K8s migration
a backlog of technical stories was formed for the platform and infrastructure teams for Q3
ADR: choosing a new S3 backend for product shipments
Context
The product ships to customers with built-in S3 storage — one instance per installation. Production volume: ~8 TiB, 1.8M objects; the storage is used by the main application, several Go services, an Ansible playbook, DB backup tools, a container registry and a corporate messenger. The current S3 backend changed the licensing policy of its OSS edition (part of the functionality moved to Enterprise, the console was removed from community) — shipping it on-prem to customers is legally risky, all the more so given import-substitution requirements.
What I did
built an S3 requirements matrix — 20+ criteria: Data/Control Plane, Event Notifications → AMQP, Bucket Lifecycle, IAM Bucket Policy, SSE-KMS, Prometheus metrics, path-style, Sigv4, compatibility with three S3 clients and the backup tooling
compared three options: status quo (100% of the matrix, but a licensing blocker); option A — rejected (no Event Notifications over AMQP, no SSE-KMS, limited Lifecycle, AGPL); SeaweedFS (Apache 2.0, ~95% of the matrix, AMQP → RabbitMQ, compatible with all clients)
chose SeaweedFS — the only option with an OSS license free of feature-gating and suitable for shipping to customers
designed a test plan: 15 Spike cases (Go/No-Go) + 15 PoC/prod — multipart upload >10 GB, presigned URLs with header overrides, Bucket Lifecycle, SSE-KMS via an external KMS, a 30-min load run to compare p99 latency
analyzed storage schemes: replication (×2 overhead, from 2 nodes) vs. Erasure Coding 10+4 (×1.4 overhead, from 14 nodes) — with a recommendation per data group
prepared a 10-step production migration plan: sync with checksum verification, a read-only cutover window, smoke checks, a control operation period
Result
Apache 2.0
licensing risk removed — SeaweedFS approved for all new shipments
all existing clients stay compatible with no code changes — only endpoint and credentials change
The product runs on several Linux distributions; enterprise customers in Russia request support for domestic OSes. Adding a new OS was informal: an engineer would add the distribution to the allowed list and consider it done. Without a clear gate an OS could enter the documentation without a full verification cycle (load testing skipped, distributed/offline modes unchecked) — the risk being that a customer gets an OS on the supported list and hits an incompatibility at deployment.
What I did
designed a process with 3 OS statuses (Supported / Deprecated / Removed) and a 4-stage SDLC checklist: Assessment → In Progress (Done) → Testing → Released
defined the task structure: Feature → User Stories per team → Subtasks for each type of work (specification, test plan, load-test plan, environments, documentation)
set requirements for the test environments: matching OS/Docker/Compose versions, installed and configured automatically via a pipeline/ChatOps before work starts
fixed a mandatory entry gate for work: OS Ansible facts, Docker/containerd/Compose details, load-test scope (agreed with the Scaling Team), known risks
specified the final artifacts: MR/branch, CI jobs (pre-check/deploy/post-check), smoke/E2E, k6 artifacts (runtime.zip, JSON, xlsx, HTML, Grafana), Scaling Team verdict, known limitations
made load testing a mandatory gate for Supported status and defined re-verification triggers: a change of OS major/minor version, Docker pins, repository, kernel/cgroup defaults, CA/GPG/proxy, key components or the base k6 scenario
Result
2 OSes
support confirmed within a quarter, Q2 2026
the process was adopted and submitted for approval
a reproducible gate was established: an OS counts as supported only after all stages and after the result is recorded in code, task and documentation
Stack
AnsibleDockerk6PlaywrightPrometheusGrafanaGitLab CI
04Storage · audit
Object-storage audit — 18 buckets, ≥400 GB
Context
The product uses external S3 storage for release artifacts, DB backups, CI artifacts and auxiliary services. The exact volume wasn't tracked — capacity planning was done roughly.
What I did
ran a read-only inventory of 18 buckets without modifying data
recorded volume, object count, last-write date and content type for each bucket
established that ~75% of the volume (≥300 GB) was release artifacts accumulated since 2022 with no retention policy
identified several backup repositories with no retention limits — uncontrolled volume growth
found buckets with no writes for 1.5–4 years totaling ≥19 GB (test-environment backups, registry images, repository mirrors) and duplicate rebuilds of a single release minor
prepared prioritized recommendations: retention for releases, forget --prune (restic), wal-g delete retain, lifecycle expiration for temporary artifacts, per-bucket monitoring
Result
up to 180 GB
reclaimable potential + ≥19 GB from inactive buckets
backup repositories with no retention limits were surfaced — growth prevented before a capacity incident
the audit ran with no downtime and no data changes
Stack
S3 APIPythonrcloneWAL-Grestic
ITGLOBAL.COM · Head of Managed Services
Management cases at ITGLOBAL.COM
Managed Services — a team of 13 engineers (DevOps, SRE, Managed Apps, Linux/Windows, DBA). The focus: turn service operations from a set of manual agreements into a manageable engineering system — with clear ownership, measurable queues, transparent economics and reproducible service quality.
−88%team tech debt: 286 → 34 tasks
5.9 daysmedian cycle time (was 7); p90 — 19 days (was 28)
×2DevOps-service revenue from a key client
+48%revenue per engineer-hour (custom service)
7 minresponse SLA on the custom service, 24×7
4productized managed services
05Operations · ITSM/SDLC
Building a manageable operation for the engineering department
Context
The status of a large share of work had to be checked with the people doing it. Operational and project tasks were mixed, engineers chose their next task themselves, and management had no single set of metrics for queues, load and cycle time.
What I did
split operational work in ITSM from project work in SDLC
created separate queues for incidents, requests, problems, changes and unassigned tasks
introduced priority-based queue processing instead of engineers self-selecting tasks
set requirements for keeping statuses and comments current on long-running tasks
rolled out metrics for queue age and size, staff load, effort and cycle time
tied operational metrics to the team's monthly KPI
Result
−88%
tech debt: 286 → 34 tasks
median cycle time dropped from 7 to 5.9 days
p90 time-to-close dropped from 28 to 19 days
work status became available from ITSM/SDLC without polling the people doing it
06Team · structure
Restructuring a team of 13 engineers
Context
People were grouped mostly by historically formed technology specializations. Areas of responsibility overlapped, the manager remained the entry point for a large number of operational questions, and context switching hurt productivity.
What I did
split the department into three tracks: DevOps, SRE and Managed Apps
appointed leads and assigned services and areas of responsibility to the teams
built a roles-and-FTE model for capacity planning
introduced a quarterly performance-review cycle and regular one-to-ones
developed a competency matrix for the DevOps track
built mentoring, knowledge sharing and process improvement into the incentive system
Result
3 teams
DevOps, SRE and Managed Apps — with leads and ownership
operational and technical decisions were delegated to the leads
load could now be planned not just per person but per track
quarterly performance reviews became a regular process for the whole team
new DevOps and SRE projects were launched alongside ongoing operations
07Product · services
Redesigning the Managed Services portfolio
Context
Existing service descriptions didn't always make it possible to pin down the scope of work, the limits and the responsibilities of client and provider. That created risks at presale, at service activation, in operation and in later billing.
What I did
Productized four core managed services — Managed Monitoring, Managed Logging, Software Backup and Managed OS. For the portfolio I prepared:
unified service descriptions in Russian and English
SLAs and responsibility matrices
activation requirements and questionnaires
lists of typical requests
rules for changing parameters and deactivating services
GPLs and billing units
presale calculators
XS–XL engineer-hour packages with progressive discounts
Result
4 services
Monitoring, Logging, Backup, OS — with SLAs and presale calculators
service scope and boundaries became consistent for sales, architects and operations
repeatable procedures appeared for presale, activation and handover to support
the risk of unpaid work outside the agreed SLA went down
08Economics · P&L
Department economics and billing automation
Context
Data on revenue, billed services, effort and team cost lived in different systems and reports. It was hard to tell the profitability of a specific client or service, or to separate billable activity from operational losses.
What I did
consolidated data from billing, 1C, ITSM and timesheets
built the department's first P&L model
introduced plan-vs-actual for revenue and costs
started measuring gross margin by service
added revenue and profit per employee
automated part of the monthly billing reports
set up regular effort analysis by client and service
Result
On one contract the analysis showed that the actual cost of work exceeded the payment received. After reworking the service scope:
68%
financial effect from the freed engineering capacity
the unpaid volume of work that was stopped came to ~30% of the contract's effort
the freed capacity was redirected to higher-margin projects
09Commercial · pricing
Rebuilding the commercial model of a DevOps service
Context
At a large product client the actual volume of DevOps work and the payment model in use had drifted apart. Development, maintenance, consulting and infrastructure support were all mixed within a single contract.
What I did
audited tasks, effort and infrastructure objects
split the work into Build and Support
calculated the required team composition and FTE shares
developed T&M and package-pricing models
set separate rates for junior, middle, senior and architect roles
standardized monthly reporting for DevOps and Managed IT
prepared a service matrix and a cost calculator for the supported infrastructure
Result
×2
DevOps-service revenue from a key client
the commercial model now reflected the real team structure and the nature of the work
a transparent link appeared between support volume, engineering capacity and the price charged
the client's reporting and internal billing were brought to a single format
10Reliability · observability
Advancing observability and PIR practice
Context
Health models for some services were out of date, some alerts created extra noise, and knowledge about the architecture and failure scenarios stayed with individual engineers. After a major incident with the DNS service it turned out that part of the PostgreSQL/Patroni configuration had been applied manually and wasn't stored in the distributed configuration store. During a cluster switchover this broke replication.
What I did
organized an update of service health models
introduced a dedicated health model and alerting for the DNS service
tuned alerts for PostgreSQL and PHP-FPM
formalized the timeline of the major incident and its root cause
coordinated communication between engineers, adjacent teams and the service center
moved corrective actions from manual operations into cluster configuration and automated deployment
captured the changes in DCS/etcd and infrastructure playbooks
Result
80%
of service health models updated
the incident's cause was separated from its symptoms and recorded in the PIR
critical configuration no longer depended on a manual change to a specific node
a reproducible scenario appeared for recovery and cluster re-initialization
the incident's technical conclusions were turned into concrete automation changes
11Custom service · SLA
Full lifecycle of a custom service: monitoring and alerting with a 7-minute 24×7 response
Context
The client needed not a catalog-standard monitoring service but a custom one for its critical services — with a guaranteed incident response in 24×7 mode. The portfolio had no ready product for that response level, and one-off agreements gave neither predictable quality nor clear economics.
What I did
Took the service through the full lifecycle — from requirements to operation and billing:
gathered requirements, monitored objects and critical scenarios, agreed thresholds and priorities
designed and built custom monitoring and alerting for the client's services
set a 7-minute response SLA in 24×7 mode with on-call, routing and escalations
packaged the service commercially: scope of work, billing units, SLA matrix and calculator
ran activation, handover to operations and regular reporting
Result
+48%
revenue per engineer-hour
7 min
response SLA, 24×7
a reproducible template was created for similar custom services — from presale to operation
Approach
A shared approach
Across every case — engineering and management alike — I use the same principle:
make the current state transparent;
define measurable metrics;
establish clear ownership;
eliminate manual and informal operations;
tie technical changes to an economic or operational result.
My job as a leader isn't to do all the engineering work myself, but to build a system where the team consistently makes decisions, keeps services running and evolves the infrastructure without constant manual oversight.
P.S. A similar task — bring order to operations, get infrastructure ready for Kubernetes, choose a storage backend, or build a manageable operation and tie it to economics? We can discuss it via contact or separately on consulting at gomanov.pro →