Book review: The Psychology of Software Teams

Software development — and software developers — aren’t as special as we in the industry like to think. But the work asked of software developers is different than most other professional work. Software development requires fluency in multiple languages (human and/or machine) to create novel outputs that meet someone else’s needs. While it pays very well, burnout is rampant. Why doesn’t anyone do something about this?

In The Psychology of Software Teams, Dr. Cat Hicks calls this “Brain-in-Jar” thinking. Too often, organizations and the people who lead them treat software developers as interchangeable pieces. They’re brains that generate code, preferably in isolation, not fully-developed humans. But, of course, real life developers are human and they’re more likely to thrive when their psychological needs are met.

The Psychology of Software Teams blends developer anecdotes and academic research to present an easy-to-understand of where current practices fall short and how the future can be better. While it doesn’t contain this One Weird Trick™ to magically fix everything all at once, every chapter ends with reflective questions to give the reader a practical takeaway.

While the book is well-founded in scientific research, you don’t need to have a doctorate in psychology to understand it. I remember almost nothing from the 7:30 AM intro to psychology class that I took 21 years ago, and I found the book understandable and easy to read.

If you’re a software developer or someone who leads (or regularly interacts with) developers, you need to read this book. The Psychology of Software Teams is available now.

Other writing: July 2026

What have I been writing when I haven’t been writing here?

Stuff I wrote

Duck Alignment Academy

Other writing: June 2026

What have I been writing when I haven’t been writing here?

Stuff I wrote

Duck Alignment Academy

On cigarettes

There’s something to be said for cigarettes. Most of it, of course, is bad. Cigarettes smell awful. The stench lingers and invades long after the cigarette is gone. Cigarettes, of course, also kill people. Lung cancer from a lifetime of smoking (mostly cigarettes, but also pipes) killed my father. It’s kind of amazing that fire from a cigarette left smoldering as he fell asleep didn’t kill him, the way it has so many others.

The anti-smoking messaging I got in school as a kid was effective. But so was a lifetime of popular culture. For as much as smoking disgusts me, I can’t change the fact that it looks cool. Vapes could never.

More importantly, though, cigarettes have a way of forming a connection between strangers. Lighter or matches not working? That’s a solvable problem. Out of cigarettes? Someone will give you one of theirs. There’s no judgement, no expectation of repayment. It’s just a prosocial thing you do. Someday, you might depend on someone else doing the same. I think that’s beautiful, even though the smoking part is gross.

On the whole, society is better off with fewer people smoking. But that doesn’t mean we haven’t lost a little something along the way. Cigars can fuck right off, though.

Other writing: May 2026

What have I been writing when I haven’t been writing here?

Duck Alignment Academy

  • Every project has politics — Politics in open source is inescapable. As soon as two or more people interact, politics becomes a consideration.
  • How to triage security reports — There’s slop coming, but also a lot of medium-to-high quality reports. Maintainers are going to have to know how to triage security reports.

Other writing: April 2026

What have I been writing when I haven’t been writing here?

Duck Alignment Academy

Kusari

Book review: Good Intentions

I received a free copy of the audiobook through a randomized giveaway on StoryGraph. I did not receive any compensation for this review.

Twins have a connection that the rest of us can’t understand. So when your twin dies unexpectedly, what happens? For Cady, it’s a spiral.

Every grief is different, but Cady’s is very different. Unlike most of the psychological thrillers I’ve read, Marisa Walz’s protagonist isn’t running from “the bad guys.” Instead, she’s running from her grief and alienating everyone along the way. Her relationship falls apart, her once-thriving business crumbles, all in pursuit of something that she seems to get but the reader does not understand.

I’ll be honest: I did not like Cady and I spent most of the book being uncomfortable. Only at the end did it make sense. The ending didn’t make Cady any more likeable, but it made a sort of sense of her actions.

Did I like the book despite the discomfort? I think I did. I certainly found it thought-provoking. Had I DNFed it, I wouldn’t get the payoff.

Marisa Walz does a masterful job of building the suspense and discomfort through a slow drip of reveals. Told as a one-sided conversation that Cady has with her late sister, the reader can never quite know how much to believe the narrator. It’s a brilliant work, if you can handle the building sense of discomfort. You never know what Cady will do next, but you know it will be a bad idea.

Good Intentions is available from St. Martin’s Press.

Chase results: 3 April 2026 in West Central Indiana

Despite the forecast of severe weather, it wasn’t really on my mind today. Charles had his first college visit, so the focus of the day was the University of Chicago. I saw some deep convection as we drove down I-65, so I opened RadarScope. I noticed a tornado warning to our southwest, so I figured “what the hell?”

I took the US 231 exit and drove through White County. As we approached Round Grove, I could see a lowering, so we turned west on White County Road West 1100 South (location). Unfortunately, it fell apart almost immediately.

A wall cloud under a thunderstorm. A gravel road crosses in the foreground.
Lowering on the tornado-warned storm over Benton County as seen from near Round Grove. Taken approximately 2154Z. View is to the west-southwest.

When the rain shaft reached us, I continued back down US 231 through Montmorenci. The storms west of Greater Lafayette looked marginally interesting, so I continued south on Jackson Highway to SR 26. After a brief pause at the Purdue Airport, we decided to go home. I made a quick bio break, grabbed my camera, and set off again solo.

By that point, the storm in southwestern Tippecanoe County was looking interesting, so I headed southeast on US 52. The storm showed broad rotation on radar, but had no warnings at the time. I stopped at the Marathon station on Dale Drive.

Ragged cloud base behind a Marathon gas station sign.
View of the storm from southeast of Lafayette. Taken approximately 2300Z. View is to the southwest.

I was almost directly under the rotation, which seemed like a suboptimal location, so I dropped south and then headed east on Tippecanoe County Road East 550 South. I turned north on CR South 1075 East and stopped at the railroad crossing just south of SR 38. At some point during the drive, Indianapolis issued a severe thunderstorm warning for this storm. Although the storm looked decent on radar, it was not particularly impressive visually.

I continued to head northeast and the appearance improved quickly. On Clinton County Road West 550 North, I stopped along with a few other storm enthusiasts.

I watched for about five minutes. As the storm continued to move, I decided to continue following it east. By the time I reached Rossville, the storm seemed like it was falling apart for good. Since I was almost out of daylight, I decided to call it a night.

For an unplanned chase, I’m pretty happy with how it turned out. Except I wish I had paid attention to the ISO setting on my camera and not used 3200.

Other writing: February 2026

What have I been writing when I haven’t been writing here?

Duck Alignment Academy