Skip to content

Kyrylo Kholodenko

Python Engineer

Django services · integrations · crawling · data & AI

6+ years shipping Python to production: Django services, integrations, crawlers and data pipelines for EdTech and Ukrainian public-sector platforms, from the first client call to release. Open edX core contributor.

  • Python
  • Django
  • DRF
  • Celery
  • PostgreSQL
  • Playwright
  • ClickHouse
  • Kubernetes
  • AWS
Location
Lviv, Ukraine
Remote
UTC+2/+3, full EU overlap
English
B2
Availability
Open to new roles
Updated
Oct 2026

Highlights

  1. 13

    pull requests merged into Open edX core, including a 7.5k-line badges feature

  2. 19 s → 0.56 s

    p90 latency (9 in 10 calls are faster) of a rate-limited API sync, after connection pooling

  3. Millions

    of crawls a day on the anti-piracy platform where I work on anti-bot reliability

  4. 12,378

    users migrated off a legacy LMS under a 30 req / 10 s limit

Experience

Product teams at an Open edX vendor, an outstaff crawling engagement, and freelance before that.

years of Python in production
6+
client projects as tech or dev lead
4
upstream PRs merged
13
ADRs written since 2025
11
  1. Raccoon Gang

    Jul 2021 – present

    Open edX vendor · Kharkiv, then remote

    1. Jan 2024 – nowcurrent

      Lead Engineer

      Tech or dev lead on four client builds, presales lead on a ~100k-learner tender, mentor and technical interviewer.

      Outstaff · 2025 – now

      Python engineer on the crawling team of a brand-protection and anti-piracy company.

      The project
    2. Aug 2021 – Jan 2024

      Full-stack Developer

      Django and React across a dozen client platforms, upstream Open edX features, backup tech lead on the largest build.

    3. Jul – Aug 2021

      Python Developer

      Joined on-site in Kharkiv.

  2. Freelance

    Feb 2020 – Jul 2021

    Remote

    1. Feb 2020 – Jul 2021

      Software Engineer

      Web apps and scrapers for small clients: ASP.NET Core and Python (Django, FastAPI), browser automation and crawling with Selenium and Scrapy.

Domains & clients

Most of my work is client work: I join the first call, not only the first commit.

EdTech
Universities, NGOs, enterprise academies and a national MOOC — 35+ Open edX client platforms since 2021.
Public sector · Ukraine
A government workforce-training control plane, a public registry with national e-ID sign-in and qualified e-signatures, a national teacher-development programme.
Brand protection
Crawling and anti-bot reliability for an anti-piracy platform, as an outstaff engineer.

With clients

  • Discovery and requirement calls
  • Estimates, statements of work, contract scope
  • NFR matrices signed off by the client
  • RFP responses, including a ~100k-learner tender
  • Demos, release notes, client-side mentoring

Selected work

Eight projects, each with a small diagram of how it works: not every system is a pipeline. Clients under NDA are described, not named; upstream Open edX work links to the pull request.

  1. Crawling at scale2025 – present

    Keeping a bot fleet unblocked

    Brand-protection & anti-piracy platform · outstaff

    Role
    Python engineer
    Team
    Crawling team

    Problem

    A few hundred bots scan marketplaces, social networks and piracy sites millions of times a day, and every site keeps adding anti-bot defences.

    What I did

    • Kept bots reliable against Cloudflare, Akamai, proof-of-work challenges, TLS fingerprinting, geo-blocking and captchas: diagnosis first, then the cheapest fix that passes.
    • Fixed the shared framework, not single bots: a proof-of-work solver that unblocked a whole family of mirror sites, and a page-ownership contract for every Playwright bot.
    • Shipped data-acquisition features: search by image, delivery-location-aware monitoring that never reports a false “closed”, signed-JWT auth for a mobile API.

    Decision

    Escalate per failure, not per site: classify the block first and climb only as far as the cheapest tier that works. Premium proxies stay the exception.

    repositories, incl. 5 shared libraries
    46
    for ~18 country bots via a shared library
    1 fix
    Diagnose the block, then climb only as far as needed. Tiers are generic.
    • Python
    • Playwright
    • curl_cffi
    • RabbitMQ
    • Kubernetes
    • Grafana · Loki

    Outstaff engagement under NDA

  2. Event-drivenDec 2022 – Feb 2025

    Digital badges & verifiable credentials

    Open edX — open-source core (upstream)

    Role
    Backend engineer → delegated tech lead
    Team
    6 · PM, TL, 2 BE, QA, DevOps

    Problem

    Open edX operators had no built-in way to issue recognised digital badges or verifiable credentials.

    What I did

    • Built the Credly integration end to end: new platform events, an event-bus consumer and a badges service in Credentials.
    • Added Accredible as a second provider through a provider-agnostic client layer.
    • Implemented W3C Verifiable Credentials / Open Badges v3 issuance with revocation status lists.

    Decision

    Event bus over direct calls from the LMS, and one provider interface over a Credly-specific client: a second vendor slotted in without touching the consumer.

    lines merged upstream
    +7.5k
    badge providers
    2
    One event, one consumer, one provider interface, two vendors.
  3. AI in productionMay 2025 – Sep 2026

    AI-driven 360° competency assessment

    National teacher-development NGO · Ukraine

    Role
    Tech lead
    Team
    6 engineers

    Problem

    Teachers needed development programmes matched to their assessed competencies, not a generic catalogue.

    What I did

    • Built semantic matching on OpenAI embeddings in pgvector, kept fresh by Celery bulk jobs and on-save refresh.
    • Shipped LLM-written assessment conclusions, then moved them to a smaller model to cut inference cost.
    • Ran the stream as main reviewer and release manager.

    Decision

    pgvector inside the existing Postgres instead of a separate vector database: one datastore, one backup, refresh in the same transaction.

    live in production
    Nov 2025
    repositories I reviewed and released
    5
    Not a pipeline: a profile and programmes in one vector space, matched by angle.
    • Django
    • pgvector
    • OpenAI API
    • Celery
    • Kubernetes

    Client under NDA

  4. Data2025 – 2026

    Learning analytics on ClickHouse

    Five client platforms · energy sector, universities, NGOs

    Role
    Dev lead · data & backend
    Team
    Platform teams · dev lead on two

    Problem

    Teachers and programme owners wanted answers from learner activity (who is stuck, which course rates low) without asking engineers for a report.

    What I did

    • Rolled out and extended the Open edX analytics stack (tracking events as xAPI, ClickHouse, dbt, Superset) on five client platforms.
    • Built a teacher dashboard from custom Superset charts, set the data refresh to every 15 minutes and tuned Superset for stability.
    • Added a course-rating XBlock with its ratings dashboard, and sped up instructor analytics for a university-affiliated programme.

    Decision

    A columnar store fed by the event stream instead of reports against the LMS's MySQL: dashboards stay fast and the LMS never pays for a heavy query.

    platforms with analytics
    5
    dashboard data refresh
    15 min
    This one is a pipeline: events in, dashboards out, on a schedule.
    • ClickHouse
    • dbt
    • Superset
    • xAPI
    • Python
    • Kubernetes

    Clients under NDA

  5. MigrationOct 2023 – Dec 2024

    Physician education platform

    Continuing-medical-education provider · DACH · 10k+ physicians

    Role
    Backend engineer · tech-lead backup
    Team
    6 · PM, TL, BE, FE, QA, DevOps

    Problem

    Accreditation points and every learner account lived in a rate-limited legacy LMS the client was leaving.

    What I did

    • Migrated 12,378 users and 237 courses through a resumable pull → transform → load pipeline (~50k API calls at 30 req / 10 s).
    • Designed a separately deployed Django service talking to the platform over a Redis event bus.
    • Delivered CME-point accrual reported to the accreditation body on certificate issue; mentored the client's in-house developer.

    Decision

    Client logic in its own service over the event bus instead of inside the AGPL core: clean upgrades, at the price of eventual consistency.

    users migrated
    12,378
    courses migrated
    237
    The migrator spends a 30-request budget per 10 s window; a 429 means back off, not fail.
    • Django
    • DRF
    • Redis event bus
    • OAuth2
    • Celery

    Client under NDA — happy to walk through the architecture

  6. IntegrationsFeb 2025 – Oct 2026

    Enterprise cybersecurity learning hub

    Global networking company · enterprise training

    Role
    Backend engineer · solution design
    Team
    7 · PM, TL, BA, BE, QA, DevOps

    Problem

    Learners jumped between the client portal, Open edX and a cyber-range with separate logins and no shared progress.

    What I did

    • Designed seamless SSO with the client portal as the OIDC provider and Open edX as the relying party.
    • Built catalogue and progress sync for ~3,000 hands-on labs under strict API limits; connection pooling took p90 from 19 s to 0.56 s.
    • Pushed enrolment and completion events back to the client's system of record.

    Decision

    Direct API over LTI, polling over xAPI (3 ADRs): fewer moving parts and predictable load under the provider's rate limits.

    p90 latency
    19 s → 0.56 s
    client tests
    46 → 174
    Same requests; the difference is paying for the handshake once.
    • Django
    • OIDC
    • aiohttp
    • Celery
    • LTI 1.3

    Client under NDA

  7. ArchitectureJul 2026 – present

    Training control plane

    Government-sector workforce programme · Ukraine · up to 10k users

    Role
    Backend engineer · ADR author
    Team
    4 BE, FE, 2 QA, DevOps, mobile

    Problem

    The programme needed identity, roles and cohort management in front of an LMS it must not modify.

    What I did

    • Delivered learning groups with scheduled reconciliation against the LMS: drift detection, retries, convergence status.
    • Built the authorization app: a permission catalogue with runtime-defined roles, targeting ≤100 ms p95.
    • Authored 7 ADRs for identity, enrolment and messaging contracts.

    Decision

    Asynchronous, convergent mirroring to the LMS instead of synchronous calls: the control plane stays up when the LMS doesn't.

    ADRs
    7
    backend tests
    1,400+
    Desired state vs what the LMS has: find the drift, fix it, repeat until equal.
    • Django
    • DRF
    • Celery
    • Meilisearch
    • Azure

    Client under NDA

  8. Tech leadJul – Oct 2026

    Cohort learning, zero core patches

    International leadership-education programme · 6 languages

    Role
    Tech lead
    Team
    3 engineers

    Problem

    Facilitator-led cohorts were needed on a platform whose core the client forbade patching.

    What I did

    • Led an 11-feature scope within a fixed hour cap: cohort API, invite codes, facilitator roles, cohort-scoped discussions.
    • Found a grading defect that left 442 learners at 0% and 96 certificates unissued; shipped the fix and a self-healing completion rollup.
    • Ran an AI-assisted delivery pipeline: spec → implementer agent → reviewer agent → local verification.

    Decision

    Upgrade-safe wrappers over native course groups instead of a fork: every feature survives the next platform release.

    learners' grades restored
    442
    certificates recovered
    96
    Each dot is a learner the grading defect left at 0%.
    • Django
    • Open edX plugins
    • XBlock
    • Celery
    • React + TS

    Client under NDA

Also shipped

  • 2025 – 26

    Mobile deadlines API

    Profiled ~18 s responses for a learner with 44 courses, wrote the upstream design, shipped the reset-deadlines endpoint.

    Backend · upstream
  • 2026

    National-university MOOC

    Two-generation Open edX upgrade, a cross-cloud migration and national SSO over OIDC.

    Dev lead
  • 2026

    Energy-sector training platform

    Runs on k3s in Azure; three languages and branded mobile apps.

    Dev lead
  • 2026

    Public-sector registry

    Streaming uploads for 600 MB files, national e-ID sign-in and qualified e-signatures, on Odoo.

    Backend
  • 2022 – 25

    SCIM 2.0 provisioning

    A user-provisioning plugin for a corporate academy.

    Backend
  • 2021 – 25

    National NGO digital-skills platform

    Certificates and a reporting suite, built over three years.

    Backend
  • 2023 – 24

    Open-science programme

    ORCID-only sign-in and Credly badges for a federal science agency.

    Backend
  • 2023

    Course import and export

    Both pages of the Open edX authoring app, contributed upstream in React.

    Full-stack

AI, hands-on

An AI enthusiast with a harness: agents do the typing, specs and reviews keep them honest, and a human signs off anything irreversible.

In production

Shipped to client platforms

  1. 01Semantic matching on OpenAI embeddings in pgvector, live since Nov 2025
  2. 02LLM-written assessment conclusions, moved to a smaller model to cut cost
  3. 03An MCP tool that searches the company's trackers, wiki and chat for past solutions

In my workflow

Claude Code, MCP, agents, hooks

  1. 01Claude Code as the main tool: a strong model plans and reviews, cheaper subagents write code and tests in parallel
  2. 02MCP servers into Jira, Confluence, Git, CI and Grafana; custom skills for PR readiness, deploy checks and production health
  3. 03Hooks as guardrails: irreversible or public agent actions need a human
  4. 04Spec-driven changes with OpenSpec: proposal → design → tasks, human gate before code

Co-authored the company's intent-driven development method; I present spec-driven AI work at internal AI syncs.

Skills

Two tiers, no ratings: what I run in production, and what I have shipped with but would not call core.

Production

Core
  • Python
  • Django
  • Django REST Framework
  • Celery
  • PostgreSQL
  • MySQL
  • Redis
  • pytest
Integration
  • Event bus (openedx-events, Redis Streams)
  • REST & webhooks
  • OAuth2 / OIDC
  • SAML
  • SCIM 2.0
  • LTI 1.3
Crawling
  • Playwright
  • curl_cffi
  • httpx
  • Selenium
  • RabbitMQ
  • anti-bot diagnosis
Data
  • ClickHouse
  • Superset
  • xAPI
  • ETL & data migrations
Delivery
  • Docker
  • Kubernetes (k3s, Azure, AWS)
  • Tutor
  • GitLab CI
  • Grafana · Loki · Prometheus
Platform
  • Open edX: LMS, plugins, XBlocks, Credentials

Working knowledge

  • pgvector
  • OpenAI API
  • Airflow
  • dbt
  • Pandas · Polars · PyArrow
  • AWS S3 · Athena · Glue
  • FastAPI
  • Terraform
  • React + TypeScript
  • Meilisearch
  • Elasticsearch
  • Odoo

Languages

Ukrainian
Native
English
B2

Education

  • 2024 – 2025Master's, Engineering and Programming of Infocommunication SystemsNational Aerospace University “Kharkiv Aviation Institute”
  • 2020 – 2024Bachelor's, Engineering and Programming of Infocommunication SystemsNational Aerospace University “Kharkiv Aviation Institute”