Skip to main content
Konstantin Pavlov

Konstantin Pavlov

Software Engineer

I am a Software Engineer,

and this is my blog about software development.

Recent

LLM Evaluation Testing with promptfoo: A Practical Guide

This article shows how to implement automated testing for LLM applications using promptfoo with a real application server, addressing the challenge that traditional testing methods fail with non-deterministic AI responses. The guide demonstrates testing conversation memory, tool integration, content moderation, and performance using a financial chatbot built with Quarkus and LangChain4j.

Contract-First vs. Code-First Development: Why API Contracts Matter From Day One

Discover why starting with API contracts first—not code—leads to clearer, more maintainable microservices. Learn the differences between contract-first and code-first approaches, common pitfalls to avoid, and why even small teams building alpha products benefit from clearly defined interfaces from day one. Get practical workflow tips and see how this approach can dramatically reduce integration headaches as your system grows.

From Monoliths to AI Proxies: Real-World Strategy for Testing and Evolving LLM Integrations

Integrating Large Language Models (LLMs) into production systems presents unique architectural, testing, and operational challenges. This article shares practical insights and solutions from real-world experience integrating LLMs into a customer interaction platform. It covers the evolution from a monolithic to a more modular AI Proxy architecture pattern, strategies for testing, deploying and monitoring LLMs, and the emerging Model Context Protocol (MCP) standard. Application developers and software architects will learn proven practices to build robust, reliable and responsible LLM-powered systems.

Kotlin Extensions for LangChain4j

Discover Kotlin extensions for LangChain4j designed to transform the synchronous LangChain4j API into a modern, non-blocking experience with Kotlin Coroutines. Learn about key features including coroutine support for ChatLanguageModels, Kotlin Flow for streaming responses, external customizable prompt templates, and non-blocking document processing. Enhance your Kotlin programming skills and improve application efficiency by leveraging these powerful new tools.

Keeping Your Software Healthy: The Critical Role of Dependency Updates

Discover best practices for effective dependency management in software development and learn strategies to keep your projects secure, efficient, and free of technical debt. This comprehensive guide covers the critical importance of regularly updating dependencies, utilizing automated tools and processes to streamline dependency management, fostering a culture of proactive updates through incentives and education, and implementing organization-wide dependency management strategies at scale. Whether you’re an application developer, software architect, or engineering manager, this article provides actionable insights to help you master dependency updates and ensure your software stays healthy and high-performing.