A guide for newcomers to software engineering, and for anyone curious about how LLMs are changing it. Built from interviews with senior professionals from the tech industry. Opening If you are reading this, you probably have mixed feelings about large language models (LLMs). You may have used one and been …
This post explains how I developed Community Maps , a small web app that helps members of a community share their approximate location with each other. Note AI assistance (Opus 4.6) was used for minor edits in this text. Why this project I am currently trying to organize an event …
Introduction It occurred to me that the combination of human operator + AI programming agents forms a system that, if you squint, looks like a computing system. From there, it took me quite a few months to fully verbalize this question: are there fundamental results from theoretical computer science that could …
Introduction One of my favorites experiences of trimming unfruitful work directions thanks to theoretical results happened when I discovered this 2001 article from Jeroen Voeten: On the fundamental limitations of transformational design . For context, when I discovered this article (around 2010), I was working on delivering an “optimizing compiler” for …
This article investigates Message Layer Security ( MLS ), the IETF standard protocol ( RFC 9420) for Signal-style end-to-end encryption. Through a practical analysis of OpenMLS (the Rust reference implementation) and a demonstration CLI chat application (mls-chat), the post reveals the substantial gap between protocol specification and production deployment. Introduction MLS (Message Layer …
Markets work when buyers are well informed. The European Union’s A–G label family is a long-running, quietly radical lesson in how to make that true for everyday decisions.
This post introduces timecond , a TypeScript library I created to represent, evaluate, and describe complex conditions on time ranges. The support for time ranges is what makes it different from many other popular time scheduling libraries that focus on events (points in time). Note In contrast to all my prior …
The elephant in the room, anno 2024 , is that all meaningful interactions currently happen in group chats. People do not trust the traditional world wide web ( WWW ) as much as they trust content coming from their communities: WhatsApp group chats, Telegram channels or groups, Facebook pages/groups, etc. However, there …
This post explores unusual primitive constructs in programming languages, from data-like primitives to somewhat esoteric features. Unusual primitives are interesting because they indicate an attempt by the language designer to help the programmer think in a new way. Acknowledgement: This writeup is a response and followup to Hillel Wayne’s …
Once upon a time, I spent multiple months implementing a graphing calculator using GW - BASIC ( manual ). Would I be able to do the same more quickly and effectively today using generative AI ? ❦❦❦ Let’s give it a go, using Claude AI to start: Implement a simple graphing calculator in GW …
I published an article on the Cockroach Labs Blog: Contextual suggestions for SQL syntax . In this article, I explained how I designed the first version of the “tab completion” engine for CockroachDB. Also available via the Wayback Machine .
I published an article on the Cockroach Labs Blog: Bubbles and sparkles: refreshing our SQL shell . In this article, I explain how I migrated the CockroachDB SQL shell to use the Charm library. Also available via the Wayback Machine .
Let us start this year with the following: Manager’s club - Mega list of 1 on 1 Meeting Questions Superficially, this list (which can also be downloaded in a structured format here ) compiles questions that can be asked during periodic meetings between a manager and their reports. What I like …
Abstract In the Bubbline project we are trying to build readline-like semantics on top of Charm’s Bubbletea . As of Bubbletea v0.23, we discovered this is currently impossible to do in a way that preserves input continuity reliably across readline invocations. This result is general. Any Bubbletea-based program or …
What makes an engineering manager want to improve their people management behaviors & skills? In this document, we will look at various mechanisms through which organizations incentivize good people management, and which levers are available to reports to “manage up” and hold their managers accountable. ❦❦❦ For context, a quick aside: what …
You’re arriving here because you’ve been nominated for a Technical Leadership ( TL ) role in some team. Or perhaps you’re considering applying for one. Note The following document is about the experience of being a TL , and that of evolving into the TL role. It does not detail …
It’s this time of the year again! Maybe it’s called “review”, maybe it’s called “check-in”: the moment in the year where you and your manager sit down together to look at the past period, review the work you’ve done, and discuss directions for the future. In …
In 2020, I published the following two articles: Data flows and security architecture in CockroachDB Authentication configuration in PostgreSQL and CockroachDB The original text was targeting version v20.1 of CockroachDB. This month, I have updated these two pages to reflect the improvements between v20.1 and the upcoming v22 …
After reaching a certain level of seniority, it’s expected that a worker can self-direct in service of the organizational goals. This creates a situation that can be difficult to navigate: is it really self-direction if the organization decides what are the “right” and “wrong” choices in the end? Today …
There are more-or-less “hidden” rules on how to actively progress one’s career in a large-ish corporation. Let’s look at them here. What’s in a role A role on the workplace contains a combination of behavior , skill and responsibility . Behavior is what you actually do. Skill is what …
Say, you’re tasked with onboarding a new teammate, a new co-worker. You don’t know them well yet, but you want them to become effective at what the team does, quickly. You also want to quickly shore up their confidence, if that’s also needed. How to get there …
This document describes why and how a tech company can offer a career path to its engineering technical leaders, that is, different tracks for “deep ICs” versus “broad ICs”. To motivate this evolution, we identify two separate pressure points: from the business, to grow an increasingly skilled and mature technical …
Ever since 2010, I have studied the “meta” of software, by studying (and thinking about) the continued dialogue between programming language designers, computer designers, and programmers. The following constitutes a snapshot of my current thinking. Epistemological context During the period 2008-2012, I was requested to help design&build programming tools …
On September 28, 2021, Melissa Amaya and Jon Purnell from the Data & Dev podcast interviewed me and Aaron Blum, lead engineer of the security team at Cockroach Labs. The focus was to understand what it takes to start in a computer security career , either fresh out of school or via …
On September 28, 2021, Melissa Amaya and Jon Purnell from the Data & Dev podcast interviewed me and Aaron Blum, lead engineer of the security team at Cockroach Labs. The focus was to understand what it takes to start in a computer security career , either fresh out of school or via …
Note The latest version of this document can be found online at https://dr-knz.net/go-executable-size-visualization-with-d3-2021.html . Alternate formats: Source , PDF . Note After a lively discussion on Hacker News and input from Russ Cox, the conclusions in the analysis below were reworded to avoid the notion of “non-useful bytes”. The …
I published an article on the Cockroach Labs Blog: Log and error redaction in CockroachDB v20.2 . In this article, I explain how I designed the log redaction engine in CockroachDB. Also available via the Wayback Machine .
Note The latest version of this document can be found online at https://dr-knz.net/go-errors-vs-exceptions-2020.html . Alternate formats: Source , PDF . Introduction Back in 2018, we compared empirically the performance overheads of Go and C++ with regards to the low-level calling convention: to pass arguments , to return multiple values , and …
Note The latest version of this document can be found online at https://dr-knz.net/go-calling-convention-x86-64-2020.html . Alternate formats: Source , PDF . Introduction Two years ago, this article reviewed the low-level code generation of the Go compiler, as of version 1.10. A few things have changed since, and so an …
The idiomatic way to propagate errors in Go is using the predefined type error . Yet Go’s standard library only provides very rudimentary constructors for error objects, errors.New() and fmt.Errorf() . This article introduces how the CockroachDB errors library , a drop-in replacement to Go’s own errors package, expands …
Go 1.13’s standard library has adopted Dave Cheney ‘s main contribution to error handling from 2015: the idea that Go error objects are structured as linked lists . Alas, this adoption created a giant gap for Go developers: it has become difficult, almost impossible, to make printing error objects …
This writeup is part of the prologue to a series of articles that talk about the “CockroachDB errors library” , which is really a general-purpose, open source replacement for Go’s standard errors package. So, what are we talking about here? The basic Go error API : errors are values The Go …
This writeup is part of the prologue to a series of articles that talk about the “CockroachDB errors library” , which is really a general-purpose, open source replacement for Go’s standard errors package. Consider for example the following piece of code: import "fmt" type T struct { x int } func main …
This article explains how I stopped a software vendor and at least one of its customers from hemorraging $50K+ yearly due to unnecessary costs. ❦❦❦ A recommended best practice in Enterprise security is the “three R’s”: Repair, Repave and Rotate [1] [2] [3] . Repair means applying security patches as soon …
Hillel proposed on Twitter today: “ Expressiveness” is how easily we can ‘do’ things in a system. “Tractability” is how easily we can assert properties on things we ‘do’. F.ex DFAs are tractable, Turing machines are expressive. The expressiveness vs tractability tradeoff is one of the most fundamental in CS …
I published an article on the Cockroach Labs Blog: Nested transactions in CockroachDB 20.1 . In this article, I explain how I implemented nested transactions and SQL savepoints in CockroachDB v20.1. Also available via the Wayback Machine .
Ubuntu 20.04 LTS uses Snap to distribute certain packages by default, including Chromium. This was a mistake and yields dysfunctional systems. Here’s how to fix it. How Remove all installed snaps: for p in $( snap list | awk '{print $1}' ) ; do sudo snap remove $p done Clean up the …
What is faster: a local connection over a unix domain socket , or a local TCP / IP connection with TLS encryption? To a network expert, the answer seems intuitively obvious: the unix socket. But why? And by how much? Moreover, online docs and tutorials for both PostgreSQL and CockroachDB recommend—or …
Both PostgreSQL and CockroachDB provide a little-known gem when it comes to controlling incoming SQL connections: a flexible, versatile configuration DSL for client authentication . In this blog post, I will explain this configuration language , describe several common and some advanced use cases , reveal a few security pitfalls , all the while …
This blog post provides an overview of the data flows inside CockroachDB and its data security architecture. Note This post was originally published in February 2020, targeting CockroachDB v20.1. It was edited in February 2022 to reflect changes in CockroachDB v22.1. A summary of changes is available in …
I like to think about computer security as the science of how things can go wrong with computers. There is so much that can go wrong! In so many different ways! To avoid becoming overwhelmed, computer engineers need a systematic way to think about security, talk about it with each …
“My partner is moving for their job,” “I would like to move out of the city” or “I need to spend some time caring for my relatives,” so would the conversation often start. Then, unavoidably, “and so I am thinking about working remotely.” Then, an awkward silence. My co-workers often …
This week, I collaborated with my friend Martin at Daiteq to add a feature to the UT - LEON3 processor and support it in our variant of the C language called SL . In short, we extended the processors’ thread creation protocol to support a wider variety of synchronization modes, and created …
Specifically, I shifted my use of Slack to become a low-volume, two-times-a-day, asynchronous, opt-in communication medium in my workflow. In doing so, I removed its essence as a chat, always-on app. I stopped using the “Slack” that my industry experiences; only its logo remains. This has had tremendous positive effects …
Note The latest version of this document can be found online at https://dr-knz.net/go-executable-size-visualization-with-d3.html . Alternate formats: Source , PDF . Note Erratum (2019-04-02): The increase in binary size from CockroachDB v1.0 to v19.2 is 94%/125%, not 194%/225% as initially written. The increase in source code …
SQL defines many statements for different things: creating tables, putting data into tables, using tables, between other things. To reason about groups of statements with related behavior, the data community uses common, widely accepted acronyms to designate these groups. For example, the acronym “ DDL ” stands for “data definition language”, the …
Upon our arrival in New Orleans on November 5th, 2018, my friend Nathan explained to me, with a mix of apparent excitement and apprehension: “our internal Jepsen test suite found a real consistency bug .” I replied: “This is great! This confirms yet again that good testing is actually useful! Have …
Note The latest version of this document can be found online at https://dr-knz.net/measuring-errors-vs-exceptions-in-go-and-cpp.html . Alternate formats: Source , PDF . Introduction The following document investigates the performance of signalling errors from functions in Go and C++. In contrast with the previous analyses that focused on a single topic, here …
Note The latest version of this document can be found online at https://dr-knz.net/measuring-argument-passing-in-go-and-cpp.html . Alternate formats: Source , PDF . Introduction The following document investigates the performance of passing arguments to functions in Go, and compare that to C++. This is a follow-up to an earlier article I wrote …