7:55 AM
Drive in. Twenty-two minutes. I am one of six people on my team who works from the office three days a week. I like the separation. When I'm in the building, I'm working. When I'm home, I'm not. Some people on the team can't make that split work remotely. I can't either, so I don't try.
8:15 AM
Desk. I have a second monitor I brought from home that's four inches wider than the standard issue. This matters more than you'd think. I have three documents open and a browser tab for our docs portal and a Jira board and a browser tab with the staging environment. You need screen space.
8:22 AM
Email. Seven messages since yesterday. One from Marguerite, the product manager on the query optimizer team, asking if I can review her first draft of the release notes for v9.4.2. She's been writing her own release notes lately because the team is shipping faster than our queue can absorb. Her drafts are always technically accurate and they read like engineering notes. My job is to translate them into something a DBA at a healthcare company can understand at 8 AM before their first coffee. I say yes, send it over.
8:35 AM
My main task today is a legacy guide update. The index maintenance guide for v7.x. We're still supporting v7 for another 18 months and there's a known gap in the documentation around partial index behavior with NULL values. Support has flagged it four times. It's on my list. Today I'm going to fix it.
8:38 AM
Read the support tickets. I pull the four that mention partial indexes and NULL values. They're all the same root issue: users are creating partial indexes with IS NOT NULL conditions expecting the index to exclude NULLs from result sets, and they're surprised when NULLs appear in queries that logically shouldn't touch the index. The documentation currently says partial indexes "narrow the scope of the index." That's true but it doesn't address the NULL behavior specifically, which is a known and somewhat counterintuitive aspect of how the query planner handles it.
9:00 AM
Before I write, I need to confirm my understanding is correct. I was a database administrator for nine years. I believe I understand this behavior. I don't write from belief. I test it. I spin up a v7.x instance in our documentation testing environment, create a table with a nullable column, create a partial index on that column with IS NOT NULL, and run a query I expect to use the index. I check the query plan with EXPLAIN. I try four variations: a range query, an equality check, a join, and a subquery. I document each result in a scratch file. Takes 35 minutes.
9:35 AM
I now know exactly what the documentation needs to say. There are two things: first, that a partial index with a WHERE IS NOT NULL condition does not exclude NULLs from queries that don't use the index, because the index is a performance artifact, not a data filter. Second, that users who want to exclude NULLs from query results should use an explicit WHERE clause in their query, not rely on index conditions. Neither of these is complicated. Both of them would have saved those four support callers several hours.
9:40 AM
Writing. I add a new section to the index maintenance guide: "Partial Indexes and NULL Value Behavior." It's 340 words. I include a code example showing the test case I ran, the query plan output, and the correct pattern for filtering NULLs. I also add a "common misunderstanding" callout box. My manager Henrik has a philosophical objection to callout boxes overuse. He thinks they're a documentation crutch. He's not entirely wrong. But this is one of the cases where a callout box is appropriate: a counterintuitive behavior that causes support calls, with a clear correct alternative. This is exactly what callout boxes are for.
10:30 AM
Marguerite's release notes draft arrives. I read it once all the way through. It's eight bullet points, technically accurate, written in active voice with good specificity. The problem is the order. The first item is a performance optimization for hash joins. That's important to the engineering team. The DBA using the software cares most about the first item I see, which is buried at item six: the behavior change for auto-vacuum thresholds. A behavior change affects existing configurations. That needs to be first or near first, clearly labeled as a change. I restructure the list, promote the behavior change, add a "behavior change" label. Send back with a note explaining why.
10:55 AM
Henrik stops by my desk and asks how the partial index guide is going. I tell him it'll be done today. He asks if there's anything else in the v7.x backlog I want to flag. There are three more items on my list, smaller than the NULL issue. I show him. He says to hit the NULL one today and triage the others for next sprint. I agree. He walks away. The whole interaction takes four minutes. This is what a good manager does: they give you a decision and trust you with the execution.
11:05 AM
Review my 340 words. Read them out loud. This is something I started doing six years ago and it's caught more errors than any other review technique I've tried. Awkward phrasing sounds awkward when you say it. Unclear steps become obvious when you're reciting them out loud and you realize you don't know what "then" refers to. I catch one place where I wrote "the index condition" when I meant "the index filter predicate" and that distinction matters for technical precision with this audience. Fix it.
11:30 AM
Publish the partial index guide update. File a note in the support ticket system linking to the updated section. The support engineers can now point callers to the new content instead of trying to explain the behavior over the phone. Took me about two hours of actual work to fix something that's been causing support calls for eighteen months. The lag between "known gap" and "fixed gap" was not two hours. It was wait time in a queue. That's the thing nobody sees.
12:00 PM
Lunch in the cafeteria. I eat with Lorena from the data modeling docs team and a newer writer named Bastian who joined eight months ago. Bastian is asking about how to get faster responses from engineers for technical review. I tell him to never ask an open-ended question. Send a specific hypothesis and ask them to confirm or correct it. They'll correct a wrong statement faster than they'll answer a blank question. Lorena agrees. This is the kind of thing you learn in year two and wish someone had told you in year one. We tell Bastian.
1:00 PM
Afternoon block. I use this for longer writing, the documentation that requires sustained concentration rather than reactive updating. Today I'm working on a new "getting started with index strategy" guide that doesn't exist yet. It's been on the roadmap for two quarters. I'm building it from an outline I finalized last week. The audience is DBAs who are new to our product. The goal is a guide that helps them understand when to use which index type, with concrete examples from realistic schemas.
1:05 PM
I write for 90 minutes without stopping. This is the part of the day I protect most carefully. I have my Slack on do-not-disturb. Only Henrik and Marguerite can break through. Nobody does today. I produce about 1,100 words. Section one is complete: when to index. Section two, what type of index, is half-drafted. The examples are good. They use a realistic e-commerce schema because that's the most common schema DBAs encounter and it makes the index decisions concrete rather than abstract.
2:40 PM
Back to reactive mode. Three Slack messages I missed. One from a developer asking about a docs error they found, a wrong parameter name in the v9.3 API reference. I look it up. They're right. I fix it in four minutes and reply: "Fixed, thanks for catching it." No performance. Just fixed.
3:00 PM
Marguerite responds to my release notes revision. She says the restructured order makes sense and asks why behavior changes should go first. I write a two-paragraph response. In the first paragraph I give the practical reason: it's the thing most likely to break something in a reader's existing setup, so it needs to be the first thing they process, not something they notice after they've already skimmed past it. In the second paragraph I give the general principle: release notes are read by people who are deciding whether and how to upgrade. The order should match the importance of the decision, not the importance to the engineering team.
4:30 PM
Drive home. Mireille, my wife, asks how work was. I say I fixed a documentation gap that's been causing support calls for eighteen months and started a new guide I've been meaning to write for two quarters and revised someone's release notes and confirmed some database behavior I thought I knew but needed to verify. She says "so a good day?" I say yeah, a good day. Pretty much a standard good day.