Avatar

Organizations

README.md

Hi, I am Ioannis

I am Head of Software Engineering at Cyber Ranges. Before that, I spent over a decade at Red Hat, most recently on the Quarkus team.

I have been in this field for more than 21 years, 15 of them working full time in open source. I am a member of the Apache Software Foundation, and I created projects like Fabric8 Kubernetes Client and Spring Cloud Kubernetes.

These days I care about how engineering teams work, what makes them effective, and how AI agents are changing the way we build software. For me, simplicity beats sophistication, in teams as much as in code.

This is where I write about all of that, as I have been doing since the Blogspot days. You can also find my talks, my projects and a bit more about me.

Popular posts

  1. Prologue

    I wrote an MCP server to talk to my issue tracker. The point was to give the assistant a clean, typed way in, instead of leaving it to improvise.

    Most of the time it used it. Some of the time it shelled out to curl against the same API. Occasionally it went looking for a local CLI tool instead. Same task, three different routes.

    Another case where Claude does its own thing. My context files say where things live on my machine, specifically so nothing has to be looked up. And yet Claude often runs find across my home directory, hunting for a path that was sitting in the file it had just loaded.

    AI Claude testing context evals

  2. Prologue

    I am old enough to have used Winamp. And XMMS after it.

    I get a bit nostalgic about them. Not for nostalgia’s sake, but for usability. Those players were direct. You pointed them at a folder, they played it. The controls were right there. There was no library to curate first, no import step, no waiting for something to index before you could hear a song.

    Since those days I tried a lot of players. MediaMonkey, Amarok, Rhythmbox, and a few others I have forgotten. I appreciated what they were doing. The media management features were genuinely good, and my library did need managing. But the directness was gone. Playing an album became a small project.

    hyprland mpd wofi linux music

  3. Introduction

    In my previous post Workflows everywhere pt. 1 I tried to define workflows and enumerate their functional and non-functional requirements. The post concluded with the realization that in many case we need workflow engines to power our workflows.

    This post defines what a workflow engine is and lists some of the most popular engines by category. Or at least that was the original intention, but there is a twist.

    What Is a Workflow Engine?

    Workflow engines are systems designed to simplify the creation and execution of workflows. They orchestrate the flow of information between the activities that compose the workflow based on predefined logic, conditions and dependencies.

  4. Introduction

    Workflows are everywhere. From CI/CD pipelines, all system / data integration to business process automation. It wouldn’t be too far-fetched to say that even modern software build tools like make, maven or npm are in their own way workflow engines.

    There are countless tools out there that help people define, execute and monitor workflows varying from simple no-code tools to complex frameworks that allow developers to define workflows in code, or even architect their software as workflows.

  5. Signing Git Commits

    I recently had a discussion with two fellow engineers about secure coding practices. After the discussion I realized that I am neglecting one of the most important practices: signing my commits.

    There are tons of articles on the internet explaining why and how. These are my notes on the subject that I decided to publish.

    These notes actually use literate programming so they are a mix of notes and code you can actually use via org-mode. You can find the actual notes file here.

    security git gpg ssh

  6. Intro

    It seems that everyone is an MCP guru these days.

    I am not.

    In fact, I know almost nothing about it. I am just aware of the concept.

    This post describes the steps I took in order to create an MCP from scratch, resulting in the project created at:

    I also recorded my journey starting from scatch with almost zero knowledge on the topic and using the Quarkus Blog as a guide:

    Post activity