I sleep well, and I get up a bit later than usual, feeling very refreshed. I spend a bit of time in my own kitchen, drinking tea and reading the news. I used to love reading the paper on paper in the morning. I no longer get the paper on paper, since it creates incredible mountains of waste at home. Instead, I have a tablet computer in my kitchen on which I read my favourite online news sites. The tablet is intentionally not configured to have access to IRC, email, Twitter, or other social media accounts. Reading social media in the morning isn't relaxing, so I do that at work instead.

I get to the office ready to tackle SmartHome's RPM fetish. I log into my work computer, and send Robin a private message on IRC. "Hey, Robin, do you have a quarter of an hour to help me sketch a response to shoot down a request from SmartHome to switch to RPM? If you're in the middle of something, finish that, I can start on my own."

In a minute, I hear Robin's combat boots stomping towards my office. She throws open my door, not bothering to knock. Oh good, I've upset her. Robin steps into my office and stands in front of my desk. In addition to the boots, she's wearing cargo trousers, and a photographer's multi-pocketed vest over a thin, green, army sweater and a uniform dress shirt. It's one of her favourite outfits, on days when she doesn't expect to have to deal with customers in person.

"What is going on? RPM packages? Who's having a painful brain fart?"

Robin is a dear friend, but it's taken me a lot of effort to get used to her habit of not bothering with social niceties when she's upset. I know she's not upset at me, which helps, but the loud voice, and the wording easily puts the others on the defensive. While I've gotten used to it, we've also made sure Robin avoids this behaviour in front of others, including the Team. Originally she said she felt like a fraud when she hid her true feelings, but I convinced her that it's OK.

"Robin, you're more upset than this deserves. Please take three deep breaths, and sit down." Three deep breaths works, it causes a physiological reaction that calms one down, and we've done this enough times that it's also a psychological trigger for Robin. Robin breathes, sits down, and says, in a normal voice, "OK, so what's going on?"

I explain about Sam's email from yesterday. "Clearly, we're not switching to RPM. We've built our system based on .deb packages, but we need to explain to SmartHome why we're not switching. I thought we'd outline a response together, and I'll flesh it out and reply by email. Here's what I have in mind so far."

I stand up and walk to my whiteboard. Whiteboards are an essential tool for our work, so we all have them in our rooms.

"First, we'll point out that RPM and .deb are functionally pretty much equivalent, right? RPM can do per-package digital signatures, but .deb gets the same benefit from APT repository signing. And so on. Are we agreed?"

"Of course. We've told other customers the same thing. I'm now thinking we should write a small white paper on why we use .deb and why we're not switching, so we're prepared for this the next time someone asks."

I nod. "Good idea, I'll put it on the list of things to do between clients. Or better yet, since we need it for SmartHome, we'll write it for them, and bill the hours to them. The contract says we can reuse that kind of thing in the future."

Robin also nods, and shifts to a more comfortable position in the chair.

"Next, I'm not going to go deep into the detailed differences between the two packaging formats, since they don't really matter. I think the other big point is the cost in time and quality of switching. It's not just about the format of individual packages, we've built our platform entirely on top of Debian, and switching to RPM would mean we'd need to switch to something like RHEL. And then everything changes, since the systems are quite different, for all they're built mostly from the same upstream components. Things like system wide policies differ, and figuring all of those out is many months of work. Agreed?"

Robin nods again. "Agreed. Can we sell SmartHome some training on how to make .deb packages?"

I smile. Robin's past her anger now. "That's a good idea. I'll suggest that to Sam, in case their developers are hesitant about .deb packages. Who should give the training, you?"

"I think I'm going to be busy enough. Would Nina be OK?"

"I think so. I'll check with her. We're agreed then."

Robin stands up and leaves, I sit in my chair and flex my fingers over the keyboard, and hit on "reply" for Sam's mail.

"Dear Sam, we had a little discussion with Robin about switching to RPM and I'm afraid it's something we advise strongly against. Let me explain why..."

The following morning, Nick comes to visit. He uses the doorbell, and I happen to be closest to the door so I open it. He stands there with his hat in his hands, looking as nervous as a teenager picking up a date from their home for the first time.

"Hi, Nick, how can I help you?"

"Hi, Anna, I'm here to see Nina. Is she in?"

"Why yes, I believe she is. Come in and we'll see together."

I'm intensely curious. Nina has basically never had a visitor before, and Nick seems much more nervous than a professional visit would warrant. What's going on?

We walk together to Nina's lab, and knock on the door. In a moment, Nina opens it. She sees Nick.

"Hi, Nick, I'm glad you came, Thanks, Anna, I invited Nick to talk over a few things with him."

"OK, I'll leave you two to get on with it, then." I nod at Nick, and walk to my own room. An hour or so later, I need to go see Robin about something, and I choose the route past Nina's lab. The door is open and I can hear Nina explain about the trunks. She's not trying to sell them, just proudly presenting them, geek-to-geek, going them over in very technical detail. I don't stop, not wanting to disturb the two, and continue to Robin's room.

"Hi, Robin, did you know Nick is here visiting Nina? They're talking in her lab?"

Robin grins. "Anna, you old matchmaker. What did you do?"

"Nothing! It wasn't me and you can't prove otherwise. This took me completely by surprise."

Robin is still grinning. I can tell that she thinks I'm trying to get the two young ones to become interested in each other. Not without justification, as I've done something similar before, though never in a professional context. And not this time.

"So what are they talking about?"

"She's telling him about trunks, and he seems interested."

"Hah. A geek date, maybe?"

"We'll see. Anyway, I wanted to ask you about the SmartHome situation."

We discuss for a few minutes, and then I walk back to my office, carefully avoiding Nina's lab. I sit down and process emails for a while, until someone knocks at my door. It's Nina.

"Hi, Anna, I'm going out for lunch with Nick. I'll be back in a couple of hours."

"Sure, Nina, go ahead." I hesitate a moment. "Please excuse an old lady, but what's going on?"

Nina smiles her crooked smile. She can read me and knows I am curious if there's something going on between her and Nick. "Oh, nothing, I just felt the, er, urge to spend some time with Nick. He's a smart guy, under the surface."

I smile back at Nina. Her answer has told me nothing useful. "Go on then. See you later."

Robin has called together a workshop to discuss porting our framework onto SmartHome's hardware platform. It's half a day, with her, Andy, and Bert. I tag along to get a feeling of the situation. Turns out the three have already figured out a battle plan, based on an initial spike and previous porting for earlier clients.

Robin stands up in in front of the whiteboard, and goes into full-on lecturer mode. "OK, our kernel porting has gone well, we have a booting kernel, and a CI that can build and install a kernel from our git server, and test that the kernel boots and interacts with the outside world. The hardware is similar to most of the embedded ARM devices we've worked with before, even if it's a new SoC. There's a 3G modem for communication."

Bert lifts his hand. He's still young enough to remember when he was in school. "Is the hardware supported by Debian?"

"Not yet, but apart from the kernel it should be only a few packages we need to tweak, to get a core Debian system running on the box. After that, it should be plain sailing. We'll create an image using debootstrap and our own wrapper, flash the device with the new image, and boot into a real Debian system, albeit with a custom kernel. The usual thing, in other words."

I stand up. "Looks like you have things well in hand. I'm old enough to have learnt that the universe likes to throw nasty surprises even in the simplest things, so I'm going to assume it'll take a while before we actually have Debian running on the SmartHome hardware. That's OK, but please do the work in tight weekly iterations so we can demonstrate progress often to the client. And ourselves."

"Will do." Robin's also been doing this work a long time and knows things will always be more difficult than one foresees. "And we'll prepare patches to send to Debian for everything that's generally useful, I assume."

"Yep, that's the way. The less we have to keep maintaining ourselves, the better. Also, if others can benefit from our changes, it's the Right Thing to share them."

Robin and Andy are at the SmartHome office, in the meeting room already well-known to us. With the Team's IoT platform porting to the client hardware platform underway, it's time to present a plan to the client for how to re-architect and re-implement their applications.

Robin has her laptop connected to the projector, and stands at the end of the big, oval meeting table. She's wearing dark blue trousers, a white shirt with a tie, and a dark-coloured vest. This is a business meeting with a client, so she's skipped her usual comfy, army-surplus chic. Andy is likewise dressed in a suit, though without a tie.

The SmartHome engineers are slowly dripping into the room, in ones and twos. They are talking with each other, about other things they're in the middle of in their own jobs. Among the final ones, a couple of 20-somethings, dressed in loud Hawaii shirts and ripped jeans, enter the room, stop, and look at Robin.

One of them pokes the other in the arm, and speaks, not loudly, but loud enough to be heard over the quiet discussion of the others. "See, I told you she's lesbian. Look at her outfit."

The room goes quiet. Most of the engineers squirm in their chairs and look uncomfortable. Robin looks up, stands up, puts her arms behind her back, and stares at the two who came in. "What's your name?"

"Er, I'm Anders." The guy seems to realize he's crossed a line.

Right at that moment Sam walks in. Robin looks at him. "Hi Sam, we have problem. Anders here thought it would be funny to make comments about my sexual orientation, and the whole room heard it. Please handle it."

Sam looks at Robin, then at Anders. "Anders, you idiot, what did you do?"

Anders looks surprised. "I merely said she looks lesbian. You know, woman in a suit and tie and so on. Also, she's always so aggressive, telling us what to do." Robin keeps her face as stony as she can, but it's clear she's fuming.

Sam shakes his head. "I'm afraid I'm going to have to ask you to leave the meeting. I'll talk with you afterwards. Our contract with the Team is clear, your behaviour is unacceptable when we work with them."

Andy is calm. Andy is always calm. Andy calmly does not take crap. "It's not just against the contract. It's wrong. It's not how professionals treat people."

This doesn't make Anders any calmer. "Come on Sam, look at her! No woman would wear that unless she's a lesbian. And if she is, what's the harm in saying it? Don't I have any freedom of speech here anymore? And all you others, you're with me, right? Are we going to let an uppity woman treat us like this?"

The others are clearly not willing to stick their necks out to help poor Anders. Robin is still fuming.

"Boy, listen very carefully. My persona, sexual orientation, or anything else outside the work I'm supposed to do here for your employer are completely outside the scope of allowed conversation for you. Even a junior should understand that."

Anders turns around to face Robin. "Oh yeah? Says who?"

Robin smiles a little, a tight smile that bends her mouth only a little, and does not reach her eyes. Her voice is steady, slow, and cold. "The contract your employer signed with us, to start with. Basic politeness to end with. The contract says that your employer is responsible for making sure all their employees behave professionally when working with us, and if lapses in professionalism aren't dealt with in a reasonable way, we can walk away and leave the project. But SmartHome will pay our fee anyway."

Robin takes a breath, and frowns a little. "Would you like me to insist that Sam fires you? Would that be a reasonable way of dealing with this?"

Sam takes Anders by the arm and pulls him towards the door. "Anders, you shut up now, and wait at your desk. You're in trouble now." Anders starts saying something. "No, shut up, I'll talk to you later."

Anders leaves the room. He's talking loudly to himself, clearly now very angry. He can be heard in the meeting room, until Sam closes the door.

"Robin, I apologise for that. I clearly haven't made it clear to all of us inside SmartHome what we expect from them in this project. Do you want to continue your presentation? Or is it better if we reschedule until later in the week?"

Robin is quiet for a while, and looks at Andy. "I think we'll continue with the presentation. But first, I'd like to say that I don't require anything more than basic professional courtesy from those I work with. I'm sorry for what happened today. It's relatively mild compared to some of the things I've encountered in my career, but I'm not willing to endure any disrespect anymore. I hope the rest of you can understand that, and that we can work together."

The engineers still look a little uneasy, but the general atmosphere eases up a bit. Robin presses a button on her laptop, and the first slide of her slideshow shows up on the projector screen. It's a cute kitten.

Back at the Team office, Robin and Andy come straight to my office. I can see Robin's upset.

"What's wrong?"

"There was a confrontation at SmartHome. Andy, perhaps you should tell the story, I might get upset all over again."

Andy briefly tells what's happened. Although the presentation went well, in the end, and nothing further was said of the situation with Anders, it's clearly going to be a problem in the near future.

"I see. Robin, I'm sorry, you were right to be hesitant about taking on SmartHome as a client."

Robin shakes her head. "It can't be helped now. And for the record, I don't like how things went down today. Not sure Sam handled it properly."

Andy stands up, and puts his hands in his trouser pockets. "I feel I must say something, and that is that Robin didn't do anything wrong. The guy was way out of line, and it was right to ask his boss to handle the situation. Sam should've taken Anders out of the room, and tell him to sit out of the meeting."

I nod, and look Robin right in the eyes. "Andy's right, you didn't do anything wrong. It was Sam's job to handle the situation. He handled it badly, that's not our fault. That said, and please don't take this as any kind of attack or complaint against yourself, I wish it would've been possible to handle this entirely privately. It might have resulted in less confrontation."

After an impressive grimace, Robin agrees. "Maybe I should've done that. But I wasn't feeling like giving the boy a break. However, even so, I'm not out for his neck. Would it be possible for you to let Sam know that I'm OK if Anders isn't fired?"

"Thanks, I'll tell him. Do you want him to be kept out of the project?"

Robin shrugs. "I don't really care. I doubt he'll be offensive again, but he'll resent me for the rest of his life, I'm sure. Anyway, I doubt he's the only sexist jerk there."

"In that case I'll tell Sam that Anders can stay in the project too. Let's hope he's learnt his lesson and that he and others don't take that as an excuse to be jerks, since they see they get to keep their jobs anyway. Robin, you've had a rough day, you should probably go home and relax. You too, Andy."

The two go, and I call Sam. Some things are better handled via voice, instead of email.

"Hi, Sam, I heard there was an incident today involving Anders."

Sam's voice is sombre, but not angry. "Yeah. I've had a talk with him. How's the situation at your end?"

I keep my voice sombre as well. No point in being excited right now. "I just heard from Robin. She agrees that if Anders promises to behave himself in the future, he can stay on."

"I just told him that he's going to be formally fired tomorrow."

"That's not necessary for us." I take deep breath, intentionally making it noisy so that Sam hears it even over the phone. "Between you and me, Robin could've handled this privately, but then so could you, Sam. It's enough of a mess, so I think, we at the Team think, it's gone far enough. Don't you agree?"

"Well, I'm glad to hear you say so. I'd like to keep Anders. He's one of our rock stars. I'll call him tonight."

I make a grimace of my own, though not as bad as Robin's. Rock star is a term we've learnt to loathe. It tends to be a harbinger of attitude problems.

"Just tell him that he's getting off with a warning, and that he shouldn't expect anyone from the Team let sexist behaviour or other harassment to pass. Not even as a joke."

"I understand. I'll call him now. If I wait until the morning he might spend the night getting angrier, and do something stupid."

We hang up. It's getting late, but I have one more chore to do, and I'd better get to it while I still have things clearly in my mind. I write a description of the incident in our company internal blog, which acts as an internal knowledge base. This will let everyone in the Team know what has happened. It also means we won't forget it, and we can use this as a data point when considering brogrammer clients in the future.

I wander around the offices, and spot that Andy is still there. He sits at his workstation, and seems to be reading news sites.

"Andy, do you have moment?"

He is a little startled. Clearly he was deep in his thoughts.


"I wanted to talk with you privately about what happened today. You up for that?"

We go into my office, and I close the door behind me. I'd rather not be overheard or disturbed for this.

"Could you briefly go over what happened after Anders was thrown out? The presentation, and how it went, and how SmartHome took it?"

Andy gives a sketchy summary of Robin's talk. It's what we'd discussed beforehand. SmartHome was dependent on a central cloud service, for storing measurements and logs, and for controlling the devices, even though everything is also stored locally on the hub device. The hub even has a local database, a real one, not just SQLite. A database with 11 tables with overlapping data and no unique key to match things between tables. No access control between tables. A pretty mess. The engineers hadn't liked having their work described that way, but at least most of them warmed up to the suggestion of having a program provide a simple HTTP API to the database, with access control, and a much simpler data model.

"Thanks. How did Robin do?"

"She went a bit softer on them than we'd planned. I guess she didn't want to be harsh after Anders."

I nod understanding. "OK, sounds like it went reasonably well. I would've been fine to postpone the presentation by a day or two, to let everyone calm down, but sounds like Robin and you did well."

Andy finally goes home. Even he shows signs of it having been a long, stressful day. Nobody likes confrontations like that. Except maybe the kind of macho brogrammer jerk that Anders seems to be.

I do a final round around the office, and find everything to be dark. I get my things, turn off the remaining lights, and go home. It's dark, and wet. The street is old cobblestones, shiny, and there's more rain coming down softly. The stones are slippery, but I'm dressed for the weather. It's late enough that it's long past rush hour, so while the streets aren't empty, there are only occasional cars. At the same time it's not early enough for the party folk to be out and about. Small groups of teenagers roam the streets, but aren't making a nuisance of themselves. I guess the rain dampens their enthusiasm for mischief. It's one of my favourite times to enjoy the city.

I round a corner and almost run into someone. He grabs me by the shoulders.

"Anna, is that you? God, it's been years! How are you?"

It's Russ. My ex. Well, one of my exes. In a previous life many years ago we were going out, but it ended. In fact, I was expecting him to propose, but instead he broke up with me. It was rough on me, but I got over it. We've not seen each other since. But hearing his voice, and seeing his surprised-happy face brings up pleasant memories. I guess I really have gotten over the breakup. I smile.

"Russ! It's you! It's been years. I'm good! Except it's been a lousy day at work just today."

"Oh dear. Do you want to talk about it?"

That's classic Russ. I nod, and he walks with me to a pub close by. It's a pub in the English style, in Helsinki. Not my usual kind of place, but it's quiet and dry, so it'll do. We have drinks, and I pour out a suitably pseudonymised version of the day's events. It feels good, I don't often get to talk with a sympathetic friend about my work. He makes the right kind of noises, and tells about his own life. We carefully avoid touching on the breakup. I do that to avoid ruining this evening. I can take it up with him some day. Today I just want to enjoy good company.

Which I do, for longer than is sensible, and with a glass of whisky too many maybe. When it gets time, we leave, shake hands, and go our separate ways. Younger me would've gone home with him. Younger me did. I've learnt to be more careful since. Russ is very nice tonight, but he hurt me once. If he's grown and I can trust him to not hurt me again, we can consider things, but not now. I'm such a romantic.