
AI & Backend Engineer
Agents, MCP tools and the Go and TypeScript services they run on. I still write a lot of the code myself.
Staff Engineer AI & Backend @ Hygraph
I've been building backends for about 14 years. At Hygraph I currently work on AI: an MCP server, the service that runs our agents, and everything between them and the content API. Mostly in Go and TypeScript.
· local time in Bonn

My favourite part of the job is when an idea turns into something that runs in production. With AI that got more interesting. You can build a demo agent in an afternoon. Getting one to work on real customer data takes a lot longer.
That's where most of my time goes at the moment. Before that I spent years on GraphQL APIs, Postgres and large e-commerce platforms, and I still like all of that too.

Agents, MCP tools and the Go and TypeScript services they run on. I still write a lot of the code myself.

Close to customers. From the first conversation to a released feature, and I keep it running afterwards.

Deciding where the boundaries between services go, and how to get there in steps.

Coaching engineers and helping product and engineering agree on what comes next.
Roughly what happens when an agent runs on the platform I work on. Most of my work is in the steps around the model call.
A workflow step changes, a webhook comes in, or someone clicks “run” in the editor.
Temporal takes over. Each agent has a coordinator with a fixed number of slots, so a big batch doesn't flood the LLM provider.
The model works through MCP tools, but only the ones that make sense for this one entry. Publishing isn't one of them.
Before writing, the agent asks whether a person is editing the entry right now. If so, it backs off.
Everything one run changed ends up as a single version. A person looks at it and decides whether to publish.
Things I led or shaped over the last couple of years, mostly at Hygraph. What I built is only half of it, so each card also has the decision behind it. None of these were solo projects.
AI clients needed a safe way into customer projects, not a new integration for every use case. I set up the Go MCP server and the rules for adding tools to it: authenticated, scoped to a project, validated input and errors a model can actually work with. Content, schema and migration tools followed on the same contract.
decision
One shared tool contract instead of per-feature integrations. That gives more leverage, but every tool becomes part of the platform's security boundary, so validation isn't optional.
Agents call slow LLM APIs and have to survive deploys and restarts, so plain request/response wasn't going to work. I set up the agent service on Temporal and defined the orchestration and recovery patterns: one coordinator per agent, limited parallelism, retries and cancellation. Later agents reuse them instead of inventing their own.
decision
Take on Temporal as a new dependency in exchange for durable retries, queueing and visibility we'd otherwise build badly ourselves.
Customer-configured agents are only useful if people trust what they do. I worked out the boundary first and then built it across four services: agent config, the tool loop, content versioning and the review UI in the editor.
decision
An agent may only change the entry it was started on and can't publish. All edits of one run become a single version that a person reviews.
Agents shouldn't write into an entry someone is working on. My first design had the agent service read the editor's Redis directly. I changed course to a small API owned by the editor team, so the team that owns the data also decides what it means.
decision
Fail open on timeouts, so an editor outage doesn't stop every agent. Run in shadow mode first and look at what would have been blocked before enforcing it.
A new field type has to mean the same thing in the database, migrations, GraphQL schema, SQL translation and the editor. I split the work into seven separate pieces, so each layer could be reviewed and shipped on its own behind a flag.
decision
Show users the trade-off between exact and approximate search instead of hiding it behind an index that can silently miss results.
Two years setting technical direction for the team behind Hygraph's global GraphQL API, balancing performance, reliability and API stability. That included edge caching with finer invalidation, the move to Aurora, and building our on-call and incident routines.
decision
Change risky infrastructure region by region, with monitoring in place first, instead of one big switch.
Started as an apprentice in 2012, fell for Go along the way and ended up working on AI.
Staff Engineer AI & Backend
2025 – todayHEAD → nowMCP server, agent runtime on Temporal, vector search and the infrastructure underneath.
Staff Engineer Backend & Infrastructure
2024 – 2025Content search with permissions, workflow authorization, autoscaling and keeping observability costs in check.
Engineering Lead · Core
2022 – 2024Led the team behind the GraphQL API. Edge caching, Aurora, on-call and a lot of coaching.
Engineering Lead · Developer Experience
2021 – 2022Reusable content components across data model, API and editor, while the team grew quickly.
Senior Backend Engineer
2021Reworked schema generation so each project needs only one cached GraphQL schema.
Staff Engineer
2024Importing large amounts of customer research and pulling insights and journeys out of it with LLMs.
IT Consultant & Systems Architect
2020 – 2021Architecture group for the e-commerce platform of a large car manufacturer.
Product Owner & Systems Architect
2018 – 2020Worked with the customer for two to three teams, translating priorities into technical work.
Developer → Systems Architect
2012 – 2018Go and Java microservices for large online shops. Taught Go internally until people started using it.
What I've worked with over 14 years. Bigger chips show up more often in my work; click one to see where I used it.
Conference talks, meetups and livestreams on Go, GraphQL, Kafka and building AI agents with MCP.
Dino Omanović is a staff engineer for AI and backend systems, based in Bonn, Germany. He has worked at Hygraph since 2021. Before that he was at TheyDo and spent nine years at Qvest Digital.
AI agent platforms and LLM tooling, Model Context Protocol (MCP) servers, durable workflows with Temporal, GraphQL APIs and PostgreSQL, mostly in Go (Golang) and TypeScript. He has done both hands-on engineering and technical leadership.
Staff-level AI and backend engineering, forward deployed engineering close to customers, architecture across teams, and tech lead roles.
Yes. He has worked fully remotely since 2021 from Bonn (CET) and works in English and German.
At Hygraph: the Go MCP server that lets AI clients work in customer projects, the agent runtime on Temporal, customer-configured agents with human review, and vector fields backed by pgvector. Before that he led the team behind Hygraph's global GraphQL API for two years.
On YouTube: Building an AI Agent with TypeScript and MCP (Hygraph livestream, 2025), Choosing a GraphQL Provider (GraphQL Conf 2022), and several Go talks, including The state of Kafka and Go, Reactive Go and Serverless Go. They are all linked in the talks section.
The easiest way is a message on LinkedIn (linkedin.com/in/dino-omanovic). His code is on GitHub (github.com/domano).