AI Engineer Europe 2026
Platforms for Humans and Machines: Engineering for the Age of Agents — Juan Herreros Elorza
Read the talk
Platforms for Humans and Machines
A coding agent cannot fix a deployment process that depends on knowing whom to ask. Self-service APIs, local feedback and observable success make platforms usable by both people and machines.
From a talk by Juan Herreros Elorza
Before you start: Familiarity with deployment pipelines, APIs and basic application observability will help you follow the platform design choices.
How does finished code become a running system?
How does a developer get an application running when deployment, infrastructure and operational knowledge sit outside the application code? At Banking Circle, that problem spans client APIs, core banking, internal tools, data systems and payment infrastructure. Juan Herreros Elorza introduces himself as the lead of its cloud-native technology team. The company provides cross-border payments, accounts and liquidity management. Juan reports that Banking Circle processes over €1 trillion annually and provides banking services to over 700 regulated financial institutions. These are company-scale figures, also reflected in its payments-bank brochure, rather than measurements of platform performance.
Juan reports that more than 250 people at Banking Circle build technical systems. Their responsibilities extend from client-facing APIs and core banking to internal tools, data science, data engineering and integrations with the clearing schemes that settle payments. The platform team's purpose is to abstract infrastructure and cloud concerns so those teams can concentrate on their systems.
That platform is Atlas, organized into several capabilities:
| Capability | What teams use it for |
|---|---|
| Compute | Running applications on Kubernetes |
| Infrastructure | Provisioning blob storage, databases and secret management |
| Messaging | Connecting applications and systems |
| Observability | Understanding applications and payment processing |
Providing these capabilities is only part of the work. The developer also needs a usable route through them.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
The application is ready; the deployment is not
Juan illustrates the problem with fictional characters drawn from his experience at Banking Circle. A new developer joins a team and writes an application, perhaps for a payment system. The application code is ready. Then the developer reaches the boundary of what they know: where and how should it run?
A teammate points to an existing deployment pipeline and suggests copying it. The developer does so, adjusts it for the new application's requirements and runs it. The pipeline fails, but the error concerns something outside the application they wrote. The teammate's next suggestion is to contact someone in infrastructure. That colleague recognizes a recurring error and fixes it.
The deployment now succeeds, only to reveal another dependency: the application also needs a database or blob storage. The developer returns to the infrastructure colleague, who is willing to help but occupied with other work. Provisioning will have to wait until next week. Completing the application has led to a sequence of copied configuration, unexplained failures, personal referrals and another queue. Whatever documentation exists is supplemented by knowing whom to ask.
A human can sometimes navigate that process by walking to another floor and finding the right person. A coding agent ordinarily cannot. An agent might communicate through Teams or a voice model, but that is not a dependable assumption for a coding workflow. The same gaps that frustrate developers therefore become hard limits on what their agents can accomplish. Agents expose existing platform weaknesses. Human handoffs and delayed discovery of pipeline problems were already costly before agents arrived.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Make the whole operation self-service
Self-service means completing the operation without depending on a particular person. If a developer needs a platform resource, they should be able to request it themselves; an agent should have the same route. Automation alone does not make that route usable. Fetching building blocks from five different places, assembling them and triggering a separate flow leaves the caller responsible for discovering the process. The easier and more intuitive the complete operation is, the more effectively it becomes self-service.
Self-service can take the form of a message or a button, but a well-defined API provides a useful foundation for agents. A CLI can wrap it, as can a Model Context Protocol tool interface. Those interfaces give callers ways to discover operations and their available options without reconstructing the workflow from someone else's pipeline.
Schema validation checks whether a request has the expected structure; it does not establish that the request will succeed or achieve the task. Authentication and authorization govern who can perform an operation. Depending on the workflow, the agent might act with the developer's credentials or use its own identity. With those boundaries in place, the API's responses become feedback: the agent attempts an operation, examines the response and uses that result to decide its next action.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Move feedback into the agent's working loop
In the setup Juan describes, the agent works on the developer's machine while the model runs elsewhere. Server-hosted agents, including setups using OpenClaw, are another possibility. The platform should make operations accessible from the environment where the agent does its work. For the local case, that means letting the agent validate and act from the machine it already uses.
Fail as early as possible. Requiring an agent to push a change to version control and wait several minutes for a workflow failure delays information it could have used immediately. Where checks can run up front, expose them locally through the API or a wrapper. The agent can then make a change, validate it and revise it without repeatedly crossing a remote pipeline boundary. A clearly defined desired result gives that iteration a direction.
Direction alone is insufficient: the task also needs a completion condition. A developer may verify deployment by inspecting the application and checking a metrics dashboard. An agent needs access to the underlying evidence. Expose logs, metrics and traces through an API, CLI or MCP server so that success does not depend on visually reading a dashboard. The loop can then cover the whole task:
- Read the requested outcome and its success criteria.
- Perform the operation through the platform interface.
- Retrieve the application state and operational evidence.
- Compare that evidence with the criteria before declaring completion.
A successful deployment request and a correctly running application are different observations. The platform needs to make both accessible.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Put instructions where the agent can find them
Documentation that exists but cannot be found does little to remove a dependency on colleagues. Its placement should match its scope:
- Small repositories: Keep documentation beside the code it explains, so an agent working in that repository can discover both together.
- Larger systems and shared platforms: Provide a central place where an agent can discover the available documentation.
- Retrieval: Make relevant pieces available through an API, avoiding the need to load an entire HTML page and extract the useful parts.
These choices address both discovery and the amount of unrelated material the agent must process.
Agent-specific instructions add working conventions to that documentation. Juan names AGENTS.md, CLAUDE.md and copilot-instructions.md, depending on the agent in use. A repository can specify how to build, test, deploy and verify the result. For the deployment problem above, a concise Markdown instruction could make the completion requirement explicit:
markdown
# Deployment workflow
Before deploying, read the platform documentation and identify all
required resources, including databases and blob storage.
Run the available local validation checks before pushing changes.
Resolve validation failures before requesting deployment.
After deployment, retrieve application state, logs and metrics through
the platform interface. Check them against the task's success criteria.
Do not treat acceptance of a deployment request as proof of completion.
The important content is the working procedure and its verification step, rather than merely a description of what the repository contains.
General guidance can be supplemented with project- or repository-specific AGENTS.md instructions. Skills capture conventions for a particular kind of task—for example, how to interact with a platform—so the agent can apply the relevant procedure when that task arises. Repository instructions establish the working context; task-specific guidance explains how to carry out a recurring operation.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Welcome contributions without handing off responsibility
An internal platform serves developers who can also help improve it. Juan reports seeing greater willingness to contribute as agents lower the entry barrier. That can help the platform gain features its users need, but it does not transfer maintenance responsibility away from the owning team. Security, compliance and consistent engineering standards still have to hold across contributions.
Use two complementary mechanisms:
| Mechanism | Responsibility |
|---|---|
| Enforced policies | Prevent outcomes that must not occur |
AGENTS.md and skills | Explain conventions and the intended contribution process |
Instructions guide behavior; policies enforce boundaries. Give contributors' agents enough context to work in the preferred way, while placing non-negotiable constraints in systems that enforce them. That combination supports participation without making the platform's safety depend on an agent following every instruction.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Measure the outcome the platform was meant to improve
Once developers and agents can use the platform, the next question is whether the changes helped. Choose the intended outcome and compare it before and after the intervention. An API, a documentation portal or an agent workflow is an implementation choice; its existence does not by itself establish an improvement.
For application delivery, Juan points to DORA, recalling change frequency, mean time to recovery and lead time, while leaving the fourth traditional metric unnamed. The traditional terms are deployment frequency, lead time for changes, mean time to recovery and change failure rate. The current DORA guide uses five metrics: deployment frequency, change lead time, failed deployment recovery time, change fail rate and deployment rework rate. This distinction matters when defining a measurement program: broad recovery time and recovery from a failed deployment are not interchangeable.
Delivery is not the only useful lens:
- Reliability: Examine application errors and traffic behavior. This is particularly consequential in a fintech environment.
- Platform support: Track support requests. Effective self-service may reduce them; a confusing implementation may increase them.
- Developer experience: Use a framework such as SPACE to consider satisfaction alongside other dimensions of productivity, rather than reducing the assessment to one number.
Juan supplies no measured before-and-after improvement. The practical requirement is to decide what making the platform easier for agents should accomplish, then measure that outcome.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Use interest in AI to fund the missing foundations
These practices form a starting point for platform work, not an exhaustive specification. Self-service and APIs give the agent a route to act; local feedback, documentation and observability give it a route to complete the task and verify the result. Contributions can extend that platform, while measurement tests whether the work is helping its users.
The final obstacle may be organizational rather than technical. API-first interfaces, locally accessible workflows and proper documentation may have lost priority even when teams already understood their value. Interest in AI—from executives to individual contributors—creates a reason to revisit those decisions. Use that attention to secure investment in the foundations that were missing all along. The work that lets an agent finish a deployment also removes the referrals, unexplained failures and waiting that blocked the developer.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Resources
From the talk
Definitions and practical guidance for measuring delivery throughput and instability using DORA’s five-metric model.
The February 2021 paper introducing a multidimensional approach to developer productivity.
Examples and conventions for giving coding agents repository-specific build, test, and contribution instructions.
The 2025-11-25 protocol version’s tool discovery, invocation, schemas, error handling, and security requirements.
A personal AI assistant connecting models, tools, and messaging channels through a Gateway.
Further reading
Juan’s slides summarize Atlas, platform design recommendations, and outcome measurement.
Defines SKILL.md metadata and instructions, with optional supporting scripts, references, and assets.
Read the complete timestamped transcript
- 0:01
Hello, everyone. Thank you very much for watching, and welcome to my talk, Platforms for Humans and Machines.
- 0:09
My name is Juan, and I work as the team lead for the cloud-native technology team in a company called Banking Circle. You probably don't know about us, so let me tell you just a bit about what we do.
- 0:21
Mainly, we are a global cross-border payments provider,
- 0:26
uh, on top of accounts and liquidity management. We provi-- we process over one trillion euro per year, and we provide banking services to over seven hundred regulated financial institutions.
- 0:40
We are very much a fintech, and in fact, a lot of us are working within some capacity of engineering.
- 0:48
Because of that, some years ago, we decided to establish a platform engineering team in Banking Circle, which is where I'm working.
- 0:57
More than two hundred and fifty people in Banking Circle are building some type of technical systems, and this includes the APIs that our clients are using. This includes the core banking systems, some internal tools.
- 1:09
This includes data science and data engineering, and of course, the integration with the clearing schemes where we settle the payments.
- 1:18
Because of that, we have decided to establish a platform that all of these teams can use so that we abstract away the complexity in, uh, some of the underlying infrastructure and cloud concerns, and so these people can focus on building the systems that they are supposed to build.
- 1:37
We call that platform Atlas, and Atlas has a number of sub-platforms. We have a platform for compute, where people run their applications based on Kubernetes. We have a platform for infrastructure which people can use to provision blob storage services.
- 1:55
They can also use it to provision databases. They can use it to provision secret management systems. We have platforms for messaging for the different applications and the different systems to communicate with each other, and we have platforms for observability so that we can know what is happening with all of our applications and all of the payments that
- 2:14
we are processing. Now, we have come a long way in this platform engineering journey, but it wasn't always easy. And I would like to start my talk with a bit of a story using fictional names and characters, but a story based on my experiences while working here in Banking Circle.
- 2:33
I'm sure many of you will relate to this story as well. Let's say that we have a new developer, right? And they have joined the company. They have joined a team.
- 2:43
They start working, and they build their first application. Um, this developer is great. They are very good at, uh, coding the application, perhaps for some payment system.
- 2:54
Um, but eventually they hit a wall. They have the code, but they need to deploy that application somewhere.
- 3:03
Then the developer will naturally ask someone in the team, "Hey,
- 3:07
what should I do with this application? How do I deploy it?" And then the person in the team might say to the developer, "Well, you know what? Actually, I did that, but it's already set in this pipeline.
- 3:20
Why don't you copy it from there?" The developer might go copy the pipeline, then maybe they have to adjust something. It wasn't exactly the same in this case because the application had some specific requirements.
- 3:32
Then they will try to just run this pipeline. Maybe the pipeline will fail, and ultimately, the developer doesn't know why it's failing because the error has nothing to do with the application that they coded.
- 3:44
Maybe they then go back to their teammate and they are like, "Hey, what can I do with this?" And the teammate might say, "You know what you should do?
- 3:52
You should talk to this person that is working in the infrastructure team. They will help you."
- 3:57
Now, this developer will go. Maybe they will talk with this person. Eventually, they will say, "Oh, yeah, of course. This is an error that happens very often. I can solve it just for you."
- 4:07
The error will be solved, then the developer will deploy the application, and then maybe that deployment will succeed, only to realize at the end of it that actually on top of that application, the developer also needed a database or maybe some blob storage.
- 4:23
Back to square one, the developer will go to maybe this person in the infrastructure team to ask, "Hey, could I use you to create this database or this, uh, blob storage for me?"
- 4:35
And maybe the person, let's assume best intentions, of course, maybe they want to help, but they will say, "You know what? I actually have a lot of other things that I'm working on.
- 4:45
I will help you, but that's gonna be next week."
- 4:50
Um, so obviously, the developer will get frustrated because they kinda had done their part, but then they struggled a lot in this process to then deploy the application and to get it running with all of the dependencies that it needs.
- 5:08
Um, perhaps they were following some pieces of documentation, something that someone wrote along the way, but then they were also relying on asking this teammate and asking the person in the other team.
- 5:20
Now, this is a bad situation that again, I think all of us have been at some point. It's a bad situation for a person.
- 5:30
But today, all of us are using LLMs. We're using AI agents to help us in our daily job. And if this situation was tricky for a developer,
- 5:42
this situation is essentially impossible for a machine 'cause the machine is not going to, you know, go and try the pipeline and then go up to the second floor and talk to the person in that other team.
- 5:55
Now, of course, an agent could use Teams or maybe even use something from, um, some voice model and call over the phone. But generally, a coding agent is not going to be able to do all of these things.
- 6:07
So these pain points that the developers were facing suddenly become much more obvious when an agent is facing them, and they are a limiting factor in how productive this coding agent can be or how productive the developer can be when using the coding agent.
- 6:27
And what I'm about to tell you, um, I'm going to address some of the points in this story, but the gist of it is that best practices are still best practices.
- 6:37
We have known for a while that some of these things, like relying on a teammate to tell us how to deploy an application, or having to reach out to a person in a different team, or having to wait for a pipeline only to realize that it wasn't exactly what we needed, they were never good.
- 6:55
They are just much more obvious and perhaps much more painful now that we have these coding agents working next to us.
- 7:03
So what can we do about it? Well, the first thing to me, it has to be self-service.
- 7:11
If I need any resources from this platform, if I need to be able to do anything through these platforms, I should be able to do it in my own.
- 7:20
Similarly, if my agent needs to be able to do anything on the platform, it should be able to do it on its own. There should be no process that requires talking to a specific person or waiting for a specific person to do something.
- 7:39
The agent should be able to trigger everything it needs, and for that, of course, it's also important that this self-service flow or this self-service process is intuitive. Of course, we need to document how these things work, and I will get to that in just a moment.
- 7:58
But the easier that we make it, the more self-service it actually is. Because if, if it is technically self-service, but it requires fetching some building blocks from five different places and putting them together and then triggering a flow somewhere else, then it's not really self-service.
- 8:18
So make it automatic, remove people from the process, and make it easy to the greatest extent possible.
- 8:29
The second point that I think it's important is make it API based. Self-service could look in many different ways, and it could also be something based on sending some, um, text somewhere.
- 8:42
It could be based on clicking a button. It could be based on many things, but agents are good at calling well-defined APIs. It could also be, of course, a CLI on top of the API.
- 8:55
It could be something like an MCP server around the API that the agent uses. All of those are also good ideas. But generally, under all of that, you should have a well-defined API.
- 9:06
This is discoverable, so as it interacts with it, the agent is going to discover what it can do and the options that are there.
- 9:15
It has scheme validation, so naturally, the agent will only send things that are going to work. Um, it also has authentica-- or it can have, depending on what you're building, authentication and authorization in place.
- 9:30
So because of that, your agent will be allowed to use your credentials as a developer. Or maybe if the agent is in a particular flow, it will have its own.
- 9:39
But it will be able to do all of these things in a secure way, and it will know what it's doing. And with this, the agent can go back and forth.
- 9:47
It can try to do something, the API will get a response, and the agent can start working in this way where it goes in a loop until it gets what it needs or what it was asked to do.
- 10:02
Which brings me to my next point. An agent is typically running in your machine.
- 10:08
You could also have it on, uh, some server somewhere, and you might have open claw or something, and you're communicating with an agent there. But typically, an agent is local to the machine.
- 10:19
Of course, the models are running somewhere else, but the work the agent is doing is local. So make it easy for the agent to do that.
- 10:29
First of all, shift left. If something is going to fail, it should fail as soon as possible. So don't make the agent push something to your version control system only to then fail on some workflow after a few minutes.
- 10:45
If you can validate things up front, if you can run them just locally, again, by calling those APIs or maybe using some, some type of wrapper about, around them, do that.
- 10:56
Shift left as much as possible. Then, like I say, the agents are gonna go on a loop. So if the agent is in your machine and it can do everything it needs there, and you clearly define, "This is what I need," the agent is going to iterate until it gets there.
- 11:15
Now, it is important that you give it precise instructions, that you describe the task, that you tell the agent, "This is what I need you to do." And it is also important that you tell the agent, "This is how you know you have succeeded at the task."
- 11:32
This is a bit important when, when working with agents because as humans, we could verify this in different ways. And we have a lot of observability systems where perhaps we would like to check if the application has been, uh, deployed and the metrics are looking fine.
- 11:47
Maybe we will be looking at some dashboards. The agents are not going to be looking at those graphical interfaces. So you also need to think, how does observability look like if the prime user is gonna be an AI agent?
- 12:05
Make those logs, metrics, traces, everything that can help. Available via an API or via CLI or an MCP server or something like that. By doing that, you're letting the agent close the loop.
- 12:20
You're telling it how to do things and how to verify that the things have been done correctly.
- 12:29
And since I'm speaking about telling the agent how to do things, something that is crucially important is documentation.
- 12:38
Of course, you already have documentation. I think many of us have written documentation, uh, have put it somewhere, and then we're unable to find it.
- 12:49
Um, when we need to expose this documentation to agents, but then again, this was already true for humans, we need to be structured around it. So there are different strategies that you might want to take.
- 13:02
One of them could be, especially if you're working in smaller repositories, keep your documentation next to the code it's documenting. That way, if an agent is working in that particular folder or repository, it has everything it needs.
- 13:16
It has the code it needs to work on and the documentation that describes it. If you're working on something bigger or perhaps as a platform team, if you need to expose all of the documentation about the platform that an agent might need,
- 13:31
the better idea is to put it in a centralized place so that the agent can go there and start discovering which documentation is available. Now, once again, think API first
- 13:44
because the agent is gonna be much better at consuming the website by doing that, and specifically, if you can give it the specific bits of, uh, documentation that it needs over API, even better, rather than getting the entire HTML, HTML page in memory and trying to figure out what is the relevant, uh, bits there.
- 14:05
Of course, when we talk documentation, we can also think about, um, agent-specific documentation. And I assume that many of you are already familiar with this, but you can use the agent.md files or claude.md, copilotinstructions.md, depending on, on your agent of choice.
- 14:24
And by doing that, you can also describe the agent, how it should work in a particular repository. You can tell it, "Well, you should always build in this way, test in this way, deploy in this way."
- 14:34
You can verify in this way. You can include all of that in your agents.md.
- 14:40
You can also have one of these more generally applying to different systems and then add, uh, a one, uh, uh, an agents.md more specific to, um, a particular project or repository on top of that.
- 14:54
You can also use skills. If you have some conventions that you're following or some, uh, well-defined way of, uh, interacting with some of your platforms, you can codify those in a skill, which is again, just a markdown document.
- 15:08
And by doing that, you're telling the agent, "When you do this type of task, you should do it like that."
- 15:17
Last but not least, you should also encourage contributions in your platforms. If you're building internal developer platforms, those are going to serve the developers in your organization, and you want them contributing because that way they can also help you.
- 15:33
They can help you help them. Um, so you should encourage them. You should welcome contributions, and because they are using AI agents, the entry barrier is gonna be lower.
- 15:45
And so I would expect, and that's what I have seen, that people are more welcome to contribute to the platforms. Now, of course, this is a lab-- a double-edged sword because ultimately, as the person or the team owning the platform, you are responsible for its maintenance.
- 16:02
So you should think a lot about which things should be taken into consideration when contributing to the platform. You need to have some guardrails thinking about security or compliance or just following a well-defined set of standards that then helps you maintain the platform, um, by virtue of always following those conventions.
- 16:26
You can do this, um, with some policies perhaps in your systems, but you can also just rely on giving context to the agent. Once again, you could, uh, use agents.md.
- 16:39
You could use some skills so that when people want to contribute on your platform, they can also point their agents to these markdown files and refer to those as, uh, as documentation on how to contribute.
- 16:51
Generally, I would encourage a combination of the two. Have guardrails in place for everything that you absolutely don't want to happen. Use some sort of policies for that. But then on top of that, use, uh, these markdown files to help the agents work in the way that you want them to.
- 17:10
And then we get to a very important question, uh, which is, okay, we have done all of these things, right? People are using AI, um, in the organization. They are following now these practices that we have been recommending.
- 17:23
We have built a platform that can be used by AI, but did it work?
- 17:31
And I think the way of knowing if it works is by measuring whether it worked or not. You can of course measure these things before and after, um, making some changes in your platform so that you can see whether they had an effect or not.
- 17:45
And depending on what you want to do, you might want to focus on some type of metrics or on others. Now, we know that there is metrics about application delivery, and we have the whole, uh, DORA, um, metrics on that.
- 17:59
Uh, change frequency, mean time till recovery, um, lead time, and, uh, and another one that I can't, uh, really remember right now. But those metrics are measuring how Often your developers are able to release and how good those releases typically go.
- 18:20
You can also measure reliability. Perhaps that's, um, the main concern. It certainly is in, in fintech institutions. So you can check, okay, are my applications more reliant than they were before?
- 18:32
Am I having less errors than I was having before? Is, um, traffic performing in any different way?
- 18:40
Um, or you might want to look at more platform-specific metrics, such as how many support requests have I got? If people and their agents can do everything on their own because it's self-service, am I then not needed to support them?
- 18:56
Or am I now having more support requests because the way in which I implemented this is confusing?
- 19:02
Um, you can also use some other frameworks about developer, uh, satisfaction and developer experience, such as the SPACE one.
- 19:09
But my general point is think about what you want to achieve with this, making it easier for AI agents to contribute, and then measure whether you actually succeeded at that or not.
- 19:25
And with that, I'll just summarize my advice that once again comes from my experience. There could be more points in this list, but I think this is a good point where to get it started.
- 19:35
If you want to make your platform ready for AI agents so that you can get the most out of them, make sure your platform is self-service, API-based, and local-first.
- 19:47
Make sure you have good documentation and observability in that platform so that it's easy to tell the agent what to do, how to do it, and how to verify it's done.
- 19:58
And encourage welcome contributions to your platform 'cause that way you can also move faster and implement the features that your users need. Last but not least, measure that all of these indeed worked.
- 20:13
And maybe one extra piece of advice. Maybe your organization has been resisting some of these best practices. Maybe you have been trying to push for these API-first platforms or to make them more local friendly or to have the time to write proper documentation.
- 20:31
But then you have gotten some resistance to that because people ha-- were focused on other priorities. Take advantage. Everyone from the executive level to the individual contributors are looking at AI now.
- 20:44
It is a very hot topic. So you can use AI as the excuse to implement some best practices that, again, were always best practices if you didn't have the chance to do it until now.
- 20:58
Thank you very much for listening. My name is Juan Herreros Elorza. Here you have links to my LinkedIn, my personal website, and my GitHub. And if you've liked it, please connect over there.
- 21:08
Thank you, and have a great AI Engineer Europe event.