RSSAmplifier

Blog

Leo Cavalcante

Recent content on Leo Cavalcante

leocavalcante.devRSS feed ↗43 posts

Latest posts

The next leap in AI software development: from assistance to orchestration

When someone asks what the next trend in AI and software development will be, the easiest answer is to point to another model, another editor, or another promise of code generated from a sentence.

Ontologies for AI agents: the missing contract between model, memory, and tools

An AI agent gets a request such as: “renew the customer contract, but do not exceed the approved budget.” A human sees the hidden knowledge immediately: who the customer is, which document counts as the contract, which budget is current, what renewal means, who can approve an exception, and which system may execute each step.

Excessive Agency Is a Reliability Bug, Not Only a Security Risk

Whenever we talk about excessive agency in AI agents, the conversation quickly becomes a security conversation. That makes sense. An agent with too many tools, too many permissions, and too much autonomy is a neat way to turn a prompt failure into a real action in the world.

When Commits Scale Faster Than Reviews

There is an optimistic reading of the current phase of software development, and part of it is true: more people coding, more repositories, more pull requests, more code reaching production.

Meta Harness: the missing layer in agent engineering

If the Agent Harness is the system around the model, the Meta Harness is the system around harnesses. That distinction looks small, but it changes the architecture. The harness defines how an agent thinks, uses tools, stores state, builds context, asks for approval, and verifies results. The meta harness appears when that no longer fits inside a single agent, a single session, or a single…

Domain-specific agents: composition against the bloated agent

There is a comfortable way to build an AI agent: take a good model, write a large system prompt, connect half a dozen tools, add a few MCP servers, drop in Markdown skills, inject conversation history, and call it a platform.

Evaluating AI Agents Beyond the "Vibes Check": How to Measure What Actually Matters

Your agent nailed the demo and everyone loved it. The product manager smiled, the engineering team applauded, and someone already posted on Slack: “this is going to change everything”. But how do you know it actually works? If the answer is “we tested it and it seemed fine”, you are operating in vibes mode. And vibes don’t scale.

Why Your AI Agent Is a Compulsive "Spender": The Truth About Token Consumption

Introduction: the API bill shock For any developer who has integrated autonomous agents into real workflows, the initial excitement around “zero-touch” automation usually lasts until the first API invoice closes. What begins as a trivial coding task can quickly turn into a financial black hole. Real cases, such as the community report about using the Opus 4.6 model through the API,…

The Agentic Coding Trap: Why the Productivity Promise Is Burning Developers Out

The pace of software development has undergone unprecedented compression. What until recently was simply “programming” is now called trad coding (traditional coding), a process that required writing line by line, respecting the natural flow of problem-solving and the time the brain needs to process logic. Today, that flow has been run over by the rise of AI agents.

When Context Betrays You: Deriving Contexts for Optional Operations in Go

In Go, context.Context is the standard mechanism for propagating cancellation, deadlines , and values across Goroutines and function calls. The general rule is simple: always pass the context forward. But this rule has a subtle trap that can cause bugs that are hard to reproduce, especially when you have optional operations with fallback.

Why Does Your AI Fail? The Secret Is Not in the Model, But in the "Agent Harness"

You have probably experienced this: in one moment, GPT or Claude solves a complex coding problem in seconds; in the next, the same AI forgets basic context or invents nonexistent information. If the “brain” (the model) is the same, why are the results so inconsistent?

Building Real AI Agents with the Copilot SDK in Go

If you follow the GitHub Copilot ecosystem, you have probably heard of *.agent.md files. They are great for simple things, basically a boosted prompt that runs inside Copilot. But when you need a real agent that calls APIs, queries databases, applies permission policies, injects context through RAG, and runs in production as a microservice… Markdown is not enough.

DORA, SPACE, and the Science of Performance in the Age of Agility and AI

The paradox of modern speed We live in the paradox of technical abundance: in the age of Artificial Intelligence, we generate code in minutes, but organizations have never struggled so much to convert that volume into real value. The fatal mistake of modern leadership is believing that coding speed solves the delivery bottleneck. As David Rogers articulates in his thesis on Digital Transformation,…

The Illusion of Sequence: Why Hierarchy Is the Next Leap in AI Inference

The scale paradox There is an efficiency gulf between biological architecture and silicon. While a 12-year-old child already masters the complexities of human language, models like GPT-3 require about 2,000 times more data to reach comparable proficiency. This “Scale Paradox” reveals an uncomfortable truth: we are trying to compensate for the lack of structural logic and efficient…

3 Not-So-Intuitive Principles in Developer Experience (DX)

The productivity paradox Engineering leaders and developers are constantly searching for more productivity. The pressure to deliver faster is relentless, but the paths to achieve that speed are rarely clear. We invest in new tools and processes, often without understanding whether we are actually solving the right bottlenecks or just adding complexity.

Taking AI Engineering to the Next Level with RAG

If you are starting to venture into the world of AI Engineering and want to go beyond the basics, you need to deeply understand what Retrieval-Augmented Generation (RAG) is. This technique is, without a doubt, a turning point for anyone who wants to build AI agents that actually deliver solid results with user- and company-specific data.

Multi-Agent AI Systems: When to Use Them, How to Build Them, and Why So Many Fail

You know when you are trying to solve a complex problem with AI and it feels like a single model cannot handle the job? I have been through that several times. It is like when you ask an AI agent to do several things at once and it simply freezes, takes forever, or gives mediocre answers to everything. That is when I dove deep into the world of multi-agent systems, and man, I learned that this…

One Year of "Golanged"

Exactly one year ago, a commit with the message “Golanged” marked the beginning of a new phase in my career as a developer. It was my first step with the Go language in a professional project, inside a monorepo that I still maintain today. Little did I know that this word, almost a joke, would represent the discovery of a universe of possibilities. Today, I celebrate not only the date,…

Prompt Engineering and Variation Across LLMs

In the world of software development, prompt engineering is emerging as a crucial discipline. The ability to extract accurate and useful responses from Large Language Models (LLMs) has become a competitive advantage. However, one fundamental aspect of this new craft is being largely ignored: the engineering of a good prompt can, and will, silently change depending on the model being used. Many…

Go 1.25: The Main Highlights of the New Version

Go 1.25 was officially released in August 2025, bringing a series of significant improvements for developers. This new version maintains Go’s tradition of compatibility, ensuring that existing code continues to work perfectly while introducing important optimizations and new features.

Swiss Tables: The Secret Behind Go 1.24's Faster Maps

Maps in Go have always been one of the language’s most widely used and optimized data structures. With the release of Go 1.24, they became even faster thanks to the implementation of the Swiss Tables concept.

Weak Pointers in Go 1.24: Understanding and Applying Them in Practice

Go 1.24 introduced a new package called weak , bringing support for weak pointers . These pointers make it possible to reference memory without preventing its collection by the garbage collector (GC) , making them particularly useful for cache optimization and reducing memory leaks .

What's New in Go 1.24

Version 1.24 of the Go language was released in February 2025, bringing a series of improvements and new features that promise to increase developer productivity and optimize application performance. In this article, we will highlight some of the main new features, such as the new tool directive, support for generics in type aliases, the Loop function for benchmark tests, performance improvements,…

Why Go Should Sometimes Be a No-Go?

The Go language was criticized for its simplicity and design philosophy in a recent article called “Why Go Should Sometimes Be a No-Go” , where the author raises some negative points about the language, arguing that its minimalist approach can be a limitation in certain contexts. However, these arguments can be countered with a broader view of Go’s benefits and purposes.

Functional Programming with Golang

Functional programming (FP) has gained popularity in recent years due to its ability to create more expressive, modular code with fewer side effects. Although Go is a language designed primarily for the imperative paradigm, it has several characteristics that make it possible to adopt functional programming concepts. This article explores how to apply functional programming principles in Go…

Go: Style, Decisions, and Best Practices

Google’s style, decisions, and best practices guide for the Go language is a set of recommendations intended to promote clarity, simplicity, and efficiency in code development. These guidelines help developers write readable and maintainable code, which is essential for long-term projects. In this article, we explore the main points covered in these documents, emphasizing the importance of…

Analysis of the Go Developer Survey 2024

The Go Developer Survey is an essential tool for understanding the evolution and challenges faced by developers who use the Go language. The results from the second half of 2024 (H2), conducted between September 9 and 23 with 4,156 respondents, bring valuable insights into developer satisfaction, tooling preferences, technology trends, and everyday challenges.

Go's Values

Since its release in 2009, the Go programming language has won over developers around the world, especially in distributed systems, cloud computing, and DevOps. But what exactly makes Go such an attractive language? Beyond its technical characteristics, it is the underlying philosophy that truly defines what Go represents. This thread on Reddit brought together the core values that shape the…

Code Coverage in Go Tests: Using covdata to Combine Profiles

I think one of my biggest adventures with Go has been working with tests. They changed one of my opinions about the language’s pragmatism: yes, it is still super practical, still very simple and pleasant to program in, but I used to take that idea too lightly, to the point of doing things any which way and without respecting software engineering principles. As the name says, they are…

What is semantic versioning?

Semantic versioning, also called SemVer , is a standard used by developers to number software versions clearly and predictably. It makes it easier to understand which changes happened in the software and what impact those changes have. Basically, SemVer uses a three-number notation in the format X.Y.Z , where each number has a specific meaning.

The importance of Developer Experience (DX) for better software delivery and innovation

In today’s fast-paced, technology-driven world, the success of software-based organizations depends heavily on the performance of their developers . However, developers often face many obstacles, from unclear task requirements to inadequate tools and poor feedback processes. The term “Developer Experience” (DX) encompasses how developers feel, think, and perform their work. A…

Maximizing Goroutine Performance in CPU-Limited Containers

In the ongoing search for efficient and concurrent programming languages, the Go language has stood out for its simplicity, performance, and powerful features. One of Go’s most distinctive features is the concept of Goroutines , which enables efficient concurrent execution of tasks.

Observability with Hyperf and OpenTelemetry

At PicPay, to improve the scalability of our PHP applications, we use Swoole as a high-performance runtime , making applications asynchronous and non-blocking. Starting to use Swoole brought some challenges, and one of them is observability. We will understand more about it later.

Using Bref to run Swoole coroutines asynchronously as AWS Lambda functions

Swoole is about to deliver something very, very cool: its own CLI. You can already start using it with the precompiled binary distributed in Swoole releases at https://github.com/swoole/swoole-src/releases/tag/v4.8.7 .

Using Bref's LambdaRuntime to Asynchronously Run Swoole Coroutines as Functions on AWS

Swoole will be shipping something really-really cool that is it’s own CLI. You can start playing with it using the pre-compiled binary distributed under Swoole’s releases at https://github.com/swoole/swoole-src/releases/tag/v4.8.7 . The trick here, for this project, is: we will be shipping Swoole CLI binary along side with Bref’s LambdaRuntime to provide a custom AWS lambda…

Cloud-native Hyperf

Originally posted by @Reasno at guxi.me/posts/cloudnative-hyperf Hyperf officially provides container images and the configuration options are very open. Deploying Hyperf in the cloud itself is not complicated. Let’s take Kubernetes as an example to make some modifications to the default skeleton package of Hyperf so that it can run gracefully on Kubernetes. This article is not an…

Nano, the Swoole micro-framework that is my new favorite

Inspired by the article about Hyperf by the great @ Leonardo do Carmo (and also by his tip about Hashnode hehe), I decided to stop by and write about Nano , the Swoole micro-framework from the Hyperf folks.

Build a GraphQL API on top of Swoole

I’m assuming you already know what is GraphQL and Swoole , so what about getting started right straight to the code, shall we? What you maybe doesn’t know yet is about Siler ! It is a set of general purpose high-level abstractions aiming an API for declarative programming in PHP.

Music with F#: The Language and the Note

When I’m not in front of a “soup of colored letters” (people say this when they see my screen on VS Code) or “jumpy green text” (yeah, this one is for the terminal); I like to play and study music! Diving into my journey on F#, this is my attempt to mix this new and old passions.

REST API with MongoDB and F# on .NET Core

I have just a couple years in functional programming, just a couple weeks in F# and no background or experience with .NET, so don’t take this as a reference from an expert, it’s just me documenting what I’ve learned so far.

Tutorial: Handling State in Flutter with ReduRx.

One the of the hardest things in development - IMHO - after naming, is handling State, at least handling it reactively without overs (over-building, over-rendering, over-painting and overhead!).

Is Hash/Digest Not Cryptography?

It is common for people to argue that hashing is not cryptography; they do it so vehemently that they ridicule things like “I encrypted it with MD5.” Is it really that wrong to say this?

Type-safe data structures and bananas without gorillas in PHP

I used to love everything about object oriented programming, ignoring everything else, when I finally got it, I thought that every piece of software should be developed using OO and if it is not, it is wrong.