Full Width [alt+shift+f] Shortcuts [alt+shift+k]
Sign Up [alt+shift+s] Log In [alt+shift+l]

ntietz.com blog

ntietz.com blog
Making progress on side projects with content-driven development It's hard to make progress on side projects sometimes. Getting started is easy when we see the...
5 months ago
60
5 months ago
It's hard to make progress on side projects sometimes. Getting started is easy when we see the bright future of the project. Then somewhere in the middle, we get stuck in lists of tasks to do, a long way in and still a long way from the finish line. This happens to me as much as...
ntietz.com blog
What I tell people new to on-call The first time I went on call as a software engineer, it was exciting—and ultimately...
5 months ago
60
5 months ago
The first time I went on call as a software engineer, it was exciting—and ultimately traumatic. Since then, I've had on-call experiences at multiple other jobs and have grown to really appreciate it as part of the role. As I've progressed through my career, I've gotten to help...
ntietz.com blog
Licensing can be joyful (and legally dubious) Software licenses are a reflection of our values. How you choose to license a piece of software says...
4 months ago
57
4 months ago
Software licenses are a reflection of our values. How you choose to license a piece of software says a lot about what you want to achieve with it. Do you want to reach the maximum amount of users? Do you want to ensure future versions remain free and open source? Do you want to...
ntietz.com blog
Reasons to write design docs Sometimes I joke that as a principal engineer, my main programming language is English. It's half...
5 months ago
54
5 months ago
Sometimes I joke that as a principal engineer, my main programming language is English. It's half true, though, since my job is as much about people and communciation as it is about technology. Probably more, actually. Writing is useful at all levels of software engineering. It's...
ntietz.com blog
Rust needs a web framework for lazy developers I like to make silly things, and I also like to put in minimal effort for those silly things. I also...
4 months ago
52
4 months ago
I like to make silly things, and I also like to put in minimal effort for those silly things. I also like to make things in Rust, mostly for the web, and this is where we run into a problem. See, if I want to make something for the web, I could use Django but I don't want that. I...
ntietz.com blog
Asheville Asheville is in crisis right now. They're without drinking water, faucets run dry, and it's...
4 months ago
51
4 months ago
Asheville is in crisis right now. They're without drinking water, faucets run dry, and it's difficult to flush toilets. As of yesterday, the hospital has water (via tanker trucks), but 80% of the public water system is still without running water. Things are really bad. Lots of...
ntietz.com blog
Personnel update This is inspired by receiving a "personnel update" when a friend was fired many years ago. It felt...
5 months ago
51
5 months ago
This is inspired by receiving a "personnel update" when a friend was fired many years ago. It felt coldly impersonal for such a deeply personal event, so I imagined what it would be like if the same approach were taken to other deeply personal events. * * * Subject: Personnel...
ntietz.com blog
Teleportation teleportation does exist from OR to recovery room I left something behind not quite a part of...
4 months ago
44
4 months ago
teleportation does exist from OR to recovery room I left something behind not quite a part of myself —unwelcome guests poisoning me from the inside no longer welcome
ntietz.com blog
Using search as a primary datastore since the docs said not to Look, I'm sorry, but if the docs say not to do something that's like catnip. Then I just have to do...
6 months ago
41
6 months ago
Look, I'm sorry, but if the docs say not to do something that's like catnip. Then I just have to do it. So when I saw that the Typesense docs say not to use it as a primary datastore? Well well well, that's what we'll have to do. I spent a little bit of time figuring out what a...
ntietz.com blog
Sometimes, I can't talk Part of being a social animal is that we communicate with each other. We live in a society, and we...
6 months ago
35
6 months ago
Part of being a social animal is that we communicate with each other. We live in a society, and we have to interact with other people. A lot of that communication happens through language, especially spoken and signed language. For many of us, this language happens so freely and...
ntietz.com blog
You should make a new programming language Every software engineer uses a programming language, usually multiple. Few of us make programming...
6 months ago
33
6 months ago
Every software engineer uses a programming language, usually multiple. Few of us make programming languages. This makes sense, because the work we need to get done can typically be done just fine in the languages that exist. Those already have people making them better. Let's...
ntietz.com blog
First impressions of Gleam: lots of joys and some rough edges My friend Erika is a big fan of Gleam, and her enthusiasm (and explicit encouragement) finally got...
6 months ago
32
6 months ago
My friend Erika is a big fan of Gleam, and her enthusiasm (and explicit encouragement) finally got me to learn the language. It's a functional programming language which targets both the BEAM (Erlang's VM) and JavaScript. This makes it appealing as a language that can target both...
ntietz.com blog
TIL: testing in the future using the faketime command Last week's blog post accidentally got published a few hours early1. One of the keen-eyed among you...
7 months ago
31
7 months ago
Last week's blog post accidentally got published a few hours early1. One of the keen-eyed among you even submitted it to the orange site before it was officially up, since it was in my RSS feed briefly and was picked up by various RSS readers. Resolving that issue led me to...
ntietz.com blog
Integrate rest into your work and practice The human body has limits, and we break down if we push past them. This can contribute to burnout,...
6 months ago
28
6 months ago
The human body has limits, and we break down if we push past them. This can contribute to burnout, lead to stress fractures, or cause a host of other issues. We need to give our bodies time to rest so that we can heal. This is something we often resist, but it's essential. And...
ntietz.com blog
Testing a WebSocket that could hang open for hours I recently ran into a bug in some Go code that no one had touched in a few years. The code in...
7 months ago
26
7 months ago
I recently ran into a bug in some Go code that no one had touched in a few years. The code in question was not particularly complicated, and had been reviewed by multiple people. It included a timeout, and is straightforward: allow a Websocket connection to test that the client...
ntietz.com blog
Approximating the Sierpinski Triangle on my CNC One of my big hobbies outside of tech is chess. I like to play it, and I also help run our town's...
7 months ago
25
7 months ago
One of my big hobbies outside of tech is chess. I like to play it, and I also help run our town's chess club. As part of that, we like to run rated tournaments to get our members some experience in a low-pressure tournament environment. These are my responsibility to organize and...
ntietz.com blog
Resting is hard This post has been a struggle to write. Not just because it requires a lot of vulnerability, though...
7 months ago
24
7 months ago
This post has been a struggle to write. Not just because it requires a lot of vulnerability, though that's part of it. And it's not just about finding the right words. Most of the struggle has been fatigue. It's hard to find the energy to open my text editor and when I do, my...
ntietz.com blog
TIL: 8 versions of UUID and when to use them About a month ago1, I was onboarding a friend into one of my side project codebases and she asked me...
7 months ago
23
7 months ago
About a month ago1, I was onboarding a friend into one of my side project codebases and she asked me why I was using a particular type of UUID. I'd heard about this type while working on that project, and it's really neat. So instead of hogging that knowledge for just us, here it...
ntietz.com blog
Why I kept my startup job for seven years (and counting) Software engineers typically don't stay anywhere for very long. If you're not moving, you're losing...
7 months ago
22
7 months ago
Software engineers typically don't stay anywhere for very long. If you're not moving, you're losing out on opportunities1. And yet, I've made the choice to join and stay at one company for seven years. That's more than half my career to date. Why did I do that? And would I do it...
ntietz.com blog
If it never breaks, you're doing it wrong When the power goes out, most people are understanding. Yet the most livid I've seen people is when...
8 months ago
22
8 months ago
When the power goes out, most people are understanding. Yet the most livid I've seen people is when web apps or computers they use have a bug or go down. But most of the time, it's a really bad sign if this never happens1. I was talking to my dad about this recently. For most of...
ntietz.com blog
Profiling Rust programs the easy way Performance is one of the big reasons to use Rust. It's not a magic wand for performance, it just...
a year ago
22
a year ago
Performance is one of the big reasons to use Rust. It's not a magic wand for performance, it just gives you the control to eke out whatever performance you need. So if your program is still slow, how do you fix that? Profiling your program is one of the best options for figuring...
ntietz.com blog
My portable ergonomic setup In 2022, I developed nerve pain in my arms. It came on quickly, and it was bad: I couldn't drive, I...
8 months ago
21
8 months ago
In 2022, I developed nerve pain in my arms. It came on quickly, and it was bad: I couldn't drive, I couldn't type, and at the worst I couldn't pick up our kids. That episode spontaneously resolved after a couple of months, but flareups happen occasionally. One guaranteed trigger...
ntietz.com blog
A student asked how I keep us innovative. I don't. Last week, I did a Q&A session for a friend's security class. One of the students asked a question...
a year ago
20
a year ago
Last week, I did a Q&A session for a friend's security class. One of the students asked a question that I loved. They asked something like, "As a principal engineer, how do you make sure your company stays at the forefront of innovation?" There are two reasons I love this...
ntietz.com blog
A systematic approach to debugging I've got a reputation at work as being a skilled debugger. It's a frequent occurrence that the weird...
a year ago
18
a year ago
I've got a reputation at work as being a skilled debugger. It's a frequent occurrence that the weird stuff lands on my desk1 after it goes through another skilled engineer or two. To say my job is substantially "debug the weird shit" would not be an understatement and I'm here...
ntietz.com blog
Using git mailmap when names change (or you mess up your email) People change their names for all sorts of reasons. They get married, they transition, or they just...
a year ago
18
a year ago
People change their names for all sorts of reasons. They get married, they transition, or they just decide a different name better suits them. When this happens, things break. Recently I talked about how email address changes break things. Today it's how to fix this issue with...
ntietz.com blog
Why Rust's learning curve seems harsh, and ideas to reduce it I've been thinking about the learning curve for Rust lately, and why it feels so hard to learn. I...
over a year ago
18
over a year ago
I've been thinking about the learning curve for Rust lately, and why it feels so hard to learn. I think the reason is because the complexity is all front-loaded, and the resources generally don't actively reduce that front-loading1. There are two well-trod paths for learning...
ntietz.com blog
Automating my backups with restic and anacron I've been running my backups by hand1 every week on my laptop for as long as they've been set...
a year ago
18
a year ago
I've been running my backups by hand1 every week on my laptop for as long as they've been set up. Automating them was something important but was on the back burner, because, well, it never felt very important. Then I lost a few days of work when my SSD died, and it felt more...
ntietz.com blog
I'm scared, and hopeful, and you can help Tomorrow, I'm boarding an airplane to attend a work event. It's my first time flying since 2018, and...
a year ago
17
a year ago
Tomorrow, I'm boarding an airplane to attend a work event. It's my first time flying since 2018, and I'm excited to meet all my coworkers in person. The travel is, on whole, going to be a good experience. But there is a lot surrounding the travel that is stressful and scary. I'm...
ntietz.com blog
Gmail's "Smart Compose" feature should be considered harmful In 2005, I got my invite to get a Gmail account. It was incredible, and I loved it, although I...
over a year ago
17
over a year ago
In 2005, I got my invite to get a Gmail account. It was incredible, and I loved it, although I didn't really know why at the time. It was a combination of really great design so it was pleasant to use, the hype built up by the invite system, the perpetual feeling of getting...
ntietz.com blog
The origin and virtues of semicolons in programming languages While working on the grammar for my programming language, Lilac, I was exploring different choices...
10 months ago
17
10 months ago
While working on the grammar for my programming language, Lilac, I was exploring different choices for statement terminators. . is very appealing, or !. Ultimately, I might make the "boring" choice of using either ; or significant whitespace. But that had me asking: why is it...
ntietz.com blog
Affirmations for bloggers Every software engineer can have a great blog, if they want to. Many of us start blogs, but most of...
8 months ago
17
8 months ago
Every software engineer can have a great blog, if they want to. Many of us start blogs, but most of those blogs lie abandoned or sporadically updated. It's okay if you start blogging and figure out it's not really for you. But there are also some common issues that block people...
ntietz.com blog
In Defense of the Midwest As an undergraduate, I always imagined that I would someday move to the SF Bay Area to live in the...
over a year ago
17
over a year ago
As an undergraduate, I always imagined that I would someday move to the SF Bay Area to live in the heart of the software industry. With this in mind, in my final semester at Kent State, I joined a Silicon Valley startup as their third engineer1. The staff at that time was split:...
ntietz.com blog
Names should be cute, not descriptive A long-standing debate between me and a peer at work has been how we should name services. His...
over a year ago
17
over a year ago
A long-standing debate between me and a peer at work has been how we should name services. His position was always that services should be named something descriptive, so that you can infer from the name what it does. My position is that the name should definitely not be...
ntietz.com blog
The only two log levels you need are INFO and ERROR Logging is a critical tool for maintaining any web application, and yet we're getting it wrong. With...
10 months ago
16
10 months ago
Logging is a critical tool for maintaining any web application, and yet we're getting it wrong. With great logs, you can see what your application is doing. And without them? Things can be broken left and right without you ever finding out. Instead, you wonder why your customers...
ntietz.com blog
Instead of "auth", we should say "permissions" and "login" Most computer systems we interact with have an auth system of some kind. The problem is, that...
9 months ago
16
9 months ago
Most computer systems we interact with have an auth system of some kind. The problem is, that sentence is at best unclear and at worst nonsense. "Auth" can mean at least two things: authentication or authorization1. Which do we mean for an "auth system"? It's never perfectly...
ntietz.com blog
I found some of my first code! Annotating and reflecting on robotics code from 2009. In high school, one of my teachers shattered my plans for my life, in the most beautiful way. Most...
a year ago
16
a year ago
In high school, one of my teachers shattered my plans for my life, in the most beautiful way. Most of my life, I'd intended to become a math professional of some sort: a math teacher, when that was all I saw math for; an actuary, when I started to learn more; and then a...
ntietz.com blog
Write more "useless" software After my last blog post about Hurl, someone asked me, and I quote: "... why?" The simple answer is...
a year ago
16
a year ago
After my last blog post about Hurl, someone asked me, and I quote: "... why?" The simple answer is "for the joke." But the longer answer is that useless software1 is a fantastic way to explore and experience the joy of computing. Play is an important part of exploration and...
ntietz.com blog
Your app doesn't need to know my gender So often when we sign up for an application, it asks us for our gender, sex, or title. For example,...
a year ago
16
a year ago
So often when we sign up for an application, it asks us for our gender, sex, or title. For example, there is a cycling app called Zwift which I use to ride indoors. When you sign up, you enter your gender. On the app, they say that you need to be honest because it impacts...
ntietz.com blog
RC Week 6: Halfway done, wrote a parser! I'm halfway done with my RC batch now. Time feels like it has sped up. The feeling that my time at...
over a year ago
16
over a year ago
I'm halfway done with my RC batch now. Time feels like it has sped up. The feeling that my time at RC is infinite is gone. This was compounded by seeing folks from the Fall 1 batch conclude their batches yesterday. We'll get a new boost from the Winter 1 batch joining on Monday,...
ntietz.com blog
My reference was dropped, why is the compiler complaining about multiple borrows? Recently someone I was talking to ran into a fun borrow checker problem in Rust which is...
a year ago
16
a year ago
Recently someone I was talking to ran into a fun borrow checker problem in Rust which is illustrative of some current underlying limitations of Rust's borrow checker. The problem boiled down to: they took a reference in a loop (dropped on each iteration), and the borrow checker...
ntietz.com blog
Avoid multitasking to write better code Multitasking is incredibly alluring. Why go slowly, doing one thing at a time, if you could get a...
over a year ago
16
over a year ago
Multitasking is incredibly alluring. Why go slowly, doing one thing at a time, if you could get a second thing done? Why not fill those five seconds while your code compiles with reading an article about the latest web frameworks? In fact, multitasking is hiding everywhere in...
ntietz.com blog
Accessibility is a requirement, not a feature Stop me if you've heard this one before: "We're putting accessibility (features) on the roadmap." Or...
a year ago
16
a year ago
Stop me if you've heard this one before: "We're putting accessibility (features) on the roadmap." Or this one: "We don't need to make it accessible since we don't have any blind users 1 ." It belies an attitude that's all too common in the software industry: That accessibility...
ntietz.com blog
Reflecting on 2022, Looking Ahead to 2023 This is one of those cliched posts: Reflection on the year that's ending, and talking about goals...
over a year ago
16
over a year ago
This is one of those cliched posts: Reflection on the year that's ending, and talking about goals and whatnot for next year. They're cliche, but they're also useful. The planning and reflecting process is a useful one, and sharing openly means other people can come along and...
ntietz.com blog
Parallel assignment: a Python idiom cleverly optimized
over a year ago
ntietz.com blog
Starting my (overkill) homelab I've set up a homelab finally! This is something I've wanted for a while and finally the timing was...
over a year ago
16
over a year ago
I've set up a homelab finally! This is something I've wanted for a while and finally the timing was right. The right project came along to justify it, so I took the plunge. Naturally, that leads to a few questions: What's a home lab? Why do you want one? And what is the shiny...
ntietz.com blog
Where are we going from here? Software engineering needs formal methods The job of a software engineer is not to produce code, but to solve problems; we just happen to...
over a year ago
15
over a year ago
The job of a software engineer is not to produce code, but to solve problems; we just happen to solve most of those problems by producing code. Ultimately, producing code is hard, and we need help. That's why GitHub's Copilot is exciting, but it's far from ideal, and it's the tip...
ntietz.com blog
The phrase "good enough" isn't fit for purpose Words matter. First impressions matter. I'm reading The Pragmatic Programmer in a book club, and...
a year ago
15
a year ago
Words matter. First impressions matter. I'm reading The Pragmatic Programmer in a book club, and there's a section titled "Good-Enough Software". In it, the authors expand that "the phrase 'good enough' does not imply sloppy or poorly produced code" and that it must still meet...
ntietz.com blog
Coding with LLMs can lead to more and better software We are in the early days with a new technology. There is a lot of hype around LLMs, and takes on...
a year ago
15
a year ago
We are in the early days with a new technology. There is a lot of hype around LLMs, and takes on every end of the spectrum. Some predict that programmers will be out of a job sooner than later. Others predict that these will just contribute to spam. Today I'd like to focus on one...
ntietz.com blog
"Help, iterators made my Rust program slower!" Recently in a programming community I belong to, someone presented a problem. They had a Rust...
a year ago
15
a year ago
Recently in a programming community I belong to, someone presented a problem. They had a Rust program which was using threads and for loops. When they updated the code to use iterators, it got dramatically slower. Why did this happen? For a Rust veteran, the problem might not be...
ntietz.com blog
Feature flags and authorization abstract the same concept When I think of feature flags and authorization, I usually think about very different things. They...
a year ago
15
a year ago
When I think of feature flags and authorization, I usually think about very different things. They are used for different purposes. But ultimately, they are abstractions of the same thing. They might even be the same thing except for how they are used and the consequences for...
ntietz.com blog
A systems design perspective on why chess.com's servers have been melting January 2023 was a rough month if you wanted to play chess on the most popular chess website,...
over a year ago
15
over a year ago
January 2023 was a rough month if you wanted to play chess on the most popular chess website, chess.com1. Their service has been experiencing an unprecedented amount downtime because of a huge influx of users2. There have been days where it's all but unusable. It's frustrating as...
ntietz.com blog
What's hidden behind "just implementation details" Something I hear occasionally from some software people1 is something along the lines of: "Well, the...
8 months ago
15
8 months ago
Something I hear occasionally from some software people1 is something along the lines of: "Well, the hard part is figured out, and the rest is just implementation details." This typically means they've created an algorithm to do something, and the rest of it is all the supporting...
ntietz.com blog
Running an Effective Book Club at Work Even with the wealth of information on web sites and in videos, books remain a great resource for...
over a year ago
15
over a year ago
Even with the wealth of information on web sites and in videos, books remain a great resource for learning. And they're great for group learning, too! We've run a book club at work a few times. Some sessions were more successful than others. The main way our book clubs faltered...
ntietz.com blog
A few weird ways of displaying git hashes I was reading "Real-World Cryptography" and ran across an thought-provoking statement. While talking...
a year ago
15
a year ago
I was reading "Real-World Cryptography" and ran across an thought-provoking statement. While talking about why hashes are often represented in hexademical, the author states (emphasis mine): There are other ways to encode binary data for human consumption, but the two most widely...
ntietz.com blog
RC Week 5: Wrapping up projects and starting a new one Another week of my RC batch wraps up. I'm done with five weeks, and seven weeks are left! Time is...
over a year ago
15
over a year ago
Another week of my RC batch wraps up. I'm done with five weeks, and seven weeks are left! Time is still flying by, and I've hit an inflection point. I have gotten what I want out of the two projects I've worked on so far, so I'm going to wrap them up and move on to one new...
ntietz.com blog
What would a web app canary look like? Recently, I listened to an interview with Haroon Meer, the founder of a company focused on...
a year ago
15
a year ago
Recently, I listened to an interview with Haroon Meer, the founder of a company focused on honeypots. Honeypots (also known as canaries or tripwires) are used to detect network intrusions and people nosing around at things they're not supposed to. They are an essential component...
ntietz.com blog
return "reflections on a batch"; There's a tradition at Recurse Center of writing a Return Statement after your batch. I'm not sure...
over a year ago
15
over a year ago
There's a tradition at Recurse Center of writing a Return Statement after your batch. I'm not sure of the origin of the terminology, but it seems like it's a pun on the return statement in programming languages. It's a great tradition, and it gives me a good motivator to reflect...
ntietz.com blog
Alpha-beta pruning illustrated by the smothered mate I've been working on Patzer, a chess engine, during my time at RC. The first engine-like thing I...
over a year ago
15
over a year ago
I've been working on Patzer, a chess engine, during my time at RC. The first engine-like thing I implemented for it was alpha-beta pruning, which is a way of pruning out branches of the search tree to significantly speed up search. This is a common algorithm, which I also...
ntietz.com blog
Fight Burnout, Go For a Run Here's something we don't talk about enough: burnout sucks and it can happen to any one of us. We...
over a year ago
15
over a year ago
Here's something we don't talk about enough: burnout sucks and it can happen to any one of us. We need to talk about it. We need to know how to deal with it and recover from it. And we need to recognize that everyone can come back from it, stronger than ever. In the software...
ntietz.com blog
RSA is deceptively simple (and fun) While reading Real-World Cryptography, I came across the "million message attack". This is an attack...
a year ago
15
a year ago
While reading Real-World Cryptography, I came across the "million message attack". This is an attack that Daniel Bleichenbacher demonstrated in 1998, which effectively broke RSA with a particular encoding function called PKCS #1. It was only mentioned briefly, so I dug in and...
ntietz.com blog
Solving my fun, frustrating docker-machine error Last Saturday, I ran into a problem doing a routine backup of a web app I maintain. In fact, this...
over a year ago
15
over a year ago
Last Saturday, I ran into a problem doing a routine backup of a web app I maintain. In fact, this was the second time I ran into the exact same issue, so it's time to write it down. (Hopefully, the third time I run into this, I have the presence of mind to look up my own...
ntietz.com blog
Paper Review: Architecture of a Database System Last week, I read "Architecture of a Database System" for a Red Book reading group. This is as...
over a year ago
15
over a year ago
Last week, I read "Architecture of a Database System" for a Red Book reading group. This is as massive paper: 119 pages. What surprised me is how approachable it is. I have relatively little background building database systems and more experience using them. Despite this, the...
ntietz.com blog
RC Week 8: Life happens, and databases are hard I'm two-thirds of the way done with my RC batch now. Eight weeks down, four weeks to go. The last...
over a year ago
15
over a year ago
I'm two-thirds of the way done with my RC batch now. Eight weeks down, four weeks to go. The last two weeks have been difficult for me because of life happening. Week 7 was hard because I had some travel to help my parents, and that just takes me out of my routine and is...
ntietz.com blog
On Estimates, Time, and Evidence Here's an exchange that's pretty common: "How long will that take?" "A few days." I run into this...
over a year ago
15
over a year ago
Here's an exchange that's pretty common: "How long will that take?" "A few days." I run into this all the time with clients - they have real business needs to know how long something will take and what the risks are with any given project. So, we are asked to give estimates of...
ntietz.com blog
Why do companies hire people to be idle a lot of the time? The biggest tech companies employ a lot of engineers. In 2021, Microsoft employed over 100,000...
a year ago
15
a year ago
The biggest tech companies employ a lot of engineers. In 2021, Microsoft employed over 100,000 software engineers. That is just mind boggling scale to me. It's roughly as many people as the whole county I grew up in. They are paying a lot of engineers. Some of them do very...
ntietz.com blog
RC Week 4: Gratitude and emotions Wow, my RC batch is one-third done. I've just finished my fourth week, and there are eight weeks...
over a year ago
15
over a year ago
Wow, my RC batch is one-third done. I've just finished my fourth week, and there are eight weeks left. Time is flying by. I feel like I've settled into a decent groove. Taking a step back, it is setting in how much I've learned so far and how much I've accomplished. In these four...
ntietz.com blog
Introducing Hurl, a terrible (but cute) idea for a language Sometimes we have ideas that are bad but demand to enter reality. A few months ago, while chatting...
a year ago
15
a year ago
Sometimes we have ideas that are bad but demand to enter reality. A few months ago, while chatting with a friend, we toyed around with the idea of a language where the only control flow you get is error handling. This idea embedded itself in my brain and wouldn't let me go, so I...
ntietz.com blog
What's in my software engineering tool belt? One of my favorite things is reading about the tools other people use, and talking about the tools I...
over a year ago
15
over a year ago
One of my favorite things is reading about the tools other people use, and talking about the tools I use. When I read a post recently about a data journalist's data tool belt, well... I knew I'd have to share my own software engineering tool belt, too. So, here's my software...
ntietz.com blog
Approximating pi using... a cake? Happy Pi Day, fellow nerds! This is a holiday I've celebrated every year since at least 2010, and...
a year ago
15
a year ago
Happy Pi Day, fellow nerds! This is a holiday I've celebrated every year since at least 2010, and I'm not stopping anytime soon. The celebrations have evolved. It used to be just "bake a pie" and "haha pi, pie". Over time, I twisted it a bit (pizza is a pie of sorts! a cake with...
ntietz.com blog
You should be using hackdays to supercharge your roadmap Internal company hack days (or hack weeks) are a common thing in tech companies, but not...
a year ago
14
a year ago
Internal company hack days (or hack weeks) are a common thing in tech companies, but not universal. They should be universal, though. Hackdays help you get great new ideas that are both impactful and feasible. They're probably the best thing you can do to improve your product and...
ntietz.com blog
Paper review: C-store It's that time again: I read another paper, and here's what I took away from it! This week I read...
over a year ago
14
over a year ago
It's that time again: I read another paper, and here's what I took away from it! This week I read "C-store: a column-oriented DBMS" from chapter 4 of the Red Book. This one I picked since I thought it would be helpful for the chess database I'm working on, and it does seem...
ntietz.com blog
RC Week 2: Pairing is Awesome The second week of my batch at Recurse Center (RC) is a wrap, and it already feels like it's going...
over a year ago
14
over a year ago
The second week of my batch at Recurse Center (RC) is a wrap, and it already feels like it's going too quickly. My batch is twelve weeks long, so I'm 17% through. Only ten weeks left! This is a precious time, so I'm trying to make the most of it, but also trying to not increase...
ntietz.com blog
RC Week 11: Learning is best when multiplayer As I come up on the end of my batch at Recurse Center, I've been doing some reflecting on my time...
over a year ago
14
over a year ago
As I come up on the end of my batch at Recurse Center, I've been doing some reflecting on my time here. One of the standout themes is how much I've learned through struggling with other people. In particular, this learning together has make some difficult topics approachable,...
ntietz.com blog
Paper review: The Gamma Database Project Last week, I read "The Gamma Database Project" for a Red Book reading group. Unlike the last paper...
over a year ago
14
over a year ago
Last week, I read "The Gamma Database Project" for a Red Book reading group. Unlike the last paper for this group, this one was a lot more approachable in length: 19 pages. I'm putting up some of my notes here from reading the paper. If you read through to the end, there's...
ntietz.com blog
Paper review: Concurrency Control Performance Modeling Another week, another paper! This week for our Red Book reading group, I read "Concurrency Control...
over a year ago
14
over a year ago
Another week, another paper! This week for our Red Book reading group, I read "Concurrency Control Performance Modeling" by Rakesh Agrawal, Michael J. Carey, and Miron Livny. It was 46 pages, and I had a little trouble finding the whole paper—many of the Google Scholar links had...
ntietz.com blog
Visualizing the FIDE World Chess Championship This week is Never Graduate Week at the Recurse Center, where alumni come back to do Recurse-y...
a year ago
14
a year ago
This week is Never Graduate Week at the Recurse Center, where alumni come back to do Recurse-y things together. It's a great experience and I've had a lot of fun reconnecting with friends and meeting some new friends. But it wouldn't be an RC experience without working at the...
ntietz.com blog
[Review] "Data and Goliath" by Bruce Schneier I just finished reading Bruce Schneier's latest book, "Data and Goliath." I was apprehensive at...
over a year ago
14
over a year ago
I just finished reading Bruce Schneier's latest book, "Data and Goliath." I was apprehensive at first -- I'm a big fan of Schneier's posts online, but I found this randomly at the library and I was hoping not to be disappointed. In the end, it was well worth the read. The book...
ntietz.com blog
Introducing Yet Another Rust Resource (or YARR!) Rust is a hard language to learn, in the scheme 1 of things. I've previously talked about why...
a year ago
14
a year ago
Rust is a hard language to learn, in the scheme 1 of things. I've previously talked about why the learning curve is hard and what we could do about it. Today, I'm proud to say that there's another resource to help people learn Rust in a more approachable way. Introducing Yet...
ntietz.com blog
Writing a basic code formatter I've been working on my programming language for a couple of months now, in fits and starts1. In the...
a year ago
14
a year ago
I've been working on my programming language for a couple of months now, in fits and starts1. In the original post, I laid out my plan for it, and after creating the parser the next step was writing a formatter. I thought this would be a nice intermediate step after writing the...
ntietz.com blog
What's the difference between references and pointers in Rust? I've been working on writing a Rust training course, and one of the things I struggled with...
over a year ago
14
over a year ago
I've been working on writing a Rust training course, and one of the things I struggled with explaining in there was the difference between references and pointers. Ultimately, the underlying representation is the same: both hold an address for some memory. The difference between...
ntietz.com blog
The Beginning of Something It seems like everyone in the software industry goes through a blogging phase. This is the beginning...
over a year ago
14
over a year ago
It seems like everyone in the software industry goes through a blogging phase. This is the beginning of mine. I have started this blog time and time again over the last three years. My original inspiration for having a technical blog came from one of my mentors at my internship....
ntietz.com blog
Functional Programming and Big Data Update: I wrote this while preparing a talk for the Columbus Functional Programmers meetup. You can...
over a year ago
14
over a year ago
Update: I wrote this while preparing a talk for the Columbus Functional Programmers meetup. You can find the talk on YouTube. It has more humor than these words, but then you'd have to listen to my voice. This post is a long one, so here’s a brief roadmap. We’ll start with a...
ntietz.com blog
Drawbacks of developing in containers It seems like everyone these days is developing in containers. Specifically, I mean running your...
over a year ago
14
over a year ago
It seems like everyone these days is developing in containers. Specifically, I mean running your local development environment almost entirely in containers. There's a lot to be said for it, especially when you're bringing new developers into a project: it can be an invaluable...
ntietz.com blog
Where is the source code for ping? Lately, I've been working on implementing ping on my own as a project to keep learning Rust and to...
over a year ago
14
over a year ago
Lately, I've been working on implementing ping on my own as a project to keep learning Rust and to deepen my knowledge of networks. I'm just going for a super basic utility here, nothing fancy, not even all the features of ping. But since the language is new to me and my...
ntietz.com blog
I'm hopeful but wary of "empathic" AI A couple of months ago, one of my friends told me about a startup called Hume. I was primed to be...
9 months ago
14
9 months ago
A couple of months ago, one of my friends told me about a startup called Hume. I was primed to be skeptical, except that I trust this friend to have a somewhat balanced perspective on this topic. He'd talked to some people there and read their site and generally felt a good vibe...
ntietz.com blog
Units in Go and Rust show philosophical differences Units are a key part of doing any calculation. A number on its own is just a scalar and doesn't...
a year ago
14
a year ago
Units are a key part of doing any calculation. A number on its own is just a scalar and doesn't represent anything in particular. If I tell you to go drive 5, you'd naturally ask "5 what?" Software often has to deal with quantities that represent real-world things. How we...
ntietz.com blog
RC Week 9: Parallels of Proofs and Programs I have three weeks left at Recurse Center. This last week was significantly less productive for me...
over a year ago
14
over a year ago
I have three weeks left at Recurse Center. This last week was significantly less productive for me than usual, because I've been pretty fatigued and just recovered from a cold. But I still got some work done that I'm proud of. More than that, I'm excited for the coming three...
ntietz.com blog
Work on tasks, not stories One tenet of big-a Agile1 is that developers should all work on individual user stories as the...
11 months ago
14
11 months ago
One tenet of big-a Agile1 is that developers should all work on individual user stories as the smallest unit of work2. That a ticket should almost always be a story, because that means it's something that delivers concrete value to the users. There are some cases in which this...
ntietz.com blog
What's "good" code and does it matter? I take pride in my work and in writing good code, and it's important sometimes to take a step back...
over a year ago
14
over a year ago
I take pride in my work and in writing good code, and it's important sometimes to take a step back and ask: what does that even mean? And does it matter? At a high level, "good code" is code that is suitable for its purpose and achieves its goals. That definition is pretty...
ntietz.com blog
Are any of your features the steak on the menu? At my first job, we were a distributed team and would get together often. When we went out to eat,...
a year ago
14
a year ago
At my first job, we were a distributed team and would get together often. When we went out to eat, one of my coworkers would always order the steak if it was anywhere on the menu. Every single time we went to some Ohio restaurant that had truly lackluster steak, he'd order it...
ntietz.com blog
[Review] "The Circle" by Dave Eggers Surveillance has gotten a lot of media attention lately (and a bit of attention on this very blog),...
over a year ago
14
over a year ago
Surveillance has gotten a lot of media attention lately (and a bit of attention on this very blog), and for good reason. So, it should be no surprise that it's also turning up in our dystopian novels! "The Circle" is a dystopian novel by Dave Eggers. While fiction, it is set in a...
ntietz.com blog
That time I wrote malware and got caught Most of us make some bad decisions in high school. While other people were drinking, going to...
a year ago
14
a year ago
Most of us make some bad decisions in high school. While other people were drinking, going to parties, and who knows what else, I was doing some experimentation of my own. I was writing my first (and only) piece of malware. From as early as I can remember, I've had a fascination...
ntietz.com blog
Tech systems amplify variety and that's a problem I recently read "Designing Freedom" by Stafford Beer. It has me thinking a lot about the systems we...
over a year ago
14
over a year ago
I recently read "Designing Freedom" by Stafford Beer. It has me thinking a lot about the systems we have in place and something clicked for why they feel so wrong despite being so prevalent. I'm not sure what any solutions look like yet, but outlining a problem is the first step,...
ntietz.com blog
It's getting hard to use and recommend Firefox, I'm afraid for the free web A couple of months ago, every video call I had on my personal computer ended up using Chromium. I...
10 months ago
13
10 months ago
A couple of months ago, every video call I had on my personal computer ended up using Chromium. I tried using Firefox and it looked good on my end: I could see and hear the other person. But they just saw a blank video feed and heard nothing. Firefox showed me that it's sending,...
ntietz.com blog
Decaf is good, actually We have made decaf a villain. We often malign decaf coffee and those who drink it. "No thanks, give...
10 months ago
13
10 months ago
We have made decaf a villain. We often malign decaf coffee and those who drink it. "No thanks, give me the good stuff." "Death before decaf." "Decaf isn't coffee." It has this reputation that it's bad and that coffee people avoid it. And yet, if you drink decaf, you're a true...
ntietz.com blog
Achieving awful compression with digits of pi Compression is a really hard problem, and it attracts a lot of interesting ideas. There are some...
11 months ago
13
11 months ago
Compression is a really hard problem, and it attracts a lot of interesting ideas. There are some numbers whose digits contain all sequences of digits1. People have long hypothesized that pi is one such number; a proof remains elusive. If we have a number which contains all...
ntietz.com blog
RC Week 3: Returning to Math The third week of my batch at Recurse Center is finished. It is still flying by too quickly. Nine...
over a year ago
13
over a year ago
The third week of my batch at Recurse Center is finished. It is still flying by too quickly. Nine weeks left! This week was a whirlwind and really busy. I think I pushed myself too hard. I had just recovered from my cold and was a little drained, and then got my COVID booster and...
ntietz.com blog
"Help, I see a problem and no one is prioritizing it!" A mentee recently mentioned a really frustrating problem that her manager seems to be ignoring. The...
12 months ago
13
12 months ago
A mentee recently mentioned a really frustrating problem that her manager seems to be ignoring. The specific problem doesn't matter, so don't focus on the technical details here. Hey Nicole! At $DAYJOB, we have some big problems and it's frustrating, I keep pointing them out and...
ntietz.com blog
PyOhio This was my first time going to PyOhio, and it was a blast. There will be some videos being posted...
over a year ago
13
over a year ago
This was my first time going to PyOhio, and it was a blast. There will be some videos being posted soon, so I will opt to link to those as they come in, but first, here are some of the highlights: Ed Finkler of OSMI gave a great talk on mental illness in tech, resources that are...
ntietz.com blog
Growing Teams and Baking Bread One of the keys in baking bread is getting the dough to rise well. As the yeast does its work, it...
over a year ago
13
over a year ago
One of the keys in baking bread is getting the dough to rise well. As the yeast does its work, it ferments some of the sugars in the dough into alcohol and carbon dioxide, resulting in a growing, bubbly mass of dough. There are some tricks to making dough rise quickly, like using...
ntietz.com blog
Consider Part-Time Work It has long been predicted that with more automation and more technology, we could all work less and...
over a year ago
13
over a year ago
It has long been predicted that with more automation and more technology, we could all work less and have more leisure time, but we continue to fall short of that promise. In many ways, we're working harder and longer, with more stress, than previous generations did. I think that...
ntietz.com blog
Lessons from implementing Hurl I'm proud to announce that Hurl is officially released and done! You can check out the docs on...
a year ago
13
a year ago
I'm proud to announce that Hurl is officially released and done! You can check out the docs on hurl.wtf. The language itself came out of an interesting question: Python sometimes uses exceptions for control flow, so could we implement a language that eschews normal control flow...
ntietz.com blog
If software engineering roles were chess pieces, what would they be? Chess is booming, and tech is burning to the ground. It's inevitable, soon, that Chess is going to...
a year ago
13
a year ago
Chess is booming, and tech is burning to the ground. It's inevitable, soon, that Chess is going to acquire the entire tech industry. And when Chess acquires us, they'll replace us and take our software engineering jobs1. Then we'll be stuck playing their game, and we'll be...
ntietz.com blog
I'm moving my projects off GitHub It's time for me to leave GitHub behind and move to another forge. I'm not necessarily advocating...
over a year ago
13
over a year ago
It's time for me to leave GitHub behind and move to another forge. I'm not necessarily advocating for anyone else to do the same, but if my reasons resonate with you then you may want to consider it. I also don't expect this post to... matter, if that makes sense1. I'm not a...
ntietz.com blog
Speeding up queries 1000x by sorting my bitmaps I'm working on a database system that stores and queries chess games and positions. Right now, it...
over a year ago
13
over a year ago
I'm working on a database system that stores and queries chess games and positions. Right now, it contains 240 million unique positions1 from 3.8 million games. One of the things it needs to do is quickly find all the games where a particular position occurs. I'd also like it to...
ntietz.com blog
Changing my relationship with GitHub Copilot I've been using GitHub Copilot on personal projects since March. It's been an interesting...
a year ago
13
a year ago
I've been using GitHub Copilot on personal projects since March. It's been an interesting experience, and one that I realized I have to change. Using Copilot nearly full time has had some positive and negative impacts on me, and it's time to take control of how I interact with...
ntietz.com blog
Building a demo of the Bleichenbacher RSA attack in Rust Recently while reading Real-World Cryptography, I got nerd sniped1 by the mention of...
11 months ago
13
11 months ago
Recently while reading Real-World Cryptography, I got nerd sniped1 by the mention of Bleichenbacher's attack on RSA. This is cool, how does it work? I had to understand, and to understand something, I usually have to build it. Well, friends, that is what I did. I implemented RSA...
ntietz.com blog
Even bad estimates are valuable if you use them right Estimating software projects is hard, if not impossible. This seems likely to be fundamental to the...
over a year ago
13
over a year ago
Estimating software projects is hard, if not impossible. This seems likely to be fundamental to the work, because we're inventing new things and invention doesn't happen on a fixed schedule. And yet, many teams still estimate how long their tasks will take to finish. Why should...
ntietz.com blog
Security of the Infinity Ergodox on Mac OS A friend of mine is very into keyboards and, after seeing his keyboards at work and admiring his...
over a year ago
13
over a year ago
A friend of mine is very into keyboards and, after seeing his keyboards at work and admiring his Ergodox many times, I took the plunge and built my own. 152 solder joints later, I have this beauty: It took a few days to get used to it and in the process, I found a bug in layer...
ntietz.com blog
Topologies of Remote Teams When you're building or scaling a software engineering team, you naturally run into a choice at some...
over a year ago
13
over a year ago
When you're building or scaling a software engineering team, you naturally run into a choice at some point: will we all be in the same office, or will we do this "remote work" thing? There are a lot of factors that go into whether or not remote work will work for your team, like...
ntietz.com blog
Books I Read in 2018 Every year, GoodReads has a Reading Challenge, where you set how many books you want to read and...
over a year ago
13
over a year ago
Every year, GoodReads has a Reading Challenge, where you set how many books you want to read and record them as you go. This year, I got serious about it, and it was a wonderful motivational device. I set a goal of two books per month, and I just eked it out over the finish line,...
ntietz.com blog
Measuring the overhead of HashMaps in Rust While working on a project where I was putting a lot of data into a HashMap, I started to notice my...
over a year ago
13
over a year ago
While working on a project where I was putting a lot of data into a HashMap, I started to notice my hashmaps were taking up a lot of RAM. I mean, a lot of RAM. I did a back of the napkin calculation for what the minimum memory usage should be, and I was getting more than twice...
ntietz.com blog
Insights and questions from the original waterfall paper The waterfall model is probably the most reviled methodology in software engineering. This...
a year ago
13
a year ago
The waterfall model is probably the most reviled methodology in software engineering. This methodology was first described in a 1970 paper by Dr. Winston Royce. This paper didn't call it waterfall, nor did it endorse the technique, and the paper contains a lot of good insights...
ntietz.com blog
Load testing is hard, and the tools are... not great. But why? If you're building an application that needs to scale—and we all tell ourselves that we are—then at...
over a year ago
13
over a year ago
If you're building an application that needs to scale—and we all tell ourselves that we are—then at some point you have to figure out if it does or not. This is where load testing comes in: if you want to see whether or not your application can handle scale, just generate scale...
ntietz.com blog
Getting buy-in to get things done When you are working in any sort of leadership role, you'll have to get people to work toward...
9 months ago
13
9 months ago
When you are working in any sort of leadership role, you'll have to get people to work toward initiatives that you're leading or make changes you're proposing. Whether you're a line manager running a team day-to-day, or a principal engineer pushing technical initiatives forward,...
ntietz.com blog
Making it fast shouldn't be the last step There's a common quote in the software world that you should "make it work, make it right, then make...
a year ago
13
a year ago
There's a common quote in the software world that you should "make it work, make it right, then make it fast."1 This is a catchy aphorism, and it is often taken as a rule. But in its short form, it misses some crucial nuance. Let's unpack it to see what's missing, then how to do...
ntietz.com blog
Betraying vim for the IDEs of March vim is my text editor soulmate1. But I've gone and done a Brutus by betraying vim and using a...
a year ago
13
a year ago
vim is my text editor soulmate1. But I've gone and done a Brutus by betraying vim and using a different editor. And I did it on March 15th2, the Ides of March. Or is it the IDEs of March? The betrayal happened slowly, then all at once. For the past few weeks I've been ruminating...
ntietz.com blog
[Talk] Scaling Graphs On March 22, 2016, I talked about scaling up graphs at Scale Tech. It was recorded and is viewable...
over a year ago
13
over a year ago
On March 22, 2016, I talked about scaling up graphs at Scale Tech. It was recorded and is viewable on YouTube: If you have thoughts on scaling graphs or big data in general, please reach out to me! I'm always happy to talk about this.
ntietz.com blog
Estimates are about time, so let's cut to the chase As software engineers, we routinely estimate our work. Our most common brush with estimates is when...
a year ago
13
a year ago
As software engineers, we routinely estimate our work. Our most common brush with estimates is when we estimate individual tasks within a sprint. Usually, we do that with abstract points, and that's the wrong way about it. We should be cutting to the chase and estimating directly...
ntietz.com blog
Surveillance, Schools, and Our Children In 2010, the news broke that Harriton High School, in a suburb of Philadelphia, was activating...
over a year ago
13
over a year ago
In 2010, the news broke that Harriton High School, in a suburb of Philadelphia, was activating webcams on student laptops1. When they were at home. In their bedrooms. They captured photos while students were in private spaces, where they never expected to be watched. A few days...
ntietz.com blog
When to use cute names or descriptive names I've previously written that project names should be cute, not descriptive. That post talks about...
11 months ago
13
11 months ago
I've previously written that project names should be cute, not descriptive. That post talks about services and does not talk at all about modules or variables. It's different in the latter context: those names should often be descriptive. What's the difference, and how do you...
ntietz.com blog
Start to finish on self-publishing a technical book I've been writing this blog since 2015, and my writing picked up pace in 2022. That year I wrote...
10 months ago
13
10 months ago
I've been writing this blog since 2015, and my writing picked up pace in 2022. That year I wrote 37,000 words, more than the 33,000 I'd written up to that point. It has accelerated since then. At some point, I realized that I've put in a lot of time and effort writing here, and...
ntietz.com blog
Optimize sprint points to get nowhere fast As developers, we can be metric obsessed. We tend to like objective measures of things. 99th...
a year ago
13
a year ago
As developers, we can be metric obsessed. We tend to like objective measures of things. 99th percentile request times, CPU percentage, disk utilization. Nothing escapes our attempts to quantify it, not even our productivity: enter story points1. We measure our productivity in...
ntietz.com blog
We deserve to know if something was generated by AI We're plunging into a world where AI-generated text surrounds us. But we don't know where we are on...
a year ago
13
a year ago
We're plunging into a world where AI-generated text surrounds us. But we don't know where we are on that. What portion of the text you read each day was generated fully or partially by a human, or by an LLM? We don't know, and probably can't know, and that brings about some...
ntietz.com blog
Kill the crunch time heroics Crunch time has an allure: it feels like if you just push hard enough, you can get more done. You...
over a year ago
13
over a year ago
Crunch time has an allure: it feels like if you just push hard enough, you can get more done. You can push hard and get that next release done on time, get those new features out, earn more revenue for your company. Engineers are under immense pressure to deliver more and do it...
ntietz.com blog
How Cryptology Can Fix Identity Theft Identity theft is a huge problem, costing Americans more than $4.5 billion in 2012. Identity theft...
over a year ago
12
over a year ago
Identity theft is a huge problem, costing Americans more than $4.5 billion in 2012. Identity theft victims frequently lose time and money and undergo significant mental hardships while dealing with the fallout. It can happen a few different ways, but one large attack vector is...
ntietz.com blog
Procrastinating on my side project by torturing databases One of my most insidious procrastination mechanisms is doing things that feel like work but are just...
11 months ago
12
11 months ago
One of my most insidious procrastination mechanisms is doing things that feel like work but are just a fun diversion. I ran into that recently for a side project I'm working on. It wasn't really necessary to test database options semi-rigorously, but here we are. This project is...
ntietz.com blog
Impact of remote-code execution vulnerability in LangChain One of my private repos depends on LangChain, so I got a lovely email from GitHub this...
a year ago
12
a year ago
One of my private repos depends on LangChain, so I got a lovely email from GitHub this morning: Ooh, a high severity remote-code execution vulnerability in LangChain? On the one hand, I'm not entirely shocked that a framework that includes the ability to run LLM-generated code...
ntietz.com blog
Reflecting on 2023, preparing for 2024 This is one of those cliched posts: Reflection on the year that's ending, reviewing last year's...
a year ago
12
a year ago
This is one of those cliched posts: Reflection on the year that's ending, reviewing last year's goals, and talking about hopes and goals for next year. They're cliche, and they're also useful. The planning and reflecting process is a useful one, and sharing openly means other...
ntietz.com blog
OpenAI fixed their unsafe policy around names Update October 2, 2023: This is now fixed: you can update your name in your user settings. This...
a year ago
12
a year ago
Update October 2, 2023: This is now fixed: you can update your name in your user settings. This works for the OpenAI Platform accounts, and they say the same for ChatGPT (etc.) is coming soon. Thank you to those who reached out to OpenAI employees about this, and thank you so...
ntietz.com blog
Unpacking some Rust ergonomics: getting a single Result from an iterator of them Rust has a lot of nice things that make life easy. One of the least discussed ones is also one of my...
a year ago
12
a year ago
Rust has a lot of nice things that make life easy. One of the least discussed ones is also one of my favorites. It's a little nugget in the standard library that makes handling possible failures a lot easier. And it's not even baked in—it just falls out from the type...
ntietz.com blog
Open source licenses as a reflection of values I'm the kind of nerd that has a favorite software license. For a while that favorite license was the...
over a year ago
12
over a year ago
I'm the kind of nerd that has a favorite software license. For a while that favorite license was the Mozilla Public License (MPL). Right now, it's the GNU Affero General Public License (AGPL). Licenses are really important on all code, and they're critical to the open source...
ntietz.com blog
Throw away your first draft of your code The next time you start on a major project, I want you to write code for a couple of days and then...
a year ago
12
a year ago
The next time you start on a major project, I want you to write code for a couple of days and then delete it all. Just throw it away. I'm serious. And you should probably have some of your best engineers doing this throwaway work. It's going to save you time in the long run. The...
ntietz.com blog
Does technology have a right to exist? (No.) So often, people argue against restrictions on technology (or tech companies) with the argument that...
over a year ago
12
over a year ago
So often, people argue against restrictions on technology (or tech companies) with the argument that those restrictions aren't possible given the scale, value, or some other property of the technology. For example, a common retort to arguments that Facebook and YouTube should...
ntietz.com blog
Rust's iterators optimize nicely—and contain a footgun I saw a claim recently that in functional programming using "map/filter iterates over the list...
9 months ago
12
9 months ago
I saw a claim recently that in functional programming using "map/filter iterates over the list twice, while the foreach loop iterates only once." The author continued that "Haskell can fuse maps together as an optimization but I don't think you safely fuse arbitrary map/filters?...
ntietz.com blog
Gaining depth perception In 2017, the way I see the world changed, literally. For the first time in my life, I had nearly...
9 months ago
12
9 months ago
In 2017, the way I see the world changed, literally. For the first time in my life, I had nearly full depth perception. When I was a kid, I was always the one who was bad at ball sports. Not for lack of trying, either. I'd run after a ball to catch it, only to be off by a few...
ntietz.com blog
TIL: enabling features on transitive dependencies (Rust) While pairing on a small Rust program with a friend, I ran into a problem: to compile to WASM, one...
a year ago
12
a year ago
While pairing on a small Rust program with a friend, I ran into a problem: to compile to WASM, one of my dependencies needed one of its dependencies to turn on a feature. A variation of this that I've run into in other projects is where a transitive dependency has a bug/CVE and I...
ntietz.com blog
My first impressions from a few weeks with Lean and Coq For the last few weeks, some of us have been working through learning about interactive theorem...
over a year ago
12
over a year ago
For the last few weeks, some of us have been working through learning about interactive theorem proving together at Recurse Center. I've been curious about proof assistants since undergrad, and finally have the time, space, and peers to dive into it with. It's been an interesting...
ntietz.com blog
A confusing lifetime error related to Rust's lifetime elision Earlier this week, I ran into a confusing situation with lifetimes and the borrow checker while...
over a year ago
12
over a year ago
Earlier this week, I ran into a confusing situation with lifetimes and the borrow checker while working on my Lox interpreter. It took me a little while to figure out, and it's an instructive situation. Here's a reduced-down version of what I was working on. It's an interpreter,...
ntietz.com blog
How I Work Remotely I've been working remote since September 2016. There are a lot of engineers who have worked remote...
over a year ago
12
over a year ago
I've been working remote since September 2016. There are a lot of engineers who have worked remote longer than I have; there are others who have more insight into how they work than I do; and there are plenty of people who simply don't work in the same way I do. My intention in...
ntietz.com blog
Distractions Cause Bad Code We are barraged by constant distractions, and they are degrading the quality of our work. Our...
over a year ago
12
over a year ago
We are barraged by constant distractions, and they are degrading the quality of our work. Our digital society now is set up to allow us to focus for mere minutes at a time, since we are in an attention economy and the sole objective of companies is to capture more of our time....
ntietz.com blog
The most important goal in designing software is understandability When you're designing a piece of software, the single most important thing to design for is...
a year ago
12
a year ago
When you're designing a piece of software, the single most important thing to design for is understandability. Security, performance, and correctness are all important, but they come after understandability. Don't get me wrong, all of those are important. Software that isn't...
ntietz.com blog
Tech salaries probably aren't dropping from remote work Not even a year ago, most software companies and software engineers were some form of remote work...
over a year ago
12
over a year ago
Not even a year ago, most software companies and software engineers were some form of remote work skeptical. Remote work existed (I've been working remote for most of my admittedly short career!) but it was not widespread. When I talked to recruiters at big tech companies they...
ntietz.com blog
Great management and leadership books for the technical track In tech, we're fortunate to have separate management and technical tracks, though it's still...
a year ago
12
a year ago
In tech, we're fortunate to have separate management and technical tracks, though it's still underdeveloped1. However, the path you take isn't very clear, it's not broadly understood what the responsibilities are, and there aren't as many resources out there as there are for...
ntietz.com blog
Writing Hurl's grammar, twice Recently I started working on a programming language, Hurl. Writing the initial code samples and...
a year ago
12
a year ago
Recently I started working on a programming language, Hurl. Writing the initial code samples and developing the concept is all fine and good, but the next step is to actually make it work. The steps I outlined for developing Hurl in the last post were: Write out code samples to...
ntietz.com blog
Rounding in Python In software engineering, there are two principles that often come into conflict. The first one is...
over a year ago
12
over a year ago
In software engineering, there are two principles that often come into conflict. The first one is the principal of least surprise. The second one is doing the right thing. These come into conflict when the usual thing that people do is in fact the wrong thing. A particular...
ntietz.com blog
Three days of Advent of Code in Hurl Every year I do some of Advent of Code. One year I completed it, but usually I just do some of it as...
a year ago
12
a year ago
Every year I do some of Advent of Code. One year I completed it, but usually I just do some of it as a social thing with friends and then taper off as interest wanes. This year, I did three days of it, and stopped because I really truly did not want to write more solutions in the...
ntietz.com blog
It's easier to code review Rust than Python On Monday, I was talking to a friend about programming and I mentioned that I prefer to review Rust...
a year ago
12
a year ago
On Monday, I was talking to a friend about programming and I mentioned that I prefer to review Rust code over Python code. He asked why, and I had some rambling answer, but I had to take some time to think about it. It boils down to the fact that I can give a much better review...
ntietz.com blog
RC Week 1: Getting Unexpected Extrovert Energy The first week of my batch at Recurse Center (RC) just finished, and it was an intense week! I'm...
over a year ago
12
over a year ago
The first week of my batch at Recurse Center (RC) just finished, and it was an intense week! I'm planning to write a blog post each week about my experience at RC. They'll vary, but it'll probably be a mixture of what I did and my feelings about everything. There won't be too...
ntietz.com blog
Don't Disrupt Things; Fix Them People talk about disrupting industries when those industries appear to be in a stable but...
over a year ago
12
over a year ago
People talk about disrupting industries when those industries appear to be in a stable but inefficient state. For example, the taxicab industry: there was little innovation going on in it, and it was stable, but it seemed like it was far from ideal. Along came Uber, intent to...
ntietz.com blog
Building a digital vigil for those we've lost This post is hard to write in a lot of ways. It's more personal than most I've written. This is...
a year ago
12
a year ago
This post is hard to write in a lot of ways. It's more personal than most I've written. This is presumptively a tech blog, and this piece is about so much more than technology. But it's important. Making things, software or otherwise, is ultimately about people. One of the ways I...
ntietz.com blog
Lessons from my first (very bad) on-call experience Near the beginning of my career, I was working for a startup that made database software used by...
over a year ago
12
over a year ago
Near the beginning of my career, I was working for a startup that made database software used by other companies in their production infrastructure. The premise was that our super-fast database had a computing framework that would let you do things in real-time that usually took...
ntietz.com blog
The bittersweet end of a year of independence Just over a year ago, I left the startup I was working for and started my own business. My intention...
over a year ago
12
over a year ago
Just over a year ago, I left the startup I was working for and started my own business. My intention was to do freelance work ("consulting", to all my clients) until I was able to launch my first product, and then shift into being a product company. My ambitions and confidence...
ntietz.com blog
Too much of a good thing: the trade-off we make with tests I've worked places where we aspired to (but did not reach) 100% code coverage. We used tools like a...
a year ago
12
a year ago
I've worked places where we aspired to (but did not reach) 100% code coverage. We used tools like a code coverage ratchet to ensure that the test coverage always went up and never down. This had a few effects. One of them was the intended effect: we wrote more tests. Another was...
ntietz.com blog
Scheduling visits from the muse Eight years ago, I decided to start a blog. For most of the life of my blog, it was relatively...
a year ago
12
a year ago
Eight years ago, I decided to start a blog. For most of the life of my blog, it was relatively inactive. And then, I just started pumping out a lot more blog posts in 2022 while attending the Recurse Center. What changed? I stopped relying on visits from the muse, and started...
ntietz.com blog
Starting a New Chapter At the end of this week, I am starting a new chapter of my life: entrepreneurship. This is my last...
over a year ago
11
over a year ago
At the end of this week, I am starting a new chapter of my life: entrepreneurship. This is my last week at CrossChx, and then I begin splitting my time between contract work and developing some of my own ideas. I only spent about three quarters of a year at CrossChx, but in that...
ntietz.com blog
Getting people to tell you you're wrong One of the challenging things about being a staff+ engineer is that people trust you. They trust you...
a year ago
11
a year ago
One of the challenging things about being a staff+ engineer is that people trust you. They trust you a lot, and there might be less pushback on ideas than there should be. This makes sense. To become a staff+ engineer, you usually need to be really good at this intersection of...
ntietz.com blog
RC Week 7: Four habits to improve as a programmer Seven weeks down, five weeks to go! It's flying by quickly. On the one hand, I want it to last...
over a year ago
11
over a year ago
Seven weeks down, five weeks to go! It's flying by quickly. On the one hand, I want it to last forever. On the other hand, I know it can't, and I'm looking forward to talking to coworkers again at my day job when I go back. RC has given me a renewed appreciation for what I get at...
ntietz.com blog
Building Molecule Reader in one day Reading on screens is very difficult for me. I just cannot focus on the articles, especially when...
over a year ago
11
over a year ago
Reading on screens is very difficult for me. I just cannot focus on the articles, especially when there are notifications coming in or even just other content on the screen1. I have a reMarkable tablet (RM), which I love dearly2 and much prefer to read on. But it's annoying...
ntietz.com blog
Terminology matters: let's stop calling it a "sprint" If you're in the software industry, it's hard to not be aware of agile development at this point. It...
over a year ago
11
over a year ago
If you're in the software industry, it's hard to not be aware of agile development at this point. It seems like every team practices it differently, but there are certain commonalities that run through all teams I've seen. One of those is the term used for each time-delimited...
ntietz.com blog
RC Week 12: What's Next, and Speedrunning Crafting Interpreters And that's it. My batch at RC ended yesterday. I have so many thoughts and feelings from this time,...
over a year ago
11
over a year ago
And that's it. My batch at RC ended yesterday. I have so many thoughts and feelings from this time, but it's going to take time to coalesce them all. I'll write up my Return Statement1 in a week or two, but for now, here's what I was up to the last week! Mostly, this last week...
ntietz.com blog
Different topologies for an org chart, wrong answers only Traditionally, an org chart is represented as a tree. You start at the top with the root of the...
a year ago
11
a year ago
Traditionally, an org chart is represented as a tree. You start at the top with the root of the tree, probably the CEO. And then everything comes down from there hierarchically. It doesn't have to be that way, though! We can imagine other topologies for companies which would...
ntietz.com blog
Go slow to go fast A couple of weeks ago, I started working with a personal trainer to improve my fitness. I've long...
a year ago
11
a year ago
A couple of weeks ago, I started working with a personal trainer to improve my fitness. I've long been an endurance athlete, and it's time to lean into my overall fitness and strength. Part of this is to be healthy and live a long life. But honestly? More of it is a desire to...
ntietz.com blog
Fiction as a lens into technological change The world is changing right now. We don't know just how much yet, but LLMs are having a major impact...
a year ago
11
a year ago
The world is changing right now. We don't know just how much yet, but LLMs are having a major impact on almost every field, and we could see anything from minor efficiency gains to catastrophic AI apocalypses to mass disruption of many jobs. The cone of possibility is wide, and...
ntietz.com blog
Recovering from a lost disk: how I setup, backup, and restore dev machines Last Wednesday just before 3pm, I went pack up my laptop to get ready to drive 7 hours to visit my...
a year ago
11
a year ago
Last Wednesday just before 3pm, I went pack up my laptop to get ready to drive 7 hours to visit my family in Ohio. Fedora had some updates to apply and when it went to come back on after those, I saw the words no one wants to see: Default Boot Device Missing or Boot Failed....
ntietz.com blog
Working with Rust in (neo)vim I've been using vim for nearly as long as I've been writing code. My first introduction to it was...
over a year ago
11
over a year ago
I've been using vim for nearly as long as I've been writing code. My first introduction to it was being thrown in the deep end in 2009 by my Intro to CS lab assistant, who told us to write our programs using vi1 on the department servers. Why he told us that, I have no idea. But...
ntietz.com blog
Rust allows redeclaring local variables to great benefit A lot of programming languages allow variable shadowing in new scopes. Early on, you learn that it...
a year ago
10
a year ago
A lot of programming languages allow variable shadowing in new scopes. Early on, you learn that it can cause errors and can be confusing, but is situationally appropriate sometimes. Something that's less commonly allowed is redeclaring variables to shadow them locally. And when...
ntietz.com blog
I'm taking a sabbatical and attending Recurse Center! It's been almost a decade since I graduated from college. In that time, I've worked at three...
over a year ago
10
over a year ago
It's been almost a decade since I graduated from college. In that time, I've worked at three startups, co-founded a non-profit immigration tech company, consulted for the United Nations, and noped out of grad school after one semester (twice!). I've also struggled with depression...
ntietz.com blog
Email addresses are not primary user identities A lot of applications treat your email address as something immutable that is linked to you and...
a year ago
9
a year ago
A lot of applications treat your email address as something immutable that is linked to you and which will never change. It can't be linked to someone else, and it can't change. This is, of course, not true. Email addresses do change. I changed my work email address recently...
ntietz.com blog
RC Week 10: Thankful for Family, Missing my Family As I write this, I'm sitting, surrounded by family, recovering from a cold. I wasn't sure what I'd...
over a year ago
7
over a year ago
As I write this, I'm sitting, surrounded by family, recovering from a cold. I wasn't sure what I'd write this week for the RC week 10 recap, since it's a short week. This week I didn't get a whole lot of coding done, so it's time for the trope: the Thanksgiving post. Of course,...