This is the latest chapter in my web serial, “Programmer at Large”. Previous chapters are best read at the Archive of our Own mirror. This chapter is also mirrored there.

I was only asleep for about a kilosecond before I started getting an alert from the system. It was quite reasonably informing me that if I insisted on sleeping in the hot tub then perhaps I should consider doing it face up?

I certainly hadn’t started face down in the water, so apparently I’d rolled over in my sleep at some point. I drifted for another couple of tens of seconds and then finally decided to acknowledge that OK yes breathing was useful. I rolled back over and sighed dramatically (important to get the order of those right).

I really hadn’t wanted to fall asleep there. Unsupervised sleep is awful even in zero gravity. In gravity you also have to deal with nonsense like which way up you sleep. I mean really, why should that matter?

Between the exercise, the heat, and the bad sleep I now had an annoying nagging headache and an overwhelming urge for food, water and painkillers, more or less in increasing order of priority.

I put in an order to the nearest delivery slot and heaved my way out of the hot tub to go have a shower while I waited for them to arrive.

I’m not too proud to admit that I shrieked when the cold water hit my head. It’s supposed to be very good for you after the hot tub but I was still half asleep and even at the best of times I usually manage to forget that these showers aren’t kept at a sensible temperature.

I lasted about 40 seconds before I decided enough was enough. I did feel better afterwards, but I swear that’s mostly because of how glad I was to have it stop.

Yes, I know that what’s good for you isn’t the same as what you enjoy. I’ve heard it enough times by now.

I dried off and quickly put my hair up into a bun – I really couldn’t be bothered to do it properly at that point – and by the time I was done with that the delivery had arrived, so I padded over to the nearby delivery point and tore into it.

I put the painkillers in my shunt and gulped down most of the electrolytic drink. Once my thirst had been slaked and the painkillers had kicked in, I turned my attention to the protein bars and devoured them in a few bites.

None of it would be particularly tasty in normal circumstances, but post-gym hunger is a harsh master and salt, water, sugar and protein was exactly what I needed at that point.

I removed the empty painkiller capsule and put it and the empty packaging back in the compartment to be taken for recycling. I figured it would take a while for things to kick in, so now was as good a time as any to get around to that meditation I’d been putting off.

I sat down cross legged (I can do a full lotus, but I couldn’t really be bothered. I know it’s cultural, but I also know the science says it doesn’t help) and called up my program. In the end it took me almost two kiloseconds to work through it – I’m not very good at meditation in the first place, and I was still feeling a bit twitchy from my impromptu nap, but eventually I got my mind into the right state and after that it proceeded more smoothly.

By the end of my meditation I was feeling a lot more human. My headache had subsided, along with the hunger and thirst. I went through some finishing stretches to undo the sitting – yet another reason why gravity is awful. Those finished, I fetched a clean uniform from the wall and changed into it.

I called up an image of myself and quickly checked my hair – I still couldn’t be bothered with more than a bun, but there’s no point in looking outright scruffy – and fixed a few stray bits at the back that I’d missed.

I decided I’d really had enough of people for now, so I got the transit chair back to the main ship and tucked myself away in a quiet pod to work on my Evolve strategies for a kilosecond or five.

Eventually, though, I got curious about work, and my schedule told me I was unlocked for it again and was welcome to resume if I wanted to, so I did.

I’d left some of my prototype zombie hunters running while I was away. They weren’t reporting anywhere except privately to me – I was sure they had bugs in them, but looking at some of the answers they gave now and seeing if they were right would help me figure out what those bugs were.

“Ide, how many potential zombies have my new hunters flagged up?”

“147”

“Ugh. All right, show me.”

I spent some time looking through the list and filtering things down. A bunch were false positives as expected – some interfaces that I had treated as read only in my original criteria were actually read/write but used some obscure different convention due to historical reasons – but eventually after some filtering I’d narrowed it down to 31 that were probably legitimate.

After a while of scanning through them at a high level and doing some basic triage I spotted one that looked interesting. I dug into it for a couple of kiloseconds until I was sure I understood what was going on, but it was exactly what it looked like.

Which left me with a dilemma: I was going to have to tell Kimiko about this. I didn’t want to seem too needy though, so it felt a bit soon to get in touch with them.

I dithered for a couple hundred seconds, but eventually concluded that I was being stupid. Even if I’d never met them I’d want to contact them about this, so putting off telling them about it because I did know who they were was just ridiculous.

I checked their status and they were apparently awake and working, so I opened up a line.

Arthur [vic-taf]: Hey, Kimiko?

Kimiko [jad-nic]: Oh, hey Arthur. What’s up?

Arthur [vic-taf]: I found some broken processes when I was looking into that bug for you, which has sent me off on a zombie hunt. It’s been running for the last couple of tens of kiloseconds and it surfaced something you should probably know about.

Kimiko [jad-nic]: That’s great, I’d love to hear about it later, but I’m kinda in the middle of figuring this yeast problem so do you mind if we take a pause on you telling me about it?

Arthur [vic-taf]: Actually this is about the yeast problem. I think. Maybe. Did you know the nutrient feed for the vat it’s in isn’t working properly?

Kimiko [jad-nic]: … what.

Arthur [vic-taf]: The feedback loop isn’t running properly – the process that’s monitoring the nutrient levels in the vat has the control part of it patched out, so the feed is just defaulting to a standard rate of flow.

Kimiko [jad-nic]: Argh, waste it. That would do it. This yeast uses slightly more feed than the normal batch, so it’s eating through the available feed stock and then doesn’t have enough to replace it. No wonder the little wasters are going sexual.

Arthur [vic-taf]: Oh good. I wasn’t sure it was relevant, but it seemed too much of a coincidence to ignore.

Kimiko [jad-nic]: Yeah this is absolutely relevant and you’ve probably just saved me a couple tens of kiloseconds of work debugging this. Thanks! [200 millivotes kudos attached]. But why on the ground is that happening?

Arthur [vic-taf]: Apparently the control sensor on it broke when we were last interstellar and we didn’t have replacement parts, so it was patched out as a temporary fix.

Kimiko [jad-nic]: Yeah, I remember that, but we replaced the sensors in-system and that should have triggered the reset condition, right?

Arthur [vic-taf]: Well it should have, but we picked up a new design from the locals and it uses a new interface, but the patch was expecting the old interface so the reset didn’t trigger.

Kimiko [jad-nic]: So who did the patch anyway? I should give them a rap on the knuckles.

Arthur [vic-taf]: Oh, uh, heh. Funny story… [Patch reference attached]

Kimiko [jad-nic]: Huh. I do not remember doing that at all.

Arthur [vic-taf]: Sorry.

Kimiko [jad-nic]: No biggie. Anyway, I’m going to go untangle this and see if I can prove this was all that was going on. Thanks again!

Arthur [vic-taf]: No problem! Happy to help. Good luck.

I closed off the link.

That was satisfying. Even if the plumbing bug turned out to be completely innocuous, this line of work had proven definitely useful – sure they’d have figured out the bug with the vat in the end, but that wasn’t the point. The point was that the zombie detection worked and it worked well enough that if we’d been running it we’d have caught this bug before it actually ruined a batch of yeast.

Which, I decided, made this a good point to down tools. I was still feeling a bit off from my nap earlier, but some proper sleep would fix that.

I shut down my workspace, plugged into the wall, an initiated my sleep program. The lights dimmed, and after a few tens of seconds I was once again fast asleep.

Next Chapter: How old is this?

Like my work and want to say thanks? Or just want to see more of it in advance? Support me on Patreon! You’ll get access to early drafts as and when they’re completed (although right now I’m a bit busy with PhD applications, so e.g. this chapter only got written late last night, but you’ll also see drafts of other blog posts).