<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Maksym Lushpenko</title><description>Writing on platform engineering, Kubernetes, and building AI-assisted operational tooling.</description><link>https://lushpenko.dev/</link><item><title>From Memory to PR Autonomy: What I Built on Claude Code</title><link>https://lushpenko.dev/blog/from-memory-to-pr-autonomy/</link><guid isPermaLink="true">https://lushpenko.dev/blog/from-memory-to-pr-autonomy/</guid><description>Three annoyances, one system, no new tool: how a coding agent went from forgetting everything each morning to reviewing its own pull requests, and the three different ways I learned to steer it along the way.</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Claude Code Memory: A 5-Layer Setup</title><link>https://lushpenko.dev/blog/claude-code-memory-a-5-layer-setup/</link><guid isPermaLink="true">https://lushpenko.dev/blog/claude-code-memory-a-5-layer-setup/</guid><description>How I keep a coding agent consistent across projects, sessions, and teammates: a 5-layer memory architecture, and the promotion loop that keeps it from turning into a graveyard of half-useful notes.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate></item><item><title>How We Replaced Synchronous APIs with NATS and JetStream</title><link>https://lushpenko.dev/blog/how-we-replaced-synchronous-apis-with-nats-and-jetstream/</link><guid isPermaLink="true">https://lushpenko.dev/blog/how-we-replaced-synchronous-apis-with-nats-and-jetstream/</guid><description>Untangling a microservice estate that had grown too tightly coupled: moving Brokee&apos;s internal communication from synchronous request/response to NATS and JetStream, and what shipping it with a teammate actually looked like.</description><pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate></item><item><title>How We Reduced Our Google Cloud Bill by 65%</title><link>https://lushpenko.dev/blog/reducing-our-google-cloud-bill-by-65-percent/</link><guid isPermaLink="true">https://lushpenko.dev/blog/reducing-our-google-cloud-bill-by-65-percent/</guid><description>A practical GKE cost-optimization writeup: spot instances via temporary stable nodes, consolidating dev and prod with vcluster, and cutting Cloud Logging volume from GKE control-plane noise.</description><pubDate>Tue, 03 Dec 2024 00:00:00 GMT</pubDate></item><item><title>GCP Workforce Identity Federation for Isolated Candidate Environments</title><link>https://lushpenko.dev/blog/gcp-workforce-identity-federation-for-candidate-environments/</link><guid isPermaLink="true">https://lushpenko.dev/blog/gcp-workforce-identity-federation-for-candidate-environments/</guid><description>Logging skills-assessment candidates into the Google Cloud console without requiring a Google account, using Workforce Identity Federation and per-test project isolation.</description><pubDate>Tue, 01 Oct 2024 00:00:00 GMT</pubDate></item><item><title>Isolating Candidate Test Environments Across AWS, GCP, and Azure IAM</title><link>https://lushpenko.dev/blog/isolating-candidate-environments-across-aws-gcp-and-azure-iam/</link><guid isPermaLink="true">https://lushpenko.dev/blog/isolating-candidate-environments-across-aws-gcp-and-azure-iam/</guid><description>Three cloud providers, three different IAM models for the same problem: giving each candidate an isolated, disposable cloud environment for a skills assessment, and getting them logged in without a real cloud account.</description><pubDate>Wed, 01 Nov 2023 00:00:00 GMT</pubDate></item><item><title>Recording Candidate Terminal Sessions with asciinema</title><link>https://lushpenko.dev/blog/recording-candidate-terminal-sessions-with-asciinema/</link><guid isPermaLink="true">https://lushpenko.dev/blog/recording-candidate-terminal-sessions-with-asciinema/</guid><description>How we added session replay and AI-generated summaries to technical skills assessments, so reviewers get more signal without rewatching 30-60 minutes of terminal activity per candidate.</description><pubDate>Fri, 01 Sep 2023 00:00:00 GMT</pubDate></item><item><title>Creating Docker config.json for External Systems</title><link>https://lushpenko.dev/blog/creating-docker-config-json-for-external-systems/</link><guid isPermaLink="true">https://lushpenko.dev/blog/creating-docker-config-json-for-external-systems/</guid><description>A short tutorial for building a Docker config.json with base64-encoded registry credentials by hand -- the format external systems like Kubernetes image pulls expect, which the credential-helper-based config Docker generates by default does not match.</description><pubDate>Mon, 15 Mar 2021 00:00:00 GMT</pubDate></item><item><title>Monitoring Kubernetes Ingress with BlackboxExporter</title><link>https://lushpenko.dev/blog/monitoring-kubernetes-ingress-with-blackboxexporter/</link><guid isPermaLink="true">https://lushpenko.dev/blog/monitoring-kubernetes-ingress-with-blackboxexporter/</guid><description>Using Prometheus&apos;s Kubernetes service discovery to probe Ingress resources automatically instead of hand-maintaining a static endpoint list, including TLS expiry detection and how to debug what Prometheus actually discovers.</description><pubDate>Fri, 19 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Multitenancy on Kubernetes with Istio, External Authentication Server and OpenID Connect (Part 2 — Authorization)</title><link>https://lushpenko.dev/blog/multitenancy-on-kubernetes-with-istio-part-2-authorization/</link><guid isPermaLink="true">https://lushpenko.dev/blog/multitenancy-on-kubernetes-with-istio-part-2-authorization/</guid><description>Part 2 of 2. Once a user is authenticated, how do you decide what they&apos;re allowed to reach? Istio ServiceRole and ServiceRoleBinding for tenant-level access, then header-based and path-based routing to isolate individual users within a tenant.</description><pubDate>Wed, 09 Oct 2019 00:00:00 GMT</pubDate></item><item><title>Multitenancy on Kubernetes with Istio, External Authentication Server and OpenID Connect (Part 1 — Authentication)</title><link>https://lushpenko.dev/blog/multitenancy-on-kubernetes-with-istio-part-1-authentication/</link><guid isPermaLink="true">https://lushpenko.dev/blog/multitenancy-on-kubernetes-with-istio-part-1-authentication/</guid><description>Part 1 of 2. How HAL24K&apos;s data-science platform authenticates users across tenants on Kubernetes: OpenID Connect, an External Authentication Server (EAS) fronted by an Istio envoy filter, and per-tenant OIDC client configuration.</description><pubDate>Wed, 02 Oct 2019 00:00:00 GMT</pubDate></item><item><title>Kafka From Zero to Hero: Zero-Downtime Kafka Migration</title><link>https://lushpenko.dev/blog/kafka-from-zero-to-hero-zero-downtime-kafka-migration/</link><guid isPermaLink="true">https://lushpenko.dev/blog/kafka-from-zero-to-hero-zero-downtime-kafka-migration/</guid><description>Blockport&apos;s Kafka story end to end: a managed cluster that turned out to be operationally opaque, the replication and high-availability issues that forced a rebuild from scratch with Terraform and Ansible, and migrating a live cluster to it with zero message loss and zero downtime.</description><pubDate>Tue, 21 May 2019 00:00:00 GMT</pubDate></item><item><title>Upload Jenkins Secret File Credential via API</title><link>https://lushpenko.dev/blog/upload-jenkins-secret-file-credential-via-api/</link><guid isPermaLink="true">https://lushpenko.dev/blog/upload-jenkins-secret-file-credential-via-api/</guid><description>Jenkins documents the credentials API for XML and simple JSON cases, but not for uploading a secret file. Capturing the real browser request, then paring it down, gets to a single working curl command.</description><pubDate>Wed, 03 Jan 2018 00:00:00 GMT</pubDate></item><item><title>Debug JAR Files in IntelliJ IDEA</title><link>https://lushpenko.dev/blog/debug-jar-files-in-intellij-idea/</link><guid isPermaLink="true">https://lushpenko.dev/blog/debug-jar-files-in-intellij-idea/</guid><description>Launch a packaged JAR in JDWP debug mode, then attach IntelliJ to the running JVM as a remote debugger -- for the case where you cannot just run a main() method directly from the IDE.</description><pubDate>Mon, 18 May 2015 00:00:00 GMT</pubDate></item></channel></rss>