Russian Lit Majors and Expert Generalists

Many years ago I read an article by Michael Lopp, Russian History, that resonated with me so deeply, I started sending it to my managers, to help explain why I was in a technical organization with no technical degree. This article details an archetype, the Russian Lit Major, who can understand and sympathize with multiple domains, and then be able to translate between these domains. This has been the essence of my career, even before I stopped being a programmer as my day job.

If you’re in a start-up, you need them because, very soon you won’t be able to figure out everything by walking the hallway. There are too many people. If you’re in a big company, you need them for the same reason; there is simply not enough time in the day to regularly take the pulse of the company and that is what your Russian Lit Major is going to do. They’re going to make sure that whatever relevant shenanigans are going on outside of your team are going to cross your table. They’re going to eliminate surprises and they’re going to do this the best when they know that they are an essential part of the team.

Yup. That’s me. My degree was not Russian History. I did not study Russian literature. My degree was Biological Sciences with a side of teaching credential. It’s not that I lucked into technical jobs, well…that’s not entirely true but it’s a story for another day, I spent a few extra semesters taking enough CSCI classes to become an extremely mediocre developer.

Recently, I read another article, Expert Generalists, that felt not exactly like a sequel to Russian History, but definitely adjacent. If Russian History focuses on communication and translation, Expert Generalists focuses on having a learning mindset. Russian History emphasizes understanding the entire company, while Expert Generalists emphasizes understanding the entire technical stack. The Russian Lit Major will help you know “whether or not my Sr. VP is going to kill the whole project”, while the Expert Generalist will help you see a potential dependency in a seemingly unrelated area that will bring your application down. Among other things...

The Expert Generalist, currently has six identified characteristics: Curiosity, Collaborativeness, Customer Focus, Favor Fundamental Knowledge, Blend of Generalist and Specialist Skills, and Sympathy for Related Domains. I’d score myself 5/6 on this rubric. I’ve been in roles where I do so many random things for so long, I don’t know what my specialist skills really are anymore. I doubt being able to instantly recall almost any line of dialogue from Ghostbusters (1984) or The Hunt for Red October counts. If you know of a job where those are key skills, please do get in touch! The overlap I see between the two archetypes is essentially complete, there may be a sliver on each side of the Venn diagram, but it’s probably a rounding error. Again, it’s just that the focus may be in opposite directions.

While Russian History is a fun story, the Expert Generalists article is a rigorous exploration of how to spot these people, how to effectively place them in teams, and how to help them grow. It’s less a sequel and more how to optimize organizations with these types of people. I don't think I would send Expert Generalists to any new boss though (too long for most managers today), I'll stick with Russian History as I will always be that Russian Lit Major at heart.

The Thoughtworks Technology Podcast recently has a nice discussion about this article and it’s well worth the listen.

Datadog Incidents and Slack Channel Workflow Automation Tip

tl;dr how to invite users to incident Slack channels created by Datadog

  1. Use an incident trigger and reference it via Incident Notifications
  2. When getting the Slack channel use {{ Source.incident.id }}
  3. When inviting users, the channel is ${ Steps.Get_incident_Slack_channel.channel_name }

If you use both Datadog and Slack, I hope you have explored how Datadog can create incident channels. At work, we have found this incredibly useful and allowed us to replace a custom workflow.

Recently our SRE team had refactored some of the chatops tools that we used through Slack commands to do things like restart services and page people/teams. We needed their newly created bot automatically added to newly created incident channels. There are many ways to accomplish this, so really...how hard could it be? Well...I'm writing this post, so it was non-trivial.

This is specific to using Datadog Workflow Automation and some of the bumps in the road I ran into (over?). The first bump, which is technically in the documentation, but I didn't understand it when I read it, was to trigger off incident creation automatically you need to use the incident notifications to do the triggering. I was under the impression that "trigger automatically" just meant that it would trigger, but the language is actually "trigger automatically via". My bad. Do not that in the notification settings there is an option for Declared or Declared or incident attributes are updated and for our purposes we chose only Declared as we don't need to invite the same user again.

So, now that we know how to trigger the incident via the notifications settings in Incidents, the next step was to get the Slack channel, which has a handy action named Get incident Slack channel. Claude and ChatGPT were of little help here, giving me nothing by wrong answers. It was a Datadog employee in the public Slack that gave me the right incantation of {{Source.incident.id}}. Once you see it, it's obvious, but I had a heck of time getting there.

I didn't get stuck on the next step, but since I'm documenting all this, it was to use the Invite users to channel action. The only thing that might be confusing is the channel is ${ Steps.Get_incident_Slack_channel.channel_name }. The user and workspace will be unique to your setup.

Again, once you see it all, it's not complicated and super easy, barely an inconvenience. If you're here though, I hope this helps.

Side rant: I feel like this was harder because of No Code interface and probably because for reasons I don't fully understand I wasn't able to get to the Datadog docs that require authentication. I have no doubt that the answers to my problems are available. Also, why do docs require authentication?

Artificially Inflated #1

I do not gather these links to say that Generative AI has no value or utility, only that perhaps we don’t believe the hype.

This first batch of links are entirely me going back through my Messages with Dr Kimberly Jaxon, who is dealing with Generative AI in many courses where text represents the artifact that is required to complete an assignment.

Not new, but relatively new to me. I Will Fucking Piledrive You If You Mention AI Again — Ludicity.

Simon Wardley, of Wardley Maps fame, has been absolutely on fire lately. Do you use ChatGPT for search?

Camille Fournier has entered the chat. Things I Currently Believe About AI and Tech Employment

Speaking of text-based artifacts, here’s a fun thread on a study of human success at detecting AI generated writing.

Not sure how I can not include a fart joke at ChatGPT’s expense.

What if it’s most grift and this particular grift is draining funds from the California State University? via Dr. Cat Hick.

Neal Stephenson, one of my favorite authors, when to New Zealand and said some words. Remarks on AI from NZ

I follow conversations among professional educators who all report the same phenomenon, which is that their students use ChatGPT for everything, and in consequence learn nothing. We may end up with at least one generation of people who are like the Eloi in H.G. Wells’s The Time Machine, in that they are mental weaklings utterly dependent on technologies that they don’t understand and that they could never rebuild from scratch were they to break down.

You know jwz has had enough. College student asks for her tuition fees back after catching her professor using ChatGPT

I really enjoyed Hazel Weakly’s post, Stop Building AI Tools Backwards.


How do I keep up? I don’t. This is but a fraction of a fraction of a tiny minuscule of the words and hang-wringing (including my own!) that are flying around the internet. I take advantage of Listen Later to covert long articles and PDFs into mp3 for podcast feed consumption. Yes, it uses AI…like I said, I don’t deny the utility.

Posted in AI

ExploreDDD Denver 2025

I was fortunate to attend ExploreDDD last week (April 16-17) and I have so many thoughts. First and foremost, this group was one of the most thoughtful and welcoming groups I’ve experienced in tech. It was very reminiscent of Code4Lib, which if you’re not familiar with, a group of “hackers, designers, architects, curators, catalogers, artists and instigators from around the world” that happen to fit in the Venn overlap of libraries, archives, museums, and technology. I bring up the Code4Lib conferences because they were so invigorating. I always came away with new friends, connections, ideas, and most importantly motivation. Motivation can be a hard thing to come across these days, so when you tap into it, you tend to get overwhelmed. Your brain fills up, bursts, then fills up again. You hit the pillow and don’t move until your alarm goes off in the morning and you exciting for it to happen all over again.

That’s what going to ExploreDDD felt like for me. So, yeah…highly recommended.

Domain-driven Design (DDD) is not so much a technology as it is a philosophy. It’s a way of thinking to help you make sense of a complicated world. If I could only have one takeaway from the conference is that the world is messy, your systems are messy, your people are messy and we have tools, frameworks, patterns, mental models, and processes to help. Nobody ever said it was gonna be easy. Do the work. Build the models. Map the systems. Create the Event Storm. Most importantly, share the work. Allow it to be challenged. Improve it through feedback and know now that everybody has a better understanding of the system.

I’ll give the rundown of what I attended and then make as many posts as needed to put more thoughts out into the world.

Wednesday, April 16

Thursday, April 17

  • Systems Theory And Practice Applied To System Design (Workshop) with Ruth Malan
  • Discover Your Software Architecture In A Day With The C4 Model (Workshop) with Ryan Shriver
  • Learning From Incidents As Continuous Design (Workshop) with Eric Dobbs
  • Model Rigor, You Say by Rebecca Wirfs-Brock

The workshops were 2 hours and they really were work. The good kind. I’m not new to Eventstorming, C4, systems thinking, and especially incident management, but these workshops allowed me to hone my skills with experts and other practitioners which was incredibly valuable.

MLB Spring Training 2025

In 2015 I started going to MLB Spring Training in Arizona. This is affectionately known as The Cactus League. Because there's a bunch of cactus everywhere. There's an east coast version in Florida called The Grapefruit League, which I suppose means there's a bunch of grapefruit in Florida. This post is an archived agenda so I don't have to argue with my friends about where we went previously.

Dates

  • March 5-9

Games

  • Giants vs White Sox at Scottsdale Stadium
  • Cubs vs Royals at Sloan Park (night game)
  • A's vs Guardians at Hohokam Field (rain delayed)
  • Rockies vs Rangers at Salt River Field (rained out / night game)
  • Cubs vs Mariners at Sloan Park

Lodging

  • 5119 E Winchcomb Dr, Scottsdale AZ

Food and Drink

  • Breakfast Club
  • STATS Sports
  • Chompies
  • Tapas Papa Frita at Southbridge
  • The Bread and Honey House
  • 12 West Brewing - Downtown Mesa
  • Mastro's City Hall Steakhouse
  • Snooze, an A.M. Eatery

Starting lineup board at Scottsdale Stadium

Music in 2024

Here's the 2024 musical brain dump. This is very much inspired by jwz's music wrap-up. I know there's still a couple of days left in 2024, but I doubt anything will get added. This is just in order from oldest to newest and I'm not including any commentary other than I'm going to see The Vaccines in Portland and K.Flay in Sacramento. Bands link to the best guess at their website and the ablum links to a service that will link to whatever your streaming service of choice.

Please enjoy...

Coding with Claude

There was something I wanted to and I really didn’t have time for a side quest, so I asked Claude for help. As with most of my coding side quests, I spend a lot of time familiarizing myself with Python, again. Then for this particular quest I would also have to interact with the GitHub API. Oh, and I should probably figure out python virtual environments, because why not?

Ugh, all I want to do is label a bunch of pull requests based on specific files being modified!

If you buy into the AI hype, we’re either weeks away from being replaced or have already been replaced and we just don’t know it yet. Yes, it’s tiresome. Welcome to Technology! So I just threw everything into a prompt to see what would come back and SPOILER ALERT, it wasn’t great. It didn’t even work. Now, that was my fault probably more than a little bit, as I had left out some key details, like authenticating with GitHub Personal Access Tokens (PAT) and that there were close to 10,000 pull requests in this repository.

But, hey…AI is super intelligent! Except, this isn’t artificial intelligence, it’s generative AI. It’s probabilistically picking the next best token based on the garbage input I gave it. Over and over until it’s “done”, at which point it tells you that it’s done and everything is awesome.

A small aside, that most chat bots are so “happy” when you point out how wrong they are is irritating.

It never asked questions to get more context, to get a deeper understanding of the problem domain, or even to think of cases where the generated solution might not be a good solution at all. Nope, it needed to spit out text that would likely be interpreted by the python runtime. Which, that it’s even this good at doing that is truly wild. And yet, I was not feeling great about completing my side quest.

I then threw away everything and decided to start over and be more helpful to my partner in crime. The first iteration was just using a PAT to connect to GitHub and print out basic repository information. It worked! Okay, now let’s get the ten latest pull requests and print them out. It worked! Okay, now let’s test if any files in a specific directory were part of the pull request. It worked! Everything’s coming up Millhouse.

Now we come to the part where the basics are handled and you run into the cold, hard reality that the API doesn’t really handle what you want to do and that you’re going to need to get creative. Unsurprisingly, Claude was not very creative at coming up with solutions. Luckily, Claude had a partner that could help with the problem, which was that we were looking at going through way too many pull requests. Maybe we can batch them? The API supports pagination! Oh, but we still just paging over 10,000 pull requests.

Claude wasn’t aware that I really only wanted to label pull requests after a certain date. So, I provided that detail and we still ran into roadblocks, which I believe are mostly inherent either in the GitHut API or in PyGithub. Again, this was a side quest and I didn’t want to spend a ton of time on this, so we turn to hacks! I knew the ID of the pull request that would be the starting date and I just told Claude to start at that ID and then incrementally iterate through pull requests until we processed them all. It worked!

There’s still tons of problems, the most glaring being that if you don’t stop the script it will just keep trying to request pull requests that don’t exist because error checking is for humans I guess. I can imagine Claude yelling at me, “well, you never asked for error check you idiot. I would have been happy to provide that but noooooooo, you didn’t seem to think it was needed.” There’s a parable here about turning the implicit into the explicit, but that’s out of scope.

All this is to say that, at least for me, slowly walking through a process was far more effective that trying to get it to do everything at once. Anybody that has learned how to program, or even just solve problems, will say, “well, of course you should work in small incremental chunks” but the AI hype is working against that. There’s also the inference cost and context window growing too long, so much that Claude told me I should start a new chat because this side quest was going to blow through my quota faster.

Side quest, completed.

I Finally Got Covid

It's weird to finally get COVID-19, seeing as how it's June 2024. It was a good run, while it lasted. Having gotten the original vaccination and every available booster they would let me take, it hasn't been anything other than my standard summer cold. What's my standard summer cold? Two days of agonizing nasal congestion that prevents me from getting any meaningful amount of sleep and then 5-7 days of a rib-cracking cough.

Which, is what I'm going through now.

A COVID-19 test strip showing a positive result.

Yes, as soon as I started feeling symptons I masked when I went out. I didn't even think to test until Kat suggested it. That probably cost me two days of knowing, but...I'm not sure what I would have done different. Maybe I would have tried to get one of the anti-virals? I don't know.

I have noticed that trying to keep my blood sugar down has been...challenging to say the least. I'm having trouble finding the studies, but the gist is that the inflamatory response impacts how the body uses insulin which can lead to higher blood sugar. CAN CONFIRM! Keeping my sugar down has been tough and super frustrating for me because I typically has this very dialed in and completely under control. Very, very frustrating...

But, even though I finally did get COVID, I feel confident that my case is relatively mild is thanks to vaccines. Fuck yeah, science!