Felipe O. Carvalho

@felipe.rs

SWE @ dbt Labs. Past: SDF, VoDa, Spotify. Apache Arrow/Databases/Compilers/DistSys. Rust/C++/OCaml/TLA+. 🇧🇷 → 🇸🇪 → 🌎 http://bento.me/felipe / https://felipe.rs

Somewhere, Dijkstra is looking down at us renaming everything computer with anthropomorphized names. Assembly — Prompts Sub-routines — Sub-agents and tool calls Recursion/Loops — Loops Control-flow — Graphs Variables — Memory Libraries — Skills

“What fish are able to see bears a close analogy to that degree of awareness which all people have in relation to any new environment created by a new technology—just about zero.” — Marshall McLuhan

An AI agent can’t solve every git conflict adequately. For the hard ones, you would have to prompt it or give it some context about what your team is doing and what goes into the decision. It’s easier to be presented with the git conflict markers and decide by editing the code.

“The reader will not fail to observe that the second problem is more general than the first, and, nevertheless, much easier than the first. In fact, our main achievement in solving the first problem was to invent the second problem.” — George Pólya

In Arrow C++, we have “length” of arrays for the “count” and buffers have “size” in bytes. But things get confusing when STL code is mixed because vector::size() is the length/count and not the “size” in bytes. t.co/ZGkA8xvy8R

Bild

Using Cap’n Proto in Rust to get zero-copy deserialization, but Codex insists on writing de/serialization functions that build a struct full of heap-allocated strings. Because that’s what dominates the training set of model and programmers everywhere.

The year of Linux on the desktop because Windows and macOS window managers are terrible if you're supposed to loop through all the AI agents you're managing at work.

Good time to be CLI maxxing: - @neovim.io - tmux - smug (to start tmux sessions from YAML files) - git worktrees (multiple repo checkouts for parallel agents) - dotfiles in a git repo synced across macOS and Linux machines

Bild

In this new world, by the time a PR is opened, the author should have already reviewed the coding agent’s work. Code review, as we know it, is not going to scale. You can’t get paid to ask an agent for code, open a PR and let the review and refinements be someone’s problem.

In Rust, a &T is not an immutable reference in the common Functional Programming sense. func(&self) is free to mutate atomics or values wrapped in Mutex through self because any other call through an alias to self is going to synchronize the mutations. &T means "you can have other aliases".

I had a professor in CS school that told us "if you worry about hackers, you won't get anything done" when the subject of SQL injection came up. The 2026 version of that is: if you don't give your 1Password to Claude you won't get anything done.

Twitter servers are borked and profile pages say "user x hasn't posted yet" instead of an error message. This is a common pattern everywhere. "You have no flights" before your flight loads in the airline app is very stressful.

Most non-C++ integrations of the RocksDB API rely on the C bindings which will populate a fresh std::string, malloc() and memcpy() on every Get(). You either write custom bindings, or use C++ to get the good perf that RocksDB can give.

Even if PLT folks had the time and energy to productionize their ideas they would burn out growing a community around the language. Nothing seems more offensive to programmers than someone trying to create a programming language with novel ideas.

Putting a PR in the merge queue is so underwhelming. All the work, review, flaky CI restarts ending with a weak promise: it's in the queue and it might get merged. Not a triumphant, immediate, and unequivocal write to main's history.

Writing code is the hard part of software engineering in the sense that once written, the code encodes all the bad and good decisions. The bad decisions increase future risk and requires expensive and careful migrations.

AI companies: 6 months from now, AI is replacing all software engineers. Also AI companies: we can’t afford to do a re-architecting of the app to solve crippling performance issues present in the current version. 🤔

Github didn't really have to implement "AI features" to capitalize on the AI wave. All it had and has to do is to improve its existing features in a world where every team is using AI tools. There will be more code, more PRs, more reviews, more builds… and they can charge for it