Michał KrzewicaBackend Developer & AI Engineer

I build reliable backend systems and AI solutions that are ready for production.

From APIs and event-driven services to LLM applications and agent workflows built with LangGraph.

5+ years building production systems · Backend · LLMs · AWS

How I work

Good engineering starts with understanding the problem. From there, I move through design, implementation, testing and deployment — with room to revisit earlier decisions whenever something needs improving.

The process is shown as a graph, much like the agent workflows I build. Explore each step to see how I approach it.

how-i-work.graph idle

step 03a · backend

Build the backend

AI features still depend on well-designed backend systems. I focus on making those foundations reliable, scalable and easy to work with.

  • Build services and APIs with clear, consistent contracts
  • Move long-running tasks to queues and serverless workers
  • Deploy containerized services to ECS and make them observable
PythonFastAPIPHPSymfonySQSLambdaDocker
@router.post("/jobs", status_code=202)
async def create_job(cmd: CreateJob) -> JobAccepted:
    job = await jobs.create(cmd)
    await queue.publish(JobQueued(job.id))
    return JobAccepted(id=job.id)
› press Play to run the graph

About

Backend first. AI where it adds value.

I'm a backend developer with over five years of production experience, working across APIs, data modeling, event-driven systems and cloud infrastructure.

Since 2025, I've also been focused on AI engineering — building agent workflows, model-independent LLM pipelines, evaluation systems and observability for applications that need to work beyond a demo.

I care about systems that are easy to understand, measurable in production, mindful of privacy and straightforward for other developers to extend.

backend

Backend & APIs

Services, APIs and data models designed around clear contracts and real application needs. Streaming where it makes sense, without unnecessary complexity.

cloud

Cloud & delivery

AWS infrastructure built with the right tools for the job: Lambda and SQS for asynchronous workloads, Docker and ECS for services, and CloudFront for content delivery.

backend

Event-driven & async

Long-running and resource-intensive tasks handled outside the main request cycle, using queues, serverless workers and batch processing.

ai

LLM systems & agents

Structured agent workflows, flexible LLM integrations and RAG pipelines designed for real applications rather than one-off demos.

ai

Evaluation & observability

Practical ways to track quality and diagnose issues, from golden datasets and LLM-as-judge evaluations to traces for individual AI calls.

ai

Privacy & guardrails

Input validation, prompt-injection defenses and moderation, with a focus on collecting and retaining only the data the system actually needs.

Selected projects

A closer look at the systems I've worked on.

Backend architecture, event-driven processing and LLM applications — with an emphasis on how they work under the hood.

01 · Agentic workflows

Multi-agent workflows with LangGraph

An LLM-powered service that generates large, structured documents by processing multiple tasks in parallel and streaming progress to the browser as the work happens.

  • Nested LangGraph workflows with parallel execution, validation and retries at each step, plus MongoDB checkpointing to support recovery.
  • Model-independent integrations through LangChain, prompts managed outside the application code, and safeguards against prompt injection and inappropriate outputs.
  • Golden-dataset evaluations to catch quality regressions and guide improvements to prompts and workflow logic.
PythonFastAPILangGraphLangChainSSEMongoDBLangfuse
GET /documents/stream text/event-stream
event: node_started data: {"node":"plan"}
event: fan_out data: {"branches":3}
event: node_done data: {"node":"section_1"}
event: validation_failed data: {"node":"section_2","retry":1}
event: node_done data: {"node":"section_3"}
event: node_done data: {"node":"section_2"}
event: complete data: {"checkpoint":"saved"}

02 · Event-driven backend

Batch processing for text and audio

An event-driven pipeline for processing long documents and audio with LLMs, designed to handle longer workloads without keeping users waiting for synchronous responses.

  • Provider batch APIs instead of real-time calls, cutting API costs by around 50% for suitable workloads.
  • Audio processing with chunked browser recordings, ffmpeg-based merging and speech-to-text with speaker diarization. Audio files aren't retained.
  • Logging for every AI call, including model, token usage and prompt version, with Langfuse tracing over OpenTelemetry and LLM-as-judge evaluations.
AWS LambdaSQSPHPLangfuse

Audio processing pipeline

  1. 1Browser — audio recorded in chunks
  2. 2ffmpeg — chunks merged into a single recording
  3. 3Speech-to-text — transcription with speaker diarization
  4. 4Batch LLM processing — jobs handled through SQS and Lambda
  5. 5Result & observability — output traced, audio discarded

Cost per job

Real-time API 1×
Batch API ≈ 0.5×

Stack

The tools behind the systems

I choose technologies based on what the system needs, rather than trying to fit every problem into the same stack.

Explore each layer to see which tools I use and how they fit together in practice.

01Edge

  • BrowserSSE client
  • CloudFrontCDN

02API

  • Python / FastAPI
  • PHP 8 / Symfony
  • RESTcontracts
  • SSElive progress

03Async

  • SQSqueues
  • AWS Lambdaworkers
  • ECS · Dockerservices

04LLM

  • LangGraphagents
  • LangChain
  • Any LLM providermodel-agnostic
  • Batch APIs≈ ½ cost
  • RAG
  • Guardrailsinjection · moderation

05Data & quality

  • MongoDBdata · checkpoints
  • S3files
  • Langfusetraces
  • OpenTelemetry
  • Evalsgolden sets

Whole stack · 19 tools

Backend services at the core, an LLM layer where it adds value, and asynchronous processing for work that doesn't need to happen in the request cycle. AI calls are traced so behavior and performance can be investigated.

Contact

Have something interesting to build?

Whether you're working on a backend that needs to scale, bringing an LLM feature into production or connecting the two, I'd be happy to talk.