RSSAmplifier

Blog

Thiago Avelino

Recent content on Thiago Avelino

avelino.runRSS feed ↗455 posts

Latest posts

Taste is not a method

zer0 is a browser: WebKit engine, a core in Rust, a native Swift shell, MIT. The repository is new. The problem is not. In March I published firefox-airtraffic , an extension that routes URLs into the Firefox container they belong to, because I wanted one specific thing my browser would not do for me. It solved that one thing and left the rest of the list exactly where it was. zer0 is the rest of…

Open Source Contributions - August 2026

This month (August 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. 2026-08-12 🔀 Opened PR in outlmd/outl : perf!: hold one connection per peer, not one per sync 2026-08-11 🔀 Opened PR in outlmd/outl : feat: finish the in-flight sync when a phone backgrounds 💬 Commented on issue in…

The question has to exist before the code does

I shipped outl's first sync on iCloud Drive knowing I would delete it. Not suspecting. Knowing. iCloud has no Linux, no Android, and no answer for anyone who does not want their notes on Apple's servers. It was never going to be the network outl shipped on. I built it anyway, ran it for a month, then tore it out and put QUIC in its place . Ten years ago that is a stupid way to spend a month. Today…

Absence is the compatibility contract

MCP announced revision 2026-07-28 three days ago. It deletes the initialize handshake and protocol-level sessions. Every request now carries its own protocol version, client identity and capabilities in _meta , and every result carries a resultType . It is the largest breaking change the protocol has had, and the changelog runs long. I maintain mcp , a CLI that turns MCP servers into terminal…

Obcecado por resultado

Sou obcecado por resultado. Em tudo que me proponho a fazer. Demorei pra falar isso em voz alta sem sentir que precisava me desculpar. No negócio, resultado é fazer a coisa acontecer. Crescer, dar lucro, sobreviver. Qual desses depende do momento que a empresa vive, e fingir que não é assim é como os times perdem anos. Repito a mesma frase pro meu time todo ciclo: não quero pessoa que quer pegar…

The model was never the bottleneck

We bought a design studio to make our models better. Buser acquired Designa this week. Nine years ago they built the UX of our first app. The headline is that model quality, not fleet size, decides our next decade. That's the soundbite. It's also not the hard part. The hard part starts after the model is already good. A pricing model outputs a number. An allocation model says move this bus. A…

Open Source Contributions - July 2026

This month (July 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. 2026-07-31 🔀 Opened PR in outlmd/outl : feat: render embedded asset files inline 2026-07-30 🔀 Opened PR in outlmd/outl : feat: support file upload as assets 🔀 Opened PR in avelino/mcp : feat: speak MCP 2026-07-28 without…

Reviewing is not understanding

The most repeated advice about AI-generated code is also the most wrong: treat every line like a PR from a junior you're mentoring. I gave that advice myself . It sounds responsible. It sounds adult. And it ignores the one thing that matters: reviewing and writing do not produce the same knowledge. You can review with all the discipline in the world and still freeze at 3am, unable to reproduce the…

The op log was peer-to-peer the whole time

A month ago I wrote about building outl on the Kleppmann move-op paper . That post ended with a working sync: a terminal client on macOS and an iOS app, converging over iCloud Drive, no server, no merge dialogs. iCloud was a deliberate shortcut, and I want to be honest about that before I bury it. I had one question to answer first: does this CRDT actually converge across real devices, two…

I sold my company and became an employee

I did not need to work again. I have been the CTO of a company I did not found for more than four years. The script is clear. Found, sell, rest. Become an investor, take the stage, found another one. Selling and going back to being an employee is not in the script. It looks like a downgrade. It is not. Selling gave me the one thing a founder thinks they already have and do not: real freedom. Not…

Open Source Contributions - June 2026

This month (June 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. 2026-06-29 🔀 Opened PR in avelino/outl : fix: honour a configured timezone for the journal date and clock 2026-06-28 🔀 Opened PR in avelino/outl : fix: rebuild block docs on demand instead of keeping them resident 🐛 Opened…

Building an outliner on the move-op paper

A few days ago I dissected the 2021 Kleppmann paper on highly-available tree move. The post ended with one open question: can you build an outliner on top of this? I built one. It's called outl . The first version syncs a terminal client on macOS and an iOS app over iCloud Drive. No central server. No merge dialogs. No lost text. This post is everything I had to figure out after the paper.

Big tech veterans don't fail at startups. The structure does

A senior engineer joined Buser from a big tech name. Six weeks in, 1:1, he tells me: 'the scope here is much bigger than what I'm used to.' No drama. No complaint. Just an observation. He was right. And I had told him exactly that in the interview. I tell every candidate from a large company what our rhythm is and what stage we're at. They agree. They sign up. They come in. The shock still hits,…

File sync isn't trivial, and nobody tells you that

You drag a folder in Dropbox and it shows up on your other devices. You move a bullet in Roam and the other computers see the right tree. You rename a file in Logseq and your phone syncs. Looks like a UX detail. It isn't. Underneath, this is a distributed systems problem with no obvious solution, and products with hundreds of millions of users still get it wrong in 2026.

Vinho, terroir e zero amor a rótulo

Comecei a tomar vinho de verdade em 2023. Não pela bebida, pelo estudo . A mesma uva muda de cara dependendo de onde planta. Pinot Noir na Borgonha não é Pinot Noir em outra região da França. Solo, altitude, clima, mão do produtor. Tudo entra. Não tenho amor a rótulo nem a produtor. Quero conhecer o máximo e degustar pra viver a experiência . Fidelidade fecha porta. Lendo Adventures on the Wine…

Most 'AI agents' don't need AI in the loop

I burned through a Claude Max plan in under two hours. First and only time. I was not training a model, generating a dataset, or running an autonomous agent in a loop. I was running my morning schedule. Tech briefing, deploy summary, inbox classification. Five tasks that fit in a fifty-line shell script each. The framework underneath was OpenClaw . Self-hosted, MCP-native, multi-provider, durable…

Mediocrity Is a Choice

Career planning is the most childish thing an engineer can ask a company for. It is the polite way to outsource your own evolution to whoever happens to be paying your salary. Mid-level is not a position you reach. It is a pause that became permanent. And in 2026, AI made that pause expensive enough that you can no longer pretend it is invisible. This is not about layoffs. It is about something…

Vanity Metrics in Engineering, From Lines of Code to AI-Generated Percentages

Garry Tan, CEO of Y Combinator, announced that 25% of Winter 2025 startups had 95% of their code generated by AI. The internet applauded. I read it twice to make sure that was actually the claim. "% of code generated by AI" is a vanity metric. It is not the first one in the history of engineering, and it will not be the last. But it is the first to be narrated publicly by one of the Valley's most…

PM builder doesn't speed up engineering. It kills bad prioritization

A PM on my team opened a PR last week. No heads up, no prior meeting, no PRD. POC code, isolated environment, feature flag closed, synthetic dataset. PR description: "I ran hypothesis X with 30 beta users, metric Y moved Z%, here's the code for you to look at." CI reviewed it in 4 minutes. Engineer approved it in 8. POC went up to a controlled environment the same day.

Technical founders misread adoption - Rogers explained it in 1962 and I ignored it on Pix

Early 2021. My co-founder walks in: "let's add Pix to checkout." My answer, word for word: "let the big players go first and screw it up. If it works for them, we implement." A few months later, there I was, implementing Pix at checkout. Not because I changed my mind - because the market had already decided without me. The technical founder's bias There's a bias technical founders carry that…

Open Source Contributions - May 2026

This month (May 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. 2026-05-30 🐛 Opened issue in avelino/outl : RFC: plugin system — JS plugins, manifest, and packaging 2026-05-29 🔀 Opened PR in avelino/outl : Cross-device sync: TUI + iOS over iCloud Drive 🐛 Opened issue in avelino/outl :…

Flat Engineering Teams Aren't an Org Chart Decision. They're a Maturity Filter

Meta built an AI engineering team with 50 engineers per manager . The Wall Street Journal called it "ultra-flat." André Spicer, from Bayes Business School, was more direct : "it's going to end in tragedy." Both are wrong for the same reason: they treat flat team structure as an org chart decision. Flat team structure is not an org chart decision. It's a cultural consequence. And most companies…

The bug was coordination, not code

Three teams made reasonable decisions. The product broke. That's not an engineering failure - it's what happens when you confuse process with overlap. The postmortem is honest about the wrong thing Anthropic published a postmortem on the Claude Code regression. Worth reading in full. Three separate changes, different teams, different weeks, that together looked like model degradation: Product…

The CTO's job changed. The chair didn't

Every company exists to deliver value. When the way we build, lead, and ship accelerates, the team has to accelerate with it. Holding the hand of someone who doesn't want to walk at the new pace doesn't help anyone. Not the person, who stays in a role that's no longer theirs. Not the team, carrying dead weight. Not the company, paying the price of your omission. Looking out for what's best for the…

AI tools have a cost problem. But it's not the tools

Uber's CTO burned through the company's annual AI budget in four months . 5,000 engineers. Claude Code. An internal leaderboard ranking who uses it the most. Based on what's been reported: no cap, no cost governance. I don't know exactly how it works from the inside - all I have is the public read of the case. And that read tells me a lot about a pattern I see repeating at companies of every size.

The best PMs aren't more skilled. They're more free

In 2014, I had a decision on the table: migrate the video classification pipeline from CPU to GPU using CUDA. The problem was concrete. We processed video at scale - frame extraction with FFmpeg, visual features with HOG (Histogram of Oriented Gradients), classification with SVM. We tested shallow neural networks, but they didn't perform on our volume with the hardware of the time. HOG + SVM was…

Contribute What You Use: Why Real Usage Makes Better Open Source Contributions

There's a pattern I see constantly in open source contributions, and it costs everyone involved more than it should. Someone finds a project. They like the idea. They read the README, skim the codebase, spot what looks like a gap, and open a pull request. The code is clean. The intention is good. The problem: they've never actually used the software. The PR sits in review for a week. The…

The code is yours. All of it

AI generates the code. You sign the commit. That's not a workflow detail — it's the entire conversation we're not having. I use AI to write code every day. Claude Code, Cursor, depending on the context. I'm not here to defend abstinence or pretend the tools don't work — they work, and whoever hasn't incorporated this into their workflow is wasting real time on tasks that don't deserve human…

The governance problem MCP created without asking

My team adopted MCP fast. I encouraged it — the productivity gains were real and visible. Engineers connecting Sentry, Slack, Grafana, GitHub directly into their workflow, no friction. The kind of thing you want to happen organically. Then one day I asked a simple question: who has a Sentry token? Who has Slack? Grafana? The answer was: everyone. Each engineer had generated their own. No…

Your manager doesn't owe you a career

Your manager doesn't owe you a career. Neither does your company, your performance review, or your 1:1. Let me tell you how most stagnation stories begin. Not with a bad manager. Not with a company that doesn't invest in people. It begins with a silent, almost unconscious belief that professional development is someone else's responsibility. You join a company. There's a 1:1 on the calendar. You…

Open Source Contributions - April 2026

This month (April 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. 2026-04-29 🔀 Opened PR in avelino/mcp : Fix homebrew install by hosting tap in main repo 2026-04-27 🔀 Opened PR in prest/prest : Fix JWT auth bypass when default enforcement runs without a key 2026-04-25 ✅ Reviewed PR in…

Product is not a role. It's a moment.

In 2026 I took back ownership of product at Buser. Not as a fallback — as a deliberate choice. For that sentence to make sense, I need to be honest about what happened before. 2022–2023: building under constraint When I took on product at Buser in 2022, the equation was simple to state and brutally hard to execute: cut cost and grow revenue at the same time. The pandemic had shaken the bus travel…

AI companies didn't stop shipping. Why did you stop learning?

Stopping learning is a decision. Just don't call it skepticism. In six months, every major AI company shipped models that were fundamentally more capable — not incremental updates, real capability jumps. And there are still developers who haven't prioritized learning to work differently. That's not healthy skepticism. That's inertia with a philosophy glued on top. What's actually happening There's…

You're not lazy. You were trained to give up

Martin Seligman put dogs in a cage with an electrified floor. When they tried to escape, they couldn't. After a few attempts, they stopped trying. Then he opened the cage door. The dogs didn't move. They lay there, taking shocks, with the exit wide open in front of them. Seligman called this learned helplessness . The organism learns that its actions have no effect — and once it learns that deeply…

Topical Authority: Why You Should Write About the Destination Before Selling the Ticket

In 2020, at the worst moment of the pandemic for the travel industry, Brian Chesky said something in an earnings call that made the SEO internet lose its mind: "What the pandemic showed us is that we can take marketing down to zero and still have 95% of the same traffic as the year before." The SEO community celebrated as if it were a personal win. But Chesky completed the thought in a tweet that…

Open Source Contributions - March 2026

This month (March 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. 2026-03-31 🔀 Opened PR in avelino/roam-tui : add headless sync with ChronDB for block-level versioning 🔀 Opened PR in avelino/chrondb : Register remote transport classes for GraalVM reflection 🔀 Opened PR in…

A CTO's daily life is chaotic by design — what changes is how fast you react

A CTO's daily life has no pattern. On a typical Monday I write a board document, run 1:1s with direct reports, discuss strategy with other C-levels, analyze production crashes, help a data scientist think through an algorithm, and still try to keep processes running. All in the same day. Sometimes in the same hour. If you expect this post to teach you how to organize all of that, close the tab. It…

Open Source como Bem Público: Alemanha e França já entenderam, e o Brasil?

A Alemanha quer reconhecer open source como bem público. A França já dá incentivo fiscal. E o Brasil? O Brasil roda 90% da sua infraestrutura digital em cima de open source e finge que isso nasceu em árvore. Não precisa copiar a Alemanha. Mas precisa que a gente, que vive isso, assuma a responsabilidade de traduzir open source pra linguagem de negócio, de política pública, de impacto real. O que…

Open Source Contributions - February 2026

Explore the contributions made in February 2026, featuring 8 active repositories with notable progress. This timeline outlines key events, including new pull requests, issue openings, and code pushes, reflecting the ongoing development and collaboration within the community. 2026-02-28 🔀 Opened PR in avelino/awesome-go : new layout 🔀 Opened PR in avelino/awesome-go : fix(ci): add safe.directory…

FFI with GraalVM Native Image: The Real Work of Maintaining a Library That Crosses Language Boundaries

Exposing a library via FFI seems simple on paper. You compile your code to .so , export some functions with extern "C" , write bindings in the target language. Done, interoperability achieved. Except that's not how it works in practice. At least not when your lib is a database written in Clojure, compiled with GraalVM native-image, that needs to manage Git and Lucene internally, and will be called…

LLM como Copiloto de Investigação: Debugando Produção com Claude Code e MCPs

Debugar em produção é um exercício de context-switching infinito. Alguém reporta um bug no Slack. Você abre o Honeycomb pra ver traces. Pula pro Sentry pra encontrar exceptions. Volta pro código pra entender o fluxo. Consulta documentação pra lembrar como aquele serviço funciona. Enquanto isso, três pessoas te marcaram em outras threads perguntando "já viu isso?". O problema não é falta de dados —…

ChronDB: Transforming a Clojure Database into a Polyglot Library with GraalVM Native Image and FFI

ChronDB was born as a server . A time-traveling key/value database with Git as its storage engine, exposing PostgreSQL wire protocol, Redis protocol, and REST/HTTP. You'd download the server, run it, connect with your favorite client. Classic architecture. Then I started building spuff — ephemeral dev environments in the cloud. Spin up when needed, auto-destroy when forgotten. Written in Rust. For…

jbundle

Package JVM applications into self-contained binaries. No JVM installation required to run the output. jbundle transforms JVM applications (Clojure, Java, Kotlin, Scala, Groovy) into self-contained binaries. Previously known as clj-pack , the tool was renamed to reflect support for all JVM languages. Motivation The conventional deployment approach requires both the JAR and a JVM on the target…

jbundle: Distributing Clojure Without the GraalVM Pain

If you've ever tried to ship a Clojure CLI tool as a single binary, you know the pain. GraalVM native-image promises native compilation, but the reality is a maze of build-time class initialization, reflection configs, and incompatible libraries. After years of fighting this battle with chrondb and moclojer , I built jbundle — a different approach entirely. The GraalVM native-image tax Coming from…

When Product Breaks, It Breaks Trust

Product breaks. Not because someone was careless, but because reality is ruthless. Systems live inside a web of dependencies, past decisions, and bets that only show their true price when something fails. At some point, what worked yesterday stops delivering today. No warning. No graceful transition. It just stops fulfilling the core promise. When that happens, the most common mistake is to label…

Distribution Is Not a Detail. It Is the Product.

Most products are built as if the problem were a lack of features. More screens, more options, more control. But what kills products is rarely that. What kills them is distance. The product is not where the user lives. A product is not just what you build. A product is what shows up. If the user has to remember that you exist, decide to open something, or step out of their natural daily flow to…

Open Source Contributions - January 2026

In January 2026, a vibrant month of development unfolded across 13 repositories. With a total of 104 contributions, including 47 pull requests and 43 issues, this timeline showcases the collaborative efforts and innovations driving progress in the projects. Explore the significant milestones and contributions made throughout the month. 2026-01-30 🔀 Opened PR in avelino/chrondb : change org: from…

Why complexity steals agility from companies

It takes a while to notice. No company wakes up one day thinking, "That's it, we're slow now." Agility fades quietly, disguised as growth, good intentions, and decisions that made sense at the time. In the beginning, everything is simple. Not because it was well designed, but because it's still small. The system fits in people's heads. You change something today and see the effect tomorrow. You…

Employees don't need to think like owners

They need to think like responsible adults There's a corporate trend that's been annoying me for years: "think like an owner". Sounds pretty on a culture slide, but in practice it usually turns into two things: Employees blaming themselves for not "giving enough"; Companies using guilt and romanticism to squeeze unpaid extra hours. Employees don't need to think like owners. Employees need to think…

Reorganizing a Team Isn't a Crisis: It's Maintenance

Companies treat reorganization like a five-alarm fire. It's bizarre. The engine starts vibrating, the chassis rattles, and everyone insists "it'll pass." It won't. Good teams don't break because you adjust them — they break because you don't. The truth is far less dramatic and far more operational: reorganizing is maintenance. It's the 10,000 km service. It's the fine-tuning that separates a team…