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
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
“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
Generating random number is really hard. Sometimes there is a bug in the CPU that you’re using. rocksdb.org/blog/2026/02...
RocksDB development finds a CPU bug
This is the story of how a RocksDB unit test I added four years ago, a mini-stress test you might call it, revealed a novel hardware bug in a newer CPU. It w...
rocksdb.org
"The absolute beginners guide to databasemaxxing" pthorpe92.dev/databasemaxx...
pthorpe92.dev
pthorpe92.dev
Monday the 16ths, on the other hand, make you lose sleep on Sunday evenings. 😰
Can’t believe they convinced us that Friday the 13ths are scary. They’re Fridays. The least scary day of the whole week. They are trying to make us turn on everything we love.
80-character line limit so you can review Claude Code output on your VT100 terminal and your phone.
I opened YouTube this week and it recommended the web scale MongoDB video. Metadata says “15 years ago” and that made me feel very old.
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
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.
You might not like it, but I treat the computers I have at home as pets, not cattle.
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.
Google Meet: "no one is here" before you join the meeting but only because it hasn't really loaded the response that lists who is in the meeting.
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.
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
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.
The hidden emotional labour of not judging PR authors' competence because of the LLM-generated slop being submitted for review.
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
Tell me about a testing technique more frustrating than snapshot testing. You can't.