Hello, visitors! Thanks for stopping by to see what kind of novel I wrote in thirty days during November 2022. Technical Collateral is a comedy novel about Government Information Technology. A few notes about the writing intention and process are available in the companion writing log. But before we start, there’s one very serious note to highlight:
One Very Serious Note (Highlighted)
I know what you’re thinking (and hoping): This is a comic novel about Government IT and the author is a Government IT professional with (cough-cough) twenty-five years of experience, so naturally the novel will be filled with in-jokes and references to real people and events in the life in the author. You’re probably reading this with gleeful anticipation, eager to see yourself somewhere in here and itching to send an email to your libel suit lawyer. If so, let me disabuse you of that notion. To quote and highlight a relevant Wikipedia article:
The story, all names, characters, and incidents portrayed in this production are fictitious. No identification with actual persons (living or deceased), places, buildings, and products is intended or should be inferred.
AND I MEAN THAT. To the point of modifying good characters, places, events and subplots that I found too close to reality. If you think you recognize yourself or others, you’re wrong. The novel that will be a vicious roman-à-clé about my own experiences in government IT will be written after my retirement.
One more note, technically less important but still crucial : I’m writing the novel as I go. I only have a vague plan. I may change my mind about names, backstories, precipitating events or sub-plots as I go. What you’re reading one day may or may not be the same the next day. Characters may be renamed, crucial plot point may be re-seeded in existing chapters, and inconsistencies may pop up everywhere, as the point of this exercise is to write quickly just to get it done. Never mind—the novel is written, so it’s not going to change.
All right… let’s begin.
Prologue – Out of Place, Out of Time, Out of Patience
Federal Public Servants aren’t supposed to save the world, thought Ravi with exasperation as he dashed from one burnt-out vehicle to another.
Sparks Street never looked as lively as it did right now, with smoking husks of battle drones strewn about everywhere he looked. The acrid smell of toasted electronics was heavier than whatever wafted from LeBreton Flats after a heavy summer concert, and the heavy buzzing of drones patrolling downtown was hard to ignore. In terms of human presence, however, it looked about as empty as a normal Tuesday evening — which suited Ravi just fine. War, even war against an amorphous enemy, was no time to take a stroll in Parliament’s shadow.
Except for you, you idiot.
Which brought Ravi back to his main thesis: Federal public servants weren’t supposed to save the world. Prevent it from getting worse, certainly. Iteratively improve it over time, sure, in the best of circumstances. But saving it? The federal public service was no place for heroes. Especially in Information Technology: Heroes meant that something had gone dreadfully wrong.
Which was a good summary of the situation.
Ravi chanced a glance down the street, through the smoky haze that remained from the latest skirmish between Government and Sword drones. He was fifty metres away from the Parliament LRT Station exit he’d come from, and he still had a hundred and fifty metres to go until the entrance to the Sparks data centre.
My way looks clear, whispered Jany through the pod in his ear.
He couldn’t answer without making a noise, so he didn’t. He knew that he was surprisingly irrelevant in this situation. What really mattered was in his suit pocket—a data wafer with a killbot protocol too sensitive to be sent in any other way than through a tactical boot-net.
No amount of “I’m not supposed to be here!” protests could make reality go away: He had to run through another city block, and hope that the door at the end of it wasn’t locked. He hefted the pulse rifle in his hand, feeling the weight of the ferrous cores inside the main cylinder. He wasn’t Bambi, helpless against the hunters. He had what it would take to fight back.
As long as the threat didn’t outnumber him, as long as he saw it in time, as long as he could aim the rifle, as long as he didn’t drop it along the way or take a spill in the drone debris ahead of him.
Stop. Pause. Breathe.
He bolted from the burnt-out delivery van and sped toward his next stop. He wasn’t going to try to run the entire way in one shot – a few stops here and there would let him regroup, reassess and panic all over again before the next dash.
Or at least, that was the theory. Reality had another plan in mind, and as he rushed to the small kiosk besides which he intended to rest, the whine of drone rotors grew and a Sword warbot turned the corner in front of him.
His weapon was already raised, so he just had to aim it. The briefing he’d been given two hours ago had been to the point: Like shotguns, EMP pulse rifles had roughly a twenty-degree kill cone. As long as he aimed it in the general direction, he should be fine. But he had to be quick about it, because the bots were always faster.
And he didn’t have to look around to understand what that meant for a soft fleshy target like him.
As the drone turned toward him, he pressed the trigger.
In the flash between action and reaction, wondering which machine would take out the other, he wondered how he got to that point. Had it been nine months or thirty years? Who got the blame?
All he knew is that it had begun once upon a time, in fair Ottawa.
Chapter 1 – In Fair Ottawa
As the bus drove over the bridge spanning the Rideau River on the way to the Chrétien campus, Ravi had a slight smile on his face. He looked through the window at the new building he’d call his office.
Thump-thump-thump went the bus over the metal railings of the bridge.
The OC Transpo bus was filled with people like him, more or less. The transit route linked the nearest LRT station with the cluster of federal buildings that was known as the Chrétien campus, in the so-called heart of Ottawa South.
The location of the campus had been the topic of much debate fifteen years ago. Ravi had been a high schooler in Mississauga at the time, so the hubbub hadn’t really registered… but Wikipedia maintained that it had been a Really Big Deal at the time.
So now, years later, two thousand federal public servants made their way to the campus every day, and it looked as if fifty of them were on the same bus. No suits, no ties, no T-shirts—just straightforward business casual clothing, without much pretension. Remember; you’re with the bus riders, not the car drivers.
Thump-thump-thump went the bus again.
The May weather was mild and sunny, and felt like Ravi did. Leaving Montréal and Orbiware had been a challenge, but now everything would fall into place. A stable boring job, back at home for the evening, weekends with the kids—exactly what he wanted right now.
Looking around at other bus riders staring into space, though, Ravi wondered what others thought. Would the thousand-yards blank expression come for him within weeks or years? Did they still like their jobs? Did they still like their lives?
The backbeat came from the bus. A deep bass line started playing out of the bus intercom. Around Ravi, people started snapping their fingers. Then a man with a deep voice started singing behind him.
They say gov’ment’s made of laws and regulations
But we office drones know that’s mere superstition
Departments are made of flesh and blood schmucks
Doing our best, digging every day in the muck
Then, the entire bus took over the chorus.
You send sixty emails, what do you get?
Out-of-office notes, and a day closer to death
ADM don’t ask me, ’cause I don’t know
I owe my pay to no Phoenix woes.
An older woman took over the next verse with a vengeance.
I get up in the mornin’ when the sun don’t shine.
Feed the kids, checkin’ my phone all the time
Then the bus so that I can be there at nine
Listening to the E-Xes as they whine
The entire bus really got into the second go at the chorus.
You send sixty emails, what do you get?
Out-of-office notes, and a day closer to death
ADM don’t ask me, ’cause I don’t know
I owe my pay to no Phoenix woes.
A younger man at the front brought the last verse home.
We may complain, but that’s really our style
To blow off steam and be fine for a while
In the end we’ll do what needs to be done.
Someone’s gotta be it even when it’s no fun.
The bus stopped: End of the line. By this time, Ravi was singing along with the rest of the crowd leaving the bus:
You send sixty emails, what do you get?
Out-of-office notes, and a day closer to death
ADM don’t ask me, ’cause I don’t know
I owe my pay to no Phoenix woes.
The crowd dispersed, each going their own direction. Smelling the fresh spring air, Ravi hurried to the entrance of the Boudria building — the onboarding email had asked him to be in the lobby by nine, and he didn’t want to miss that.
He made it with two minutes to spare, sitting next to a fidgety young Asian man. Nine o’clock came and went, and after enduring another two minutes of the young man’s fidgeting, Ravi felt himself tensing up. Might as well share the pain.
“First day?” she said to the young man.
The young man jumped slightly, but stopped fidgeting and turned to Ravi.
“Yeah. Programmer for CLC.”
“No way!” said Ravi with a smile. “Me too. First day. Got the computer delivered at home last week.”
“So did I. Maybe we’re going to the same place?”
“Maybe. Although I couldn’t tell you when I’m going — All I know is that I’m in the application development division.”
“Me too! First real job. Finished school last month. Are you from another department?”
“Nah,” shrugged Ravi. “Six weeks ago, I was in Montréal working for Orbiware.”
The young man’s eyes nearly popped out of his head, as Ravi predicted they would. Everyone had heard of Orbiware, and nearly everyone had played at least something in their catalogue.
“You worked on computer games?”
“Mostly the Murderers’ Oath series. Back-end programming.”
“No way! I Love Murderer’s Oath! But what are you doing here? Aren’t you guys super-well paid?”
Ravi sighed. Of course everyone thought that.
“It’s not that clear. You love games, right? Name’s Ravi, by the way.”
He held out his hand. If they were going to talk salary a minute after meeting, might as well get to know each other.
The young man shook it.
“I’m Min-Jun! Great meeting you, Ravi. Yeah, I sure love videogames.”
“Yeah, well, so does everyone. So there’s a long, long list of people working to work for Orbiware. It doesn’t take much to find a replacement, so they pay you as little as they can and hope you do it for the love of the game.”
“okay, but still they say everyone makes six figures—”
“That’s not even true, and they ask you to work unpaid overtime. When you’re working sixty or seventy hours per week—” As I did when my daughter was born, he thought with some lingering anger. “-The per-hour rate isn’t all that different from government work.”
“Plus the advantages.”
“So they say.”
“Right. But how was it? You were at their headquarters, right?”
Ravi could have sighed again — of course they’d still want to know about what it’s like making games. Fine, fine, at least it was a way to pass time.
“Right. Well, you see, my job was really in the foundation work for the games — coming up with algorithms for path-finding, defining game logic, taking care of optimization-“
“Are you Ravi and Min-Jun?” chirped a voice behind them.
Ravi looked up. A thin white woman with shoulder-length straight hair was standing next to them, looking intensely at them. They agreed.
“Good! I’m here to take you upstairs! I don’t have a lot of time, but everyone else was busy! I’ll bring you up and you’ll figure out the rest with your team lead!”
She gestured at them impatiently to get up and follow her. They didn’t dawdle, because she didn’t, whooshing them through the security checkpoint as quickly as possible while delivering a steady welcome patter. Her staccato gestures and head movements reminded him of a bird. A very nervous bird. Before they knew it, they were already in an elevator.
“I’m so glad you’re joining our team!” she said with emphasis but no real enthusiasm. “We have so much great work to be done just waiting for you! You’re going to be real assets to our team, and you’ll see: we work hard and we play hard! We’re like a family, and we take care of our own!”
Ravi couldn’t help notice that, well,
- She hadn’t stopped to take a breath in over two minutes,
- They’d been able to take the elevator and get through the security gates before she stopped her patter,
- She wasn’t really listening to them or even allowing them the chance to even grunt approvingly, and
- Everything she said seemed to be straight out of leadership courses and articles. Any management jargon bingo card would have been filled in thirty seconds.
Eventually she stopped, and gestured toward a small closed office.
“That’s my place! I expect that your team leaders will deal with most of your issues, but I’m right here! Open door policy!”
Without skipping a beat, she started spitting out rhymes.
Look at my office! It’s mine and I deserved it!
Worked long hours to get noticed and promoted!
I deserve all I get because I’m out for blood!
I ain’t here to make friends, I’m better than ya!
She sat in her high-back chair and gave it a spin.
No boy, no friends, no damns to hold me back!
EX by thirty-five, I’m all on the attack!
If my heart goes crack, it will be an honour.
I’m not a loser; I’d rather be a goner.
There was a row of diplomas on the wall and she pointed to all of them. Individually.
Never mind the usual management malarkey
My one advice for you is not to get in my way.
You’re only worthy if you make me look good
Otherwise bang-bang like they do in the hood.
Her smile returned plastered on her face the moment the song was over.
“Name’s Karen, by the way!”
White woman with shoulder-long hair named Karen, thought Ravi. That’ll be easy to remember.
She typed a burst on her keyboard. Ravi noticed that she had some heavy-duty stock-tracking site going on her second monitor.
“If you can just wait in the corridor, your team leads will be there to pick you up shortly. Please close the door.”
Ravi was able to close the door before making a face. He looked at Min-Jun and both started laughing under their breath.
A white man in his fifties approached them quickly. Beard, short brown hair, simple business shirt, unremarkable pants and shoes.
“Oh God, I got here too late. You’ve met Karen?”
Both newcomers nodded.
“Sorry about that. My name is Michel. I’ll be your team lead, Ravi. I should have been the one to pick you up downstairs, but I got held up. So sorry. At least you got the introduction.”
Ravi couldn’t help but bark a short soft laugh.
“Right. OK, let’s show you your office. Come with me.”
Michel gestured and started moving away, with Ravi following.
“How about me?” asked Min-Jun.
Michel stopped and stepped back.
“Your manager should be around shortly, he’s just coming from farther away. It’s better you stay here to meet him. If there’s no one in five minutes, come to our area, we’re right there.”
He pointed to a cluster of cubicles not too far away.
“Ravi, let’s go see your office.”
Ravi followed and within moments felt at ease. The pod he’d been assigned was just as terrible as the one at Orbiware, except that the government made no effort to pretend that it was great. His pod was right next to Michel’s area, but it was bare and noticeably worn-out.
Michel’s pod, on the other hand, showed the clear hallmarks of a long-timer who had accumulated a lot of decorations over the year. A spider plant spouting little shooters. Cartoons on the partitions. Well-worn high-back black chair when every other seat in the place was a gray Aeron ripoff.
Both of them sat down, and Ravi brought his chair closer to Michel’s.
“So, welcome aboard. I’ll be spending most of the day making sure you know your way around.”
“Good. I was wondering — I remember you from the interview, but the woman leading it, the hiring manager-“
“Carol? Oh, she left two weeks ago for Transport. Unexpected, but we’re adjusting. I’m the acting manager now, but that still leaves us one person short so we’re really happy you’re beginning today.”
Ravi’s eyes narrowed slightly. A manager leaving a project in the middle of it? Was that normal here?
“Did they talk to you about the project?”
“Some kind of system for tracking shipments?”
“Close. That’s the new project our division is working on. They’re having a bit of trouble meeting their targets, so they’re moving a few people over there, and they’re asking us to take care of the legacy system until then.”
Ravi’s disappointment must have been visible, because Michel quickly waved his hand as if to shoo the thought away.
“I know that’s not very exciting, but think of it as an apprenticeship period while you learn the ropes around here. We’ll be back on feature development whenever the new system is delivered a year from now.”
“The flip side of that is that you’re unlikely to be asked for overtime. The system is stable, the clients are still happy with it and the feature requests are piling up on the new system’s JIRA board.”
“Sounds like a good learning-“
“Hey, don’t try to make it look pretty for me. I know it’s not what you want to do. It’s not even what I want to do. I’m a system architect. My fun is mapping out modules and defining APIs. Keeping an application on life support until they pull the plug isn’t my idea of fun.”
“You seem… content with it?”
He leaned back in his chair, cleared his throat and his voice sunk down two or three octaves.
Look at me, I’m thirty-three years in
I’ve heard it all, seen it all, done it all.
My capacity to be surprised is thin
But my worst days? I just damn it all
With relish, he sank into the chorus:
I’m still a loyal servant to the crown
I’m not letting anyone grind me down
But at this stage, all I’ve got to say
(is). It’s all pensionable time anyway.
He pointed at a picture on his desk: Him, a woman his age and two young women.
Kids are grown up, moved out and gone
Just me and my wife, our golden years
Evenings watching TV until we yawn,
“Is this it?” is the only thing we fear.
I’m still a loyal servant to the crown
I’m not letting anyone grind me down
But at this stage, all I’ve got to say
(is). It’s all pensionable time anyway.
He swung open the door to his cabinet, revealing a collage of blueprints and artist’s rendering of a nice big forest cottage.
I still have dreams, they’re just not here
My head’s at rest, I’m feathering my nest.
Retirement’s much closer than it appears
What comes next is going to be the best
“I don’t want to belabour the point,” said Michel, “but…”
I’m still a loyal servant to the crown
I’m not letting anyone grind me down
But at this stage, all I’ve got to say
(is). It’s all pensionable time anyway.
He closed the cabinet door with a clack.
“Now how about we go meet the rest of the team? Won’t take long.”
Ravi nodded. It’s not as if he had any better idea.
“Right. Over there, between the headphones, we have Jasmine.”
He pointed at the other occupied pod in their area, where a young black woman was typing away with her back to them, a faint song coming from the speakers over her head.
Michel typed a few words on his computer, and her typing stopped. She removed her headphones.
“Jasmine, here’s Ravi. Newest IT-3.”
She smiled, and Ravi was relieved to see that it was a genuine one.
“Orbiware, right? Welcome!”
“Jasmine is, or rather was, our newest recruit. Junior developer, but it won’t stay like that for a long time.”
“Thanks boss. Is it time for the hazing ritual?
“She’s kidding. We don’t do hazing. It’s juvenile. The beginning is supposed to be smooth, not pointlessly difficult. It would be like starting a novel with musical segments when there’s nothing else like that in the rest of the book.”
Who would do that?
“Right, no hazing. Who else is working with us?”
“That’s pretty much it. Small team. Manager left two weeks ago, and we were already down a box from last winter. We’re hiring, though.”
“This kind of turnover happens all the time. We’ll be fine. You won’t stay the rookie for long.”
“Small favour, I guess. What else?”
“I suppose we should get you your security pass, tell you where the washrooms are hidden. Come on.”
Michel got up, and Ravi quickly followed. As they moved through the cubicles, Ravi lowered his voice and had to ask the question.
“So, about that director Karen-”
“Oh, that. Nothing to worry about. She doesn’t really bother us. Spends more time day trading than managing. She’s pretty good at signing stuff quickly, though.”
“Is she always that intense?”
“Not sure ‘intense’ is the right word, but yeah. She’s been here six months, will be gone in a year and a half. High-flyer. Not technical.”
“Couldn’t code HTML if she had to. Nods a lot during code review. A professional manager. We don’t see a lot of those around here, so I wonder what happened there. But at least she knows her limitations. As I said, she leaves us-”
“Hey, Michel!” came a loud voice from over the cubicle partition. “Fresh meat with you?”
Ravi certainly saw the flicker of annoyance that flashed over Michel’s face. Turning toward the voice, he saw a stocky blonde-haired man, maybe in his fifties. Big, big guy. He was smiling, but like a shark.
“Hey Keith. This is Ravi, our newest IT-3. Comes from the private sector.”
“Come here to save the world from us pathetic public servants, is that it? Gonna show us how it’s done? Can’t wait to shake things-“
“Keith is the senior technical developer on the newest Logistics system,” interrupted Michel quickly. “Crucial piece of the puzzle.”
“Come on, Michel, I’m the one putting the puzzle together while you guys keep talking about it.”
He rolled his eyes and turned his gaze to Ravi. Ravi didn’t like it.
“As for you, given up your illusions right now. It will be easier that way. Pretty soon, you’ ll be just like us.”
“Right,” said Michel noncommittally. “But we’ve got to go. Meeting with at the security for his pass. See you later.”
Michel and Ravi walked silently for a few paces.
“So that was Keith,” finally said Michel once they were out of earshot.
“I hope you’re kidding. He’s been here even longer than I have. I should let you make up your mind about him-”
“I think I’ve seen all I needed.”
“-so you’ll understand if I say he’s not in the running for Mr. Personality.”
“Takes all kinds?”
“No, but we have all kinds. Come on, let’s get you that security pass, and then we’ ll start your real onboarding.”
By noon, Ravi thought his head was going to explode. Washroom, kitchen, active workstation, printer, office supplies, next! Various people fleetingly introduced in such a way that he was guaranteed to forget them. Then on to the loyalty oath, the pension papers, the onboarding kit to read at home, the teleworking agreement, the union card and the solemn statement that he wasn’t going to forget any conflict of interest. Then on to the email system, document system, HR system, pay system, form system issue-tracking system and ticket-tracking system (because tickets aren’t issues and vice versa).
Ravi was about to cry uncle when Michel took him for lunch in the first-floor cafeteria and gave a short history of CLC. But as he chewed on a thoroughly mediocre ham-and-cheese sandwich, the history lesson turned out to be more interesting than expected.
Like most significant organizational changes in the federal public service, Common Logistics Canada (“Never the CLC, always just CLC. You wouldn’t say the Canada, right?” warned Michel) was born out of scandal. An article on the front page of the Globe and Mail (mentioned so reverentially that Ravi made a note to ask about the apparently supernatural power of that) had uncovered a massive kickback scandal within the old Public Works and Government Services department, so severe that the department had to be broken up into multiple smaller parts to appease the critics.
Common Logistics Canada was tasked with getting things to where they were supposed to go, a broad mandate that had the advantage of not including real estate or military equipment but could be made to touch everything else. A surprising number of vehicles were included in the deal, as was a parallel courier service outside the urban centres. One of the department’s most surprising aspect was its presence in the Far North and in First Nations lands.
Within ten years, the department clearly outperformed initial expectations: A recent report from the Office of the Auditor General had estimated that it was responsible for five-percent savings in the cost of overall GC non-real estate non-military operations, and for a thirty-percent cut in the price of groceries north of the 60th parallel north. It was one of the rare federal departments favourably greeted at the negotiation table between the government of Canada and First Nations representatives. A recent Hollywood remake of The Thing from Another World had prominently featured a character flying a plane with CLC livery.
Given its fleet of equipment, hundreds of deliveries per day and substantial supply-chain requirements, it had an outsized IT department. Michel rattled off the statistics: One out of every five CLC office employees were in information technology, maintaining a portfolio of roughly a hundred systems to support the organization’s mission. This was far too many systems — an immense effort was underway to rationalize, reduce, modernize and enhance the entire portfolio under a new application called Multi-core.
“You have to understand,” said Michel while nibbling on a few fries, “that it’s going to take the next ten years to get where we want to go. Multi-core is ambitious and it’s solid, but it’s an empty husk meant to do everything, and we’re just starting to migrate specific workloads. Our team is in maintenance mode for one of those systems—if everything happens like it should, which it won’t, we’ll be on the new platform in roughly eighteen months.”
Michel then quickly sketched who did what. Karen was the director in charge of one of the many portfolios of legacy applications—which meant she had another four teams roughly like their own to direct, all in sunset mode. Keith was a senior system architect over the new system. As time went on, they would start porting their current system over the new Multi-core application.
“Although most of us are calling it Manticore — someone’s idea of a joke about mythical misshapen creatures à la Phoenix. It caught on, despite management’s vicious opposition to the nickname.”
“Were you that someone?”
“I’m not going to comment on that.”
As to whether things were going well … that was worth another expositionary lump of text. Michel explained that if you looked at it from IT’s point of view, the system was moving forward as expected. The data foundations were in place, the system architects had done their conceptual work, they had fended off challenges to hand over everything to Amazon, and if the project was a bit late by a year as per the initial estimates, it wasn’t that late and the MVP was going to be delivered as per the newest project change requests. Best of all, the Manticore framework still made sense, the cloud technology infrastructure was solid, and there was a solid roadmap to workload onboarding.
The problem, however, was over the business side. Despite years of work, IT still hadn’t delivered one dollar of business value on the project, and the clients were getting antsy. Every single problem was being blamed on delays from IT, and there were grumblings of many things, most of them contradictory: kill the project, pause the project, additional external audit, increased funding, lowered funding, change of leadership, re-scoping, partition, transfer to consultants and so on. Most of the grumbling wasn’t taken seriously, but it showed trouble brewing, and it increased the pressure to deliver on the new system as early as possible.
“Then there’s the Keith factor,” said Michel.
“I’m not saying. You’ll see soon enough.”
But all of that was someone else’s problem. What Ravi would be doing over the next months was to learn the legacy system, keep it running, fix bugs, fend off business requests that were within the scope of the new system, and prepare the transition to Manticore. Multi-core.
Which was pretty much what Ravi was expecting and hoping for. A little bit of basic CRUD work to keep life under control while the kids were growing up. Government IT wasn’t supposed to be exciting, and that felt like the smart move right now.
Michel excused himself at a quarter to one, saying he had a few emails to send and that they’d see each other again at the staff meeting. Ravi found a quiet room and called his wife Djamila. She picked up on the first ring.
“Hey ya. How is it going?
“Not bad for a first day. Some strange people, but the work looks like I expected. The manager doesn’t sound like a psycho.”
“Good for you.”
“How are the kids?”
“Both of them sleeping right now. My mom dropped some food this morning, so we’re set for supper.”
“News from work?”
“I’m scheduled to start again next month. My mom will be around for the kids until daycare starts.”
That had been part of the move from Montréal to Ottawa — be close to her parents, be closer (even by an hour) to his family in Mississauga, get a government job, find her enough bandwidth for full-time remote work.
“Any news on work from home?”
“Up to three days a week. Look like we’ll be using our offices.”
They’d seriously picked their house based on whether both could have their own working space, so that was paying off.
“All right, honey — see you soon.”
As he hung up, he felt a surprising weight lift off his shoulders. This morning was the culmination of a complete life change, but it was paying off. Grandma with the kids for a few months, daycare after that, then school—the next few years looked solid.
Ravi had maybe two minutes back at his office to start reading his newest emails that a familiar face popped above his cubicle partition.
“Hey, Ravi, there you are!”
“Min-Jun! Settling in?”
“I got the tour and the speeches. I like my team lead. I’ll be doing maintenance…”
His voice trailed off as he was visibly distracted by something behind Ravi. Following his gaze, he saw that the younger man had been captivated by… Jasmine, who just came back from lunch.
“…”Maintenance!” said Min-Jun as he picked up his thoughts. “Yeah, maintenance! Legacy system and all that!”
“Not so much enthusiasm, please.” Lower: “Eyes back in your head, bro.”
Min-Jun at least had the decency to blush. I guess we’ll see him drop by frequently.
The afternoon meeting wasn’t much — their team was only three people, after all, and much of it was Michel and Jasmine going over ongoing issues that Ravi barely understood at the moment. There was a fair bit of onboarding on various matters, not at all helping Ravi make sense of the mass of information he had absorbed during his first day.
Hiring was underway to staff another development position in the team, just so they’d be ready for the additional work of migration to Manticore. It was still unclear whether Michel would remain as manager longer than the acting period—Michel didn’t elaborate, but he looked as if he wasn’t too crazy about keeping the job.
What was more interesting was another look at the ongoing issues board, where clients logged their support requests and enhancement ideas. The life of a developer passed through that board, knew Ravi, so it would be the focus of his attention over, well, however long he was going to be there.
“Ravi,” asked Michel, “ready to get your first assignment?”
“Give it to me!”
“Yeah! Go team!” said Jasmine.
“I’ve got something pretty simple but not too simple, something that will get you digging into the system…” said Michel while looking intently at his screen. “Yeah, OK, an error message that’s been bugging us for a while. That should keep you busy. Boom: assigned.”
Ravi saw it pop up on his screen. Might as well take a look. It would probably take a few days just to understand what was going on, let alone propose a fix. And that was assuming he’d know enough about the system to actually propose a fix — these things could take a while even to an experienced dev.
“I’m sorry if the next little while is going to be boring to you, Ravi, but it’s all about the charitable campaign, and Jasmine’s been working on it quite a bit…”
Ravi’s attention went to the bug. Michel had barely had time to take him through the development systems over the morning. Fortunately, it was very, very similar to the stack at Orbiware, so Ravi had a running start on how to use it. The bug didn’t look all that strange either — Ravi had seen more than a few similar cases in his years in the trenches, so he had an idea of where he could begin.
Very distantly listening to Michel droning on about performance objectives for the charitable campaign, Ravi quickly opened the files. There were a number of basic but common errors that could create the kind of error that had been reported — despite the complexity of modern development, a surprisingly high number of bugs could be summarized to one of thirteen classic mistakes, and the trick was to find where these things were. At least the bug had been properly logged, with a very nice error log dump in the ticket: Score one for the rigour of government helpdesk.
Thanks to the log, finding the right module where the program threw the error was simple. Now, Ravi didn’t expect it to be as simple as going to the offending line and seeing the error—he’d have to sniff around, take a look at the state of variables, possible run a trace…
…oh, wow, this is my lucky day.
There it was, plain to see. As obvious as the last three or ten times he’s encountered it. The kind of bug that happens once every thousand queries, but that happens exactly, reliably the same.
“Varchar 33,” he muttered.
“What?” asked Michel.
Ravi blinked and came back to the small conference room. Both Michel and Jasmine were looking at him.
“I think I’ve got the bug.”
“What?” said Jasmine incredulously. “We gave it to you five minutes ago!”
“You’re got to be kidding me,” said Michel. “Nobody’s that good.”
“I’m not sure if that’s it.”
“Treat us like a rubber duck,” asked Michel. “Talk us through it.”
Going from coder-brain to expressing the content of coder-brain was never Ravi’s strong suit, but he was going to try.
“This is going to take a few minutes.”
“We’ve got the time.”
“Okay, do if I’m right, let me run this on dev … do I have the commit rights?”
“Can I share my screen?”
“Go right ahead.”
Ravi’s fingers flew over the keyboard, sharing his screen on the bigger screen on the wall and muttering as he took his colleagues through his conclusions.
“So look at this SQL INSERT statement. The user enters the input for the—the what—the tracking number. Input is converted to string. Label says it’s a tracking number and those are usually short, right? Nine to fifteen characters. But some of them are getting longer, right? We’ll check later. If I use the API to make an input at thirty-two characters, no, wait, sixteen because of UTF-8…”
His fingers were racing about as quickly as his patter, bringing up the development console and feeding values in the module.
“Fifteen characters, no problem! Sixteen characters, no problem! Seventeen characters…”
He tapped enter and there it was—error message. He closed his eyes. Live debugging was not something you did if you always wanted to be right. Relief flooded over him.
“Now if I’m right, the DBA scheme for that field is a varchar(32), which means it overflows, maybe silently, on seventeen characters. I don’t think it checks for string length, so that explains the error message.”
He quickly brought up the support documentation and went into the data dictionary. He pulled up the relevant database field and…
… there it was: varchar (32), reduced to sixteen because of UTF-8 character encoding.
“WOW.” said Jasmine.
“I’ll be damned,” added Michel.
“He’s a warlock!” said Jasmine. “Burn him right now!”
But Ravi was on a roll.
“Look, I’m really lucky here, because this is a bug I’ve seen before. But as I’m going through this…”
Because one thing mundanes don’t realize is how quickly you pick up stuff as you work on something else, and the past few minutes had been a cascade of micro-realizations deferred until he was done nailing down that bug.
“…I haven’t seen a redundant validation framework, both client-side and server side. If the other fields aren’t as vetted, the users can enter garbage and that’s just going to cause us problems. If we could add some real-time performance monitoring, we could catch database errors at the root and send ourselves notifications about new cases as they occurred — I’m not sure why you haven’t done this yet, I mean your logging system is weirdly set up, but-“
“Whoah, whoah” stopped Michel with an expressive hand up. “One thing at a time.”
“Your API could be a lot better at debugging-“
“Uh-oh,” said Jasmine.
“I wrote that API,” said Michel.
Ravi stopped himself. Uh-oh indeed.
“Look, I get it. I’m impressed. I don’t think anyone else could have figured out as quickly. You make a great case at confirming why we hired you. But you’re not going to change everything in a day. The API is set up that way because… well, it’s complicated. Have you heard of Chesterton’s Fence?”
“It’s a public administration thought experiment, but it’s worth a look for everyone. If there’s a fence somewhere that’s inconveniencing you, do you smash it down?”
“I guess not.”
“No, because there are a few things at play here. Your inconvenience may not measure up to the larger reason why the fence is there. Maybe it’s stopping lions from eating villagers. Maybe it’s preventing road accidents that regularly happened before they put up the fence. Point being: The fence had a reason for existing once, and until you understand why it was put up and whether something has changed since then, you should…”
“Not. Touch. That. Fence.” said Michel and Jasmine together.
“It’s a standard speech of his,” said Jasmine.
“OK, OK, I’ve got it.”
“But don’t let that stop you from taking a victory lap on that bug. Very impressive.”
Ravi thought it was his turn to belt one out.
Will I hack it here? I don’t know!
Will I be happy here? I don’t know!
“Does it… Does it…” Ravi started again, without inspiration.
“That’s all right,” said Michel, “not everyone needs an establishing number. You’re the protagonist. Readers already know a lot about you.”
“I don’t have a number,” said Jasmine, “but that’s because I’m a mysteriously underdeveloped character who’s going to become more important later on.”
“Well, I think we’re done here. Chapter’s over. How are you doing so far?”
“So far so good.”
Yeah, thought Ravi, I think I’m going to like it here.
—- – – –
A few musical notes on the chapter, since this was the musical comedy hazing bit of the novel:
- “Sixty Emails” is, obviously, a riff on Merle Travis’s “16 Tons.” The best modern take on the song, as far as I’m concerned, is the Bart&Baker feat. Tommy Dollar version
- “Karen’s Boast” is sung somewhere around the beat and vocal register of Nicki Minaj/Doja Cat/Meaghan Thee Stallion. That’s what she thinks about herself, mind you.
- Michel’s “It’s All Pensionable Time Anyway” is inspired and sung a lot like 90s pop-rock bands à la Hootie and the Blowfish.
- Ravi’s “I Don’t know” would have borrowed heavily from Manuel Lin-Miranda’s rap delivery and rhythm—you can do worse than imagine something around a mixture of Hamilton’s “My Shot” and “Ten Duel Commandments.”
Chapter 2—Crushes and Chaos Engineering
Six months later, Ravi’s mood had mellowed somewhat. Oh, he didn’t actually dislike the job—under-performing for a while had been restful. Fixing bugs, learning the system, making trivial changes had its charm, especially the completely different world of public service. No money imperative, and a somewhat more humane working environment.
On the other hand: Everything took longer than expected, even if you were expecting it to take longer than expected. That bug he’d stumbled upon on his first day? It had taken five weeks to get the fix in production. He had to document the behaviour, find ways to prevent it from happening, pick the best option, explain the fix because it touched upon a database scheme, document the fix, log the fix, go through code review, commit the fix, run it by the Change Management Committee, and hand it over to the people who actually published the fix.
“Don’t worry: they don’t trust you,” explained Michel. “You’ll get more freedom after a while.”
That was sort-of-true, but not that much. He could still not commit changes, but his code review was completed faster, and the last few bug fixes had gone quickly through approval.
That probably explained why he had started coding on the side again. A small game project, something he could put up on Steam once he was done. Not meant to be anything big, but something reasonably complex to keep him on his toes. It would take years to be done with it, if he ever was, but that was the point. On late nights, after the rest of the house had gone to sleep, he’d boot up Unity and fiddle with it for an hour or two just to get something running again on his own without any other approval.
Now that the leaves had fallen, winter was coming and Christmas was around the corner, the bus rides to the office were a lot less musical. Sometime along the way, he’d acquired the same faraway look than the other riders on the route. He’d even started being part of the gang—he’d nod to other familiar riders at the bus station, and they’d happily ignore each other during the entire ride.
He didn’t quite know that things were about to change for him on that day. But before describing what happened, let’s take a look at the other players in our tale and see where their heads are at.
Michel was not exactly counting down the years to retirement, but he was clearly shifting his thinking about his career. Now was the time to let go of his resume and start thinking about his eulogy—he had never been a careerist (“leave me do my job” was his overall motto) but now he was thinking how best to manage the rest of his time in the office. He still needed a while to build up the nest egg they’d need to build that retirement house in the woods—so how would he spend that time? Keep doing the job, even though the job was going to be swallowed up in Manticore? Position himself as an internal consultant-for-hire? Or take up that long-deferred promotion to manager level, which was guaranteed to pay more but also frustrate him more? As a manager, he’d never again get to get elbows deep in the muck of defining a new architecture: it was bad enough that he hadn’t been selected to work on Manticore.
It was troubling to him that he had accepted a second four-month assignment as the manager of the legacy system. It was true that they still hadn’t launched the staffing process, that no one else was knocking at the door for the position. Still, he wasn’t hating it. He just wished he had more time for strictly technical stuff from time to time rather than moving paper around.
At least his team was shaping up. They hadn’t been able to staff that vacant position yet, but Ravi was doing extraordinarily well, and Jasmine was getting to be a pretty good junior coder when they could define a problem well enough for her to take on — otherwise, she was a great QA. The Manticore delay hubbub was getting worse, but they were safely isolated from that. And Karen still left them mostly alone, so that was that.
Jun-Min was stuck in a prison of his own making, equally made of a puppy crush on Jasmine and crippling self-doubt. He could have collapsed the Schrodinger’s pussycat situation at any moment by asking her out—either she would have said yes (leading to a date, but a lot more anxiety) or no (leading to dashed illusions, but at least the chance to move forward).
For the moment, he was content going up once every few days from his team pod to chat with Ravi (whom he liked, let’s not pretend otherwise) or ask him what he was doing for lunch, and steal gazes at the oblivious yet alluring Jasmine. Ravi, as you’ll see, was not duped and in fact was getting exasperated at the whole thing.
Karen was never really happy, but she was even less happy than usual at the moment. Downright miserable, in fact.
She had, indeed, no real technical experience. Computers were a tool to her, slightly magical when they worked, and downright cursed when they weren’t. Her degree in finance had been her gateway to the public service, but everything she had done in planning her career advancement served the goal of becoming an executive. She understood people management despite not liking people, she understood HR as means to an end—the end being empire-building—and nothing made her quite as happy as finance matters. Governance was a necessary evil, but she happened to be good at it: schmooze the right people, deliver on what they wanted, build a reputation as someone who got things done and you were halfway to anywhere.
Her problems had begun when she had listened to the advice of her mentor. Looking at her resume, the older woman had noticed that she had worked far too long in finance, and not enough in program delivery: “Give yourself two years in a place where you can prove you can do something rather than move numbers around. IT is good for that.”
A lucky break through her network of contacts had gotten her a position at CLC. But they had misrepresented the job. Rather than being responsible for migrating systems on a new platform, everything was late and she was stuck managing four dead-end systems with people who, frankly, were left around after the Multi-Core project cherry-picking. This was not how you built a reputation.
She couldn’t stand the place, but she couldn’t get out now — not after barely twelve months. Didn’t look good on the resume to have consecutive years — you needed at least twenty-four months, eighteen in explainable emergencies. She was stuck, and it was getting more intolerable by the day.
As a result, perhaps, she had started thinking about other things. If she was going to spin her wheels another year in dead-end jail, would it be time to get herself a fiancé? Not a boyfriend, no – an eligible bachelor with prospects, someone who’d look good on her arm, or who could at least pay his half of the mortgage and top-up her benefits.
Now, where to find such a person?
Keith was, as usual, a body part unfit to mention in a PG-rated novel. You’ll keep seeing him at his finest (which was worse than most other peoples’ worst) in the next few pages, but his abrasive style had been enough to get him uninvited to meetings of central interest to him. Clients had asked to never deal directly with him again. He had orders to communicate solely via emails sent through his manager for no less than three other people in the IT department. He still thought he was the good guy.
Jasmine was a woman of mystery, and let’s keep it at that for now.
By the time Ravi logged on his computer, he was barely waking up. Now that his mother-in-law had taken over the household in the morning, he and his wife had the privilege of almost sleepwalking on their way to work. Over the last few months, they’d been able to negotiate some kind of sustainable work-life balance. Their eldest daughter was in school and loving it after the traumatic first day, while their little one was a few months away from daycare. They all spent a lot of time together in the evenings. Days spend working at home helped a lot, while days at the office kept him tethered with the team and the growing chaos of Manticore.
He looked at the issues board and was surprised to find out that nothing had been added overnight. He’d made steady progress in helping fix many outstanding bugs, but his reward had been more stuff to fix—now that a team was actively maintaining the product and fixing issues, the word had gotten around that they didn’t have to endure the application as it was. As a result, more bugs, more small enhancement requests were making their way to the team. Given Manticore’s growing immobility, he hadn’t been asked to do much regarding the migration of the legacy system … which left more time for bug-fixing, and that in turn attracted more bug reports.
Oh well—still better than knocking back thirteen-hour days working on an AI enemy system eventually lobotomized from the final game release because play-testers complained it was too smart for them.
Distractedly greeting Michel and Jasmine, he opened up the prioritized list and started looking at the first bug, slowly getting into the flow of things. His first day’s bug-tracking success had been unusual, but not a fluke: he had the advantage of looking at the system with fresh eyes and different bug-fixing methods. But that advantage was eroding, and being replaced by a growing, now almost-instinctual feeling for the code. He had started proposing fixes of his own — small UI enhancements they could do on their own without database changes, that would not be seen as threatening the Manticore MVP.
He was deep in sub-modules tracing a memory leak when chaos came knocking.
“All right, what’s going on?” said Michel out of nowhere. “Jasmine, can you check the logs?”
Ravi heard typing from behind him.
“Looks like we’re down.”
“Yeah, look at the tickets piling up.”
Their application may have been on its deathbed, but it was being used in several regional offices, and any outage didn’t need an automated uptime-checking service (which Ravi was still arguing for)—they heard about it in the following thirty minutes.
Ravi switched over to the issues board and yet, there it was—error messages, timeouts, requests not completing. Something was up.
He checked his own secret logging tool, and quietly swore: The system had been down for roughly fifteen minutes half an hour ago. He was arguably more annoyed at his lack of foresight more than the system crashing: He had spent a fair amount of time installing his own secret application performance logging tools away from Michel (who’d disapprove, citing some inane departmental requirement), and had messed up the alert code that was supposed to notify him when the system was down. Oh well—it’s difficult to test freak crashes that aren’t supposed to happen.
Around him, Michel was busy running the usual tests — was the file server up, was the connectivity up, was the database up, was the application server up, was the firewall properly configured. Behind him, Jasmine was running the standard automated QA tests, just to see what they could learn.
“Looks like everything is up.” said Michel after looking over the results.
“The application is working,” reported Jasmine. “Well, everything except the destination search: that times out after ninety seconds.”
“That’s weird. What is the ticketing queue saying?”
Ravi had this one: “Early bug reports were about the application being down. Now they’re about the destination screen timing out.”
“Can we know how long the application stayed down?”
“My logs say from 9:00 to 9:13.”
“The web logs?”
Ravi spoke before thinking about it: “No, my own tracking logs.”
“Your own — Ravi, did you set up your own monitoring system?”
“We’ve talked about that! Security is not going to like finding that out-“
“Well, we have better information now-“
“Better than checking the web logs? Is that worth the trouble? I don’t recall hearing you tell us that the application was down.”
“I’m not going to talk about it right now, but we will talk about it.” said Michel, visibly annoyed.
Ravi was going to speak up to defend himself, but Jasmine spoke first: “Can we focus on what we know about the crash?
That took the steam out of Michel’s rising anger.
“Right. okay good, we know what’s going on from two sources. Jasmine, close those tickets about the application being down. Sit on the newer time-outs. Ravi, keep digging into the time-outs. Jasmine will help you once we’re caught up.”
“Aye-aye, captain,” said Ravi and Jasmine together. Michel’s attempts to make them think of themselves as his “pirate crew” had mostly fallen flat, but both had taken to the expression in affectionate mockery.
Ravi focused on the destination module code. It was a crucial element of the application: every user had to select a destination from thousands of possibilities, and that was fed in the tracking component of the system. No destination, no system even if the system was up. No wonder the tickets were piling up.
So: the first and most important question of any attempt to fix a problem that wasn’t there before: WHAT HAD CHANGED?
First, assume you screwed up. He pulled up a list of the latest commits to the application’s code base. Nothing this morning. Jasmine had been doing triage for the next sprint, Michel was working on HR stuff, and he had been deep in debugging. The code-base hadn’t changed since yesterday at 3:13 p.m. (Ottawa Time), and looking at the internal application database, he could see that successful destination searches had been completed nationwide up until 8:57. After that, it got more complicated. Some of the searches were completing successfully, but most others were simply timing out.
OK, so it’s not the application. Not the servers or the connectivity either, since everything was pinging back within expected delays. Running any search was simply timing out. Weird.
Checking the error logs was more informative. While the error strings were less detailed than Ravi would have designed it had he done it, the ones that were there suggested a memory time-out. As if the application exhausted all available memory and gave up. Some requests came through, but as soon as the requests accumulated, they stopped responding. And since users were trying again and again … it got worse.
Memory issues? All of a sudden?
Whenever an outage went on, any second spent talking was a second spent not coding, but sometimes a good chat could save hours.
“I’ve got something weird,” said Ravi to Michel.
“All right, show me.” said Michel while pulling up his chair.
“Look at this.”
“Out of Memory? We’ve never had that problem.”
“I checked, we haven’t changed the code since yesterday afternoon, and everything kept working.”
“Daylight saving times was two weeks ago, so that’s not it.”
It was a joke, but not really: Even seasoned coders often got caught by the daylight saving time change, sometimes in tiny details that cascaded. (It was a mistake to assume that all days had twenty-four hours, for instance.) But they’d gone through it without a problem two weeks ago. So no, that wasn’t it.
“Well, if our code hasn’t changed, then it must be something else. If we eliminate the impossible-“
“You’re gonna quote Sherlock Holmes to me?”
“-let’s take a look at the improbable. How much memory is on the server right now?”
Ravi looked at Michel.
“I hope you’re not serious.”
Ravi checked. The number was lower than he expected. Michel growled behind him. Had the server always had that little memory?
He pulled up some of his system documentation. Specifically, the system scans he’d done early one, just to know what he was dealing with.
He wasn’t crazy. The system had half the memory it did the last time he checked.
His eyes narrowed.
“Avert your gaze, please,” he asked Michel.
“So that I won’t see you get into your secret performance monitoring scripts? No chance.”
Ravi sighed and logged in, knowing that Michel was absorbing everything but his password. Yes, there would be some hell to pay for this, especially when Michel would discover how Ravi had used his server admin rights to install an unauthorized software. Hoping to side-step the discussion with some results, he pulled up the hardware scans from yesterday, and the ones from fifteen minutes ago.
“I knew it,” said Michel.
There it was: The server had half the memory it did the previous day. No wonder the system was timing out—calls to the database to build the list of possible destinations were performed, but the system choked before assembling the entire list. As he thought, it got worse as users were trying and trying again.
“Ugh, I knew that SIC was behind it.”
There it was. The curse word of the modern GC IT specialist.
Shared Informatics Canada.
Talking about Shared Informatics Canada (SIC) is worth its own info dump. SIC was a Frankenstein agency patched together from bits and pieces of departmental IT shops in 2011 that had skipped straight from juvenile growing pains to teenage surliness. Its official mandate had been to become the central IT infrastructure providers of the Government of Canada. In theory, it was supposed to act as a computing utility: Whenever departments needed equipment, servers, disk space and, yes, memory, they could call up SIC and, in a spirit of public service harmony and cooperation in the service of the Canadian public, they would get what they needed according to world-class service standards. Then both parties would virtually five-five, chuckle in shared acknowledgement of their good deeds, and hang up, knowing that this was good for Canada and, therefore, the world.
It had not worked that way.
SIC had been not been created out of data-driven analysis of best practices in comparative jurisdiction. In fact, anyone with access to a search engine could see that similar initiatives had failed (or were struggling) across the commonwealth from New Zealand to Ontario. No, it had been a hasty cost-cutting exercise whose benefits had been budgeted in the government’s bottom line before the agency had even been created. As everyone had expected, the transition from departments having their own infrastructure to being served from a centralized provider had been confusing and disappointing.
Rather than adopting a sane management model such as Justice Canada, with departmental expects stationed with the departments they served but guided by a central authority, SIC had gone all-in on the centralization, grabbing budgets and personnel from departments. Departments, anticipating the shell game and fighting to come, had not sent their best and brightest to the new agency—whenever possible, they held on to the better employees, and got rid of the deadwood.
Shared Informatics Canada, in its newfound and wholly undeserved arrogance, had not bothered putting in place service standards. Why would it? It was the only authorized provider, and whatever it decided had to be the rule.
This could have worked had it been able to put in place internal governance and predictable behaviours. But it had not. Wreaked by no clear vision, subject to fractious internal empire building, it went through three major reorganizations in its first decade of existence, and the prospect of a fourth one weighted heavily before its fifteenth anniversary.
While no one really hated any of the SIC employees, who were widely acknowledged as doing the best out of a rotten situation, the same could not be said about the organization. SIC, not having agreed-up service standard, routinely changed its mind about the services and products and overcharged whenever it could get away with it, which was often –unless the department heads argued, which was also often.
For instance: SIC would decide overnight to launch major server migration projects to serve its own cost-cutting interests, at which point it would flat-out inform departments that they had to commit resources to the project or else servers would go missing into the night, the migration happening whether its clients were ready or not. Once departments had mobilized the right people, stopping their own projects to accommodate the sudden requirement, SIC would usually go dark as it “re-evaluated the scope of the project,” leaving departments to re-readjust their resources again. Six or nine months later, the initial project having been forgotten, SIC would usually come back saying that everything was now ready to go and had to be completed in the next six months, causing further chaos.
Or, in slightly rarer cases, the project would be abandoned completely, leaving departments holding the bag once again.
That was life under SIC at the macro level. At the micro level? Even more shenanigans. Classics included servers not being delivered for more than a year, then being delivered without the required administrator passwords to make use of them, a move roughly akin to a car dealership delivering a car in your driveway, but not giving you the key.
Then there was SIC’s unnerving but consistent tendency to charge for what should be essential services from an infrastructure provider, such as replacement servers, monitoring service or, heck, regular backups.
Whenever complaints were sent, SIC account executives wrung their hands, lowered their shoulders, shook their heads in impotence and whispered confidentially that they were doing their best under the circumstances. That they were the department’s best friends, and that (contrarily to the prevalent belief) things could be much worse.
The irony wasn’t lost on the savvier GC IT technology specialists that SIC was treating them in a hideous mirror of the worst treatment that they could inflict on their business partners. Except that most departmental IT specialists with a shred of empathy did their best to smooth over such relationship-destroying incidents, and most departmental IT groups actually had written service agreements with other areas of the organization. And if things really went badly, the department’s senior management could intervene. No such luck with SIC, though.
In this grand scheme of things, discovering that the SIC-administered server suddenly had half the memory it had the previous day was both infuriating and on-brand.
Note: Almost nothing in this section is fiction.
“So what happened?” asked Ravi. “Where is the missing memory?”
“The timing of a server shutdown followed by the missing memory is damning.”
“We still have to get it back.”
“At this point, I have to ask Karen to follow up. We’re not meant to speak directly to the SIC wizards.”
Michel turned to his computer to type something, but stopped himself and got up.
“No, I guess I have to go tell her in person for this one. Jasmine, please activate the emergency notice to users that we know there are problems with the destination search function and are looking for ways to resolve it. Ravi, sit tight until we get word that the memory is back. Ugh, how am I going to explain this to her?”
Micheal went away like a guy walking to the electrical chair, but Ravi wasn’t simply content to sit back and wait until everything came back as it was. Surely there was a way to optimize the search query?
Well, it’s not as if he had anything better to do. He closed the windows he had opened in tracking down the memory leak and the others open during the initial diagnostic of the problem, then he just as quickly reopened windows and tools specifically to take a look at the destination search function.
We knew it, of course — it had been one more thing to learn on the way to debugging some tickets. But now he had to take another look at it — as a problem to be solved by itself.
The problem was: the function had been put together competently. The more he looked at it—ignoring the high-pitched exclamations that made their way from Karen’s office—the more he didn’t find any obvious way to reduce the memory it took. There were thousands of possible destinations, and the search function did a decent job at loading them up, making them available and freeing up the arrays afterwards. Nothing much to do there if you stuck to the existing structure.
Ah, but what if you didn’t? Maybe caching, maybe side-load, maybe partial listing, maybe sub-selection. Unfortunately, those creative solutions had one shared drawback: they’d require coding up a storm, and almost certainly changes to the APIs. Everything was possible given enough time, but it’s not clear if they had enough time—a quick-and-dirty fix could be completed within two or three days, but the memory could be restored in fifteen minutes.
So Ravi was back to square one, as instructed: Sit tight until the memory is back.
Michel made his way back to his seat even if the exclamations from Karen’s office hadn’t stopped.
“She’s on it. Was screaming on the phone when I left.”
“How long is that going to take?”
“Well, she’s more the intense type than the enduring type, so I’m thinking five minutes. Anything new?”
Jasmine confirmed that she had closed off the first tickets about the application being offline, and had activated the notice to all users saying that they were investigating issues with the destination search screen. This didn’t buy them any time, but at least it was a notice of action to users.
“I took a look at optimization strategies,” said Ravi.
“Ugh. No, no optimization,” said Michel, “I’m not getting into a cowboy rewrite before noon. Maybe not ever, considering that we may get the memory—”
A loud, LOUD scream came from Karen’s office.
“Are you sure about that?” asked Ravi.
“Just wait for it!” said Jasmine.
She was right—ten seconds later, stomping told them that Karen was headed their way. How such a small woman could make so much noise with heeled shoes was never too clear, but they didn’t have time to think about that when she was upon them.
“Those incompetent wazoos are the worst! They told me they took the memory away this morning! They told me we told them to take it away! Did any one of you ask for that?
“No, never,” said Michel with calm, refusing to escalate to her level.
“They hung up on me! I’m going to the director general now! They better hope their office chairs have safety belts!”
“How long until we get the memory back?”
“They said never, but I’m not accepting that!”
She turned on her heels and went back the way she came. For once, Ravi was glad she was on their side, and not aimed at them.
“So, what were you saying about not having time for optimization?” said Ravi.
“Yeah, OK, if that’s going to escalation we’re not going to get a resolution today, maybe not even this week. Anything we can do today is good. What did you have in mind?”
“Remember what I was saying about Chaos Engineering?”
Michel wasn’t the only one with war stories to tell. A few weeks ago, a team meeting on the perennial issue of performance monitoring had led Ravi to suggest implementing some Chaos Engineering of their own.
Chaos Engineering was one of those great IT ideas that, at first glance, sounded completely insane. In a few words, it was a set of tools and techniques that deliberately downgraded or interrupted performance (by cutting off a connection, for instance, or disabling an entire server) while the application was running. While this very concept usually had infrastructure specialists screaming in pain, the point of such a practice was to harden the infrastructure against any future problems by deliberately creating those problems and stress-testing the infrastructure. A properly designed system would have redundancy, alternate paths, degradation-resistant services and other ways to detect and react to less-than-ideal conditions. By doing these exercises when everything was going well, the theory was that the system would be ready when real outages happened.
Of course, Chaos Engineering had been invented in big Silicon Valley firms with an army of infrastructure experts ready to work on those fancy ideas. Government did not have this army of engineers to spare, and so Ravi’s idea had gone where most of his ideas went when suggested to Michel: In the great “when we’ll have time” dustbin.
“What is clear,” went on Ravi, “is that SIC is our own Chaos Monkey.”
“OK, good, so you made your point.” said Michel with some annoyance. “What else?”
“We have to implement a low-memory fallback algorithm.”
“You’re talking weeks of work.”
As Jasmine pointed out that support tickets were still coming in, Ravi rolled his chair toward the whiteboard that was on the back partition of their pod. He started sketching a few boxes to represent his proposed plan.
“Pareto Principle: eighty percent of results are due to twenty percent of effects. Most users of the system only use a handful of destinations, because, well, that’s their job. We know from the audit slogs what those destinations are for the users. What if we build them their own lookup table? Activated if the memory is under the full threshold, and that should take care of more than most of the cases.”
“What about the missing twenty percent of results?”
“That’s the second part. Once everyone has access to their top results, we start working on a caching/paging mechanism that uses static flat files without database access. We can update that server-side every night. But only after the first part is done.”
Michel looked at the diagrams pensively. He was on the fence, Ravi knew it. Now, to give him a little push.
“I can’t do that on my own, Michel. I need API changes to take into account the lower-level code, and I need someone to run the audit log data collection. We can re-use the paging mechanism from the reporting module.”
Michel thought about it some more. When he moved his chair closer to the whiteboard, Ravi knew he’d won.
“OK, but only if we re-use the quarterly reporting module for the initial data pass. Jasmine, you get cracking on generating the per-user top-twenty destinations.”
Michel added a few more boxes to the diagram, and modified a few links.
“I’ll be handling the top-level data flow and the low-memory switch. Ravi, you get going on the UI changes and the base code. The rest of it will take place on our team channel.
Michel looked at the seriously and gave them two fist-bumps in succession.
“Let’s play this co-op style.”
The next few hours went by quickly, to the point that Ravi realized somewhere around two o’clock that he had missed lunch entirely. Not that he minded — being in the flow so deeply that you didn’t even feel hungry was one of the best feelings in the world, and so was the idea that all of the restraints were off — they were off and running, without nattering oversight, just to make it work.
Ravi slowly came back to the real world while their work coalesced as an emergency release. Michel had already pre-cleared the deployment as something they could do on their own without review, and so he gave the ceremonial click that sent everything to production.
They had tested, just enough to feel confident that it was going to work. But now it was up to the users. Jasmine contacted a few of their favourite super-users to get them to use the system, and then they all sat immobile at their desks, their eyes glued to the error logs.
Five minutes later, Ravi started breathing more normally again. One destination search went by, then a second, and a third… before long, the system was back to a respectable fraction of its usual workload, with only a few edge cases falling outside the Pareto distribution they’d worked out.
“Looks like it works,” declared Michael.
Ravi breathed deeply and blinked a few times, as if reintegrating his body. There was still a lot to do—documentation, formatting, and that caching/paging system to cover the edge cases. But they had pulled it off.
“Jasmine, put up a message saying that their top destinations should be available, and that we are working on the rest.”
“Right away, cap’tain.”
“After that, you can both take a break. The second system can wait a bit. Go for lunch, go for a walk, but do something else.”
That wasn’t a bad idea. Ravi noticed that Min-Jun had sent a few messages asking to go for lunch earlier during the day. He replied, apologizing for the lateness but promising quite a story to tell. Min-Jun had time for a break, so they agreed to meet in the campus cafeteria.
Once over there, Ravi delivered a quick summary of the day’s even, barely pausing for breath. As much as he was looking forward to talking about his day to Djamila, he knew that Min-Jun would get it and appreciate the details.
He wasn’t disappointed — after finishing, the younger man sat back in his chair and simply went “wow!”
“I know, right?”
“It’s not often that you get to do some cowboy coding around here.”
“Might as well enjoy it while we can.”
Ravi was about to add more when he saw Min-Jun’s gaze shift and focus on something else behind him. He didn’t have to turn his head around to know what was going on.”
“This is getting ridiculous, man.”
“Just go and ask her for a date. Pick Friday, pick a nice restaurant and just go.”
“She probably has a boyfriend or something.”
“We’ve gone over this already. If she does she’s never mentioned it, and there are ways of asking if you want to be sure.”
“She’s probably going to turn me down.”
“You don’t know that. Every day you wait, it gets worse.”
“I just – oh no, she’s coming around here.”
Jasmine sat down next to them. She was smiling, and Ravi was pretty sure it meant that she was at least friendly to Min-Jun.
“Did Ravi tell you about this morning?”
“Yeah! What a ride!”
“New tickets are down to next to nothing. Looks like we pulled it off.”
“Um, yeah, yeah.”
Ravi had seen this exact scenario too often. Jasmine would say a few things, and Min-Jun would progressively regress into a non-verbal state as it sunk in that she was right there talking to him.
After the feat he’d pulled off, Ravi felt invincible. As if he could walk on water, or do something even more difficult, like break a full-river logjam. Cockiness was dangerous, he knew, but it also let to hitherto-unthinkable gestures that could do some good. He got up and leaned over the two youngsters.
“I have to go, but Jasmine, Min-Jun has a huge crush on you and he’s going to ask you out to a nice restaurant this Friday.”
To Min-Jun: “Don’t screw this up. I know you can do it.”
To Jasmine: “Be nice, but I don’t think you’re going to turn him down.”
Then he walked away, like a godfather. He was done with this. Let the chips fall down where they would… although he had a pretty good idea where they would.
Indeed, before he stepped out of the cafeteria, he heard both of them laugh.
He got back to his office right on time — Michel gestured for him to follow.
“Karen wants to see us. Right away.”
This was probably not good. Or was it? Today was a strange one. Did he feel cocky enough to face down a director?
They heard the end of a phone conversation as they approached the office. The door was open, and it reflected the screaming inside.
“-and if you’re thinking of hanging up, well consider go hanging yourself instead!”
She took her headset off and slammed it on the desk, or about as hard as one could slam down a headset without meaning to break it.
“That was the SIC account executive! I gave him a piece of my mind! Their story keeps changing, especially now that the DMs are talking! Suddenly, it’s oops we screwed up, we didn’t mean to! Well, they’re not going to get away with it!”
“Are we getting our memory back?”
“Later this week! They keep saying they don’t have enough to go around, which is a bold-face lie! Now what’s that I hear about you making changes to the application right now? This is not what we need!”
“Well, we implemented a fix-“
“A fix solves nothing! A fix gets SIC off the hook! I can’t scream at them if you’ve got a fix ready to go!”
Uh-oh, realized Ravi. Without meaning to, they’d stepped onto the director’s turf. Probably the director-general’s turf, to see her agitated state. She had planned on a continuous outage and now it had gone away, taking away much her outraged stance.
“I can’t believe you took such chances at this time! Michel, why didn’t I hear about this—”
“I sent you an email-”
“This is not a matter for email! We’ve got business partners shouting at us, and-”
An extraordinarily good-looking middle-aged man poked his head inside the office. Ravi sort-of-recognized him from videoconference calls about their legacy application—this was Dwayne, the director responsible for the application on the business side.
He looked much more handsome in person. And his voice was much deeper.
Karen, meanwhile, had stopped talking.
“I’m told,” continued Dwayne, “that this is where I could find the geniuses responsible for getting the application online.”
He turned to look at Michel and Ravi. “Good job, guys. Our team is back online from coast to coast to coast. I was CCed on the discussions with SIC all day long and I don’t think that’s over by a long shot, but, in the meantime, you really rescued us there. The ISC Minister’s office was starting to ask about some shipments not going out, so your fix came in right on time.”
“Well, thank you,” said Michel, “although Jasmine isn’t here and she was a crucial part—”
“I’ll be dropping by your pod later to congratulate her as well. I’ll be making a recommendation to the Awards office as well. Terrific, guys, thank you very much.”
He turned toward Karen, his voice extra-smooth. “And I presume you were the driving force behind it all. I have to thank you as well—those communications with SIC were terrific. Just hard-edged enough to make them reconsider. Remarkable.”
Karen lowered her gaze and giggled.
Now that was alarming. Just what was going on?
“We’ll get going,” said Michel. “A few more tests to make sure it stays up.”
“Thank you again, guys.” said Dwayne as he cleared the doorway. “You should be working on Multi-Core.”
“Thank you, sir!” said Ravi, leaving.
He noticed that Dwayne stayed in the office. He heard Karen giggle again before getting out of earshot.
“Things were getting weird in there,” explained Michel after a few more steps.
“Thanks for getting us out of there.”
“Let’s ignore that sound we heard from her, and get back to toughening our fix. And I want documentation. That means you.”
As it turns out, they weren’t out of strange sounds yet: Half an hour after sitting down to work, Jasmine came back from her break and she was humming happily.
“I’m going out Friday. Thank you, Ravi!”
“Don’t mention it.”
And I mean that.
The Day the Memory Disappeared changed a few things. Jasmine and Min-Jun went on a date, then a second, a third and pretty soon were inseparable.
Two weeks after the Day resolved itself, the memory came back and the low-memory fix was kept as a piece of Chaos-proof engineering, Karen called the team to her office and told them to close the door. She was unusually subdued.
“Word came in from senior Multi-Core management,” she said. “As of next Monday, you’re going to be tasked with some work on the new system.”
“But we’re still maintaining-“
“Essential tickets only. When management reviewed your solution to the memory issue, they took another look at your resumes, asked a few questions and realized they had been sitting on untapped talent. Given that the Multi-Core system needs help, they’re pulling in additional resources from across the department.”
“It’s going to take us weeks to get up to speed.”
“They’re scoping a very specific module for your attention. And given the state of the project right now, they can afford to be patient. Given all the new people, I’m told a retreat is coming up to rebuild the project deliverables and schedule.”
“Are you still our director?”
“Yes, I am,” she said with an abrupt smile. “They’re expanding Multi-Core management a bit.”
Ravi connected the dots — this was a real step up for her. Thanks to their work, she was now part of Multi-Core. She’d get to be included in the big discussions, and put that on her resume.
But this was a great thing for them as well — no more just legacy system maintenance: they now had a real project to work on. Everything would depend on the scope of their deliverables, but maybe there would be some good new code to write. The only reward for good work was more work, but Ravi felt like he was waiting for it.
Chapter 3 – The Worst Retreat Ever
“We’re going where?” asked Ravi.
“Where is Mont-Laurier?” asked Jasmine.
Karen rolled her eyes and continued her staff briefing. Her main points were: “The Multi-Core project team retreat is taking place in Mont-Laurier. Far enough to let you focus, near enough to be within driving distance. Three days, two nights, and they have approved a ton of overtime for the duration. Meals provided from the hotel restaurant. Family allowed, but not recommended. There will be a shuttle to take you there and back before and after the retreat.”
Her expression turned even more serious.
“You can choose to drive there and back home every day, but we expect you to be there at nine in the morning, and stay until the last session at six in the evening.”
Considering that the fastest drive from Ottawa to Mont-Laurier took a hard two hours through hilly rural two-lane roads, not counting any delays due to snow or ice, it was a safe bet that Ravi would take the shuttle.
“I can’t underscore how unusual this retreat is. The budget is like nothing I’ve ever seen. IT and business are getting together to hash out how and when the MVP will be delivered.”
To her credit, she limited her corporate cheerleading to one single line: “It’s going to be fun!”
And then: “Why are you looking so glum? This is not going to kill you.”
Late January was a ludicrous time for a corporate retreat. One snowstorm and the entire thing could be scrapped. Any road trip on iced surfaces carried the risk of an accident. Also, to put it bluntly: It was cold. And dark by five. And miserable. At a time when Ravi usually gunned for five-days-a-week working from home, the very idea of leaving his house — let alone for three days of work — was insanity piled on unpleasantness.
But duty weighed heavily, and Karen had been far less than subtle about consequences for those who refused to attend. No, there would be no remote attendance through videoconference: the point of the event was to be in the same room, brainstorming. Yes, the directors would be there as well—and the two director-generals (IT and business) too. Karen herself seemed far too chipper to go, which all three team members chalked up to her being too eager to please upwards.
But no matter how or why, Ravi still found himself lugging a modestly sized travel suitcase aboard a rented shuttle bus on a somewhat mild January morning. At least CLC had sprung for a charter bus rather than a city bus or a school bus—it could have been worse.
He didn’t feel all that good leaving his wife with the kids for three days, but she had assured him that it wasn’t a big problem — her mom would be able to stay longer, and she would be working from home. He suggested making it a family trip, but she shot that down quickly — Mont-Laurier must be very nice, she said, but it wasn’t a family fun destination at this time of the year.
He was a bit late in boarding the bus, and so most of the places were filled. Jasmine was sitting with a friend of hers, and the only free places were at the back of the bus. He was resigned to a long ride. Michel wouldn’t be aboard: he and his wife had decided to treat this retreat as an opportunity for a winter outing, so they had left for Mont-Laurier last evening, staying in another, better hotel than the one picked for the retreat. He would be there for the retreat’s events, but he’d skip out as soon as they were over.
At least Ravi had brought his laptop and earphones—he’d be able to do some work on the way there. He was just about to put in the earphones when he saw Keith sit down next to him.
Don’t make eye contact, don’t make — aah, too late.
“So, game-geek, cold enough for you? You look frozen! Starting to have second thoughts about coming over here?”
There it was. The overt disdain, the casual aggression, the deniable racism.
“Hey Keith. I’ve got a few things to work on.” said Ravi without expression while putting on his headphones. He cranked up the level, just so it would drown out any answer, and also make it clear that he was listening to something else. Whatever thoughts he had about maybe daydreaming for the duration of the trip were gone—with Keith sitting right next to him, only overt disengagement would work; otherwise he’d find a way to be irritating.
Ravi still didn’t understand how Keith hadn’t been fired, transferred, isolated or neutralized. Michel had done his best to explain: Keith was both useful and careful. He had been with CLC forever, had helped set up the infrastructure, was still one of the best and most knowledgeable technical resources in that area. And for some reason, he had manipulated himself at the kernel of the Multi-Core project, ensuring himself a decade or two of job security. At the same time, he was never overtly offensive or stupid enough to use slurs — his insults were calculated to make people uncomfortable or upset, but never direct enough to be a clear case for HR. While it could be possible to put together a file of Keith’s Pettiest Hits and send that off as an official complaint, it would be near-impossible to make it stick without sustained effort — and most people just wanted to get away from him rather than engage.
As a result, there he was still, hanging on and spewing vitriol in a large radius. Ravi had a working theory that this was all a game to Keith — he cared so little for others that he kept pushing just to see what would be too far. He could, in theory, earn an almost-unlimited number of warnings without seriously jeopardizing his job considering how difficult it was to actually fire someone in the federal public service.
But that didn’t mean that Keith got off scot-free: As far as Ravi understood, he was not friends with anyone else at the office. He wasn’t included in group lunches, nor invited to meetings unless he was indispensable. Even now, he seemed to be isolated in the bus, reading something from his phone.
Ah well — maybe he’d nap at some point.
Neither Ravi nor Jasmine were familiar with Mont-Laurier, but Michel had filled in the blanks for them: The small town two hours north of Ottawa was best known for being at the mid-point between Montréal and l’Abitibi—the former terminus of famous railway le p’tit train du Nord. It was, in essence, a glorified truck stop: the last stop on the way from civilization to Val-d’Or before three hundred kilometres of road solely surrounded by forests and lakes.
It was a singularly dull town. Beautiful in a boréal-forest kind of way as soon as you left behind the main road, but still nothing much more than a rest stop where you could refuel, grab a bite, maybe sleep overnight. For CLC, it was the ideal no-distraction environment for a bunch of white-collar workers largely terrified of bears.
The only impressive thing about Mont-Laurier was how ugly it was, especially after two hours of rather calming rural countryside. As soon as you turned into the city’s main strip—which was nothing less than provincial highway 117—the town revealed its grimy status as a truck throughway: soiled brown snow, noisy eighteen-wheelers roaring past, and the smell of spent diesel exhaust.
By the time the bus stopped, the disappointment was nearly complete: Their hotel was a three-storey-high slab of concrete with balconies poking out of the facade. It was right next to the highway, surrounded by densely packed snow, and there was no way to walk to any other destination. Without transportation, they were really stuck here.
At least I hope they’ve got a good Internet connection, thought Ravi as he let Keith leave well ahead of him. He had promised Djamila to call every evening, and suddenly he was concerned about getting good bandwidth alongside thirty other IT workers stuck in the middle of nowhere.
Check-in wasn’t quick—everyone lined up at the lobby counter and the hotel staff gamely tried to keep up, but it was simply too much for midday.
Twenty minutes later, he was in his room on the third floor. At least the room was fine. Not good, not terrible, but just fine. Bed, bathroom, TV. What else did he really need? CLC management had really gone all-out to pick the dullest place imaginable in order to have everyone focus on the task at hand.
The strange balcony beckoned to him. He unlocked and tugged at the patio door—to his surprise, it opened easily. Maintenance had oiled the rollers recently. He stepped out, noticing that the balcony had been swept clean recently… Or maybe the wind and sun took care of any snow.
It was cold, of course—although the weather was set to warm up over the next few hours. It was loud: The incessant din of long-haul trucks roaring down the highway, barely slowing down for the city limits. It smelled. But most of all, it was surprisingly high—three storeys above ground seemed even more imposing in the middle of nowhere. He briefly gripped the waist-high railing, then retreated in the room.
No, he wouldn’t spend a lot of time outside.
He checked the TV: Basic cable only. Fine.
The internet connection looked fine, but there was no way to say if it sustained thirty streaming connections at once.
The toilet flushed just fine.
He texted his wife — Safely arrived, everything’s fine. Missing you already.
Already out of entertainment options, he went downstairs. They’d promised free lunch, right?
Fortunately, Michel was already downstairs. They hurriedly found Jasmine, then headed for the restaurant’s restaurant.
Once again, the restaurant was fine. No five-star culinary experimentation here — simply honest fare meant to fuel up visitors on their way to the other end of the 117. It would do, thought Ravi. Plus, hey, free food. Steak was on the menu. He expected they would run out before the end of their three days, so he did his part to hasten the stock’s exhaustion.
While waiting, Michel went on a riff about what they were trying to do during the retreat.
“You have to realize,” he said, “that we’re putting in place a system that is likely to outlive some of us, organizationally speaking. Certainly me—Absent any catastrophes, I’m going to retire well before the system is taken offline. It may even outlast you, Ravi, depending on when you decide to call it quits and if the system is robust enough. As for you, though, Jasmine, there’s a good chance you’ll work on its replacement if you’re still around.”
Michel rubbed his temples.
“We’re still incredibly early in computer development history, but what we know so far is that systems can last an incredibly long time if they’re crucial and just keep working well. There are still a few COBOL and Fortran systems out there—they’re getting replaced, sure, but this is multi-generational stuff. Every other engineering discipline plans on a scale of decades, while we’re still figuring out planning for the next three years. Let’s keep that in mind while we’re here.”
“You seriously think it hinges on that?”
“I don’t know! What I know is that Multi-core is in trouble. The planning was good, but now that we near release of the first modules, the plans are being overwritten by reality. Either we stick through and deliver, or lose faith and see everything crumble.”
“If it does?”
“We still have a day job. The legacy system is still being used.”
Building systems over decades… Old computer games from the 1980s were still being played through emulators, while far more recent online games had been wiped from GaaS servers and would never be brought back. Ravi’s previous projects had gone both ways. The first single-player instalments of Murderer’s Oath were still going strong after a decade and a half, while the multiplayer spinoff had been closed down after two years.
Things were different when providing services to Canadians — everything was web-based, but the government had an imperative to keep them going as long as they supported programs to citizens, directly or not.
“Let’s be honest, though,” continued Michel. “This is not our team’s show. The big discussions will be with the core development team and the business partners. We’ll be glorified observers to a team-building exercise.”
“What do you mean?”
“It’s too late to change the architecture if we want to deliver within a year. Impossible to modify the scope promised to other departments. Tough to add more staff without compromising other systems. What’s left is simply to agree on the next few steps. Getting everyone to sing Kumbaya by the end of the retreat is really the point — not coming up with some genius new idea.”
“So we sit at the back?”
“I’d bring popcorn if it was allowed. Especially the first hour. That’s when all the bile will come up, just so that we can spend the rest of the retreat smoothing it over.”
Michel wasn’t wrong, but his timing was off by two hours. The first hour was falsely cheerful, with both Director-Generals smiling through clenched-teeth introductions. Multi-Core is the future! We are one team! Look at the long road we’ve travelled so far! Our wildest dreams are within reach as long as we work together!
But you couldn’t keep a happy face on a problem forever, and as the DGs ceded the microphone to the retreat facilitator, the frustrations came bubbling at the surface — first carefully, then furiously.
To Ravi, who had not exactly tuned into the project shenanigans beyond the scope of the work they had started sending their way, it was a way to put a few puzzle pieces back together. Even if decoding the real meaning of the comments often took some time.
According to the business, the IT staff were a bunch of arrogant know-nothings nerds who derived personal pleasure out of blocking the business’s selfless efforts to help the Canadian taxpayer. The code was trash, the bugs were multiplying, the interface was user-hostile and the documentation was missing. Thanks to countless change requests, IT was de-scoping the solution down to such a simplistic skeleton that it no longer brought any additional value to the status quo. Furthermore, the business resented being held hostage by a group of maniacal eggheads whose dubious hygienic habits complemented abhorrent social skills and deformed physical features not even a mother would love.
This was loosely translated from polite-sounding corporatese, and was answered in kind:
According to IT, the business staff were a bunch of clueless nincompoops empty suits who enjoyed indecision and capricious flip-flopping as recreational hobbies and could not be relied upon to distinguish their core business from an excrement-fuelled dumpster fire. The business analysis was childish, the requirements were incomprehensible, the user stories plagiarized from bedtime tales, the rationales entirely irrational and the feedback actively harmful. Thanks to inarticulate scope definition, the business was incapable of providing any meaningful feedback deeper than wax crayon drawings illustrating their latest fancy. Furthermore, IT resented being held hostage by an unholy union of soulless email jockeys and drool-dribbling warehouse workers who made dogs howl and children scream.
So that was the mood at the first break, with the hotel staff serving an assortment of donuts, cookies and pastries while remaining blissfully ignorant of the tension brewing in the room. As the tone was still polite, it would have been easy for a casual observer to presume that the calm language being used reflected nothing beyond positive sentiments. Throughout the break, IT and the business munched on their sugary treats in their respective corners, warily narrowing their eyes at each other.
Anyone claiming that a break always de-escalates matters would have been disabused of that notion right then and there. As the facilitator did his best to present a jovial, conciliatory approach to identifying the problems to be resolved on the way to delivering a Minimal Viable Product in time for the end of the fiscal year, no one else was willing to play along. The tension ratcheted upward by a notch.
The dam broke when Keith ended on the receiving end of a mild, but somewhat justified rebuke from Dwayne about an incident two weeks earlier when a server had been inaccessible during a crucial User Acceptance Testing session. Keith was used to dishing it, but he wasn’t equally skilled at receiving it. Already hot under the collar from previous zingers, he answered forcefully:
“I don’t have any lesson to get from a group that can’t be organized enough to test on agreed-upon dates! Not that your test plans-“
“We can’t test when your servers are down and you can’t even be bothered to check them!”
“-not that your test plans would do-“
“If you thought about anything else but your own little vision of this project, you would at least realize that someone else but you needs to use these things!”
“-not that your test plans would prove anything, because they’re shit!”
The crowd gasped. Profanity was not uncommon in government work, due to the nature of government work. But it was most often uttered sotto voce as a private exclamation, more loudly while teleworking or as in-group bonding during rowdier team meetings. But in conference? With business partners? Never!
“I think it’s time for a break-” said both DGs simultaneously.
“No! I’m done pampering those spaztard morons! If no one else is going to say it, I will — You. Guys. Suck. You don’t understand your business! You can’t even describe it properly without us holding your hands all the way to your daycare! You can’t plan your way out of a pizza lunch, and we’d go twice as fast if we weren’t held back by you.”
Stereo DGs: “That’s enough now-”
“Well,” took up Dwayne, abandoning his usual restraint and getting up, “you, Keith, have been a blight upon this project for years and it’s a wonder we got anything done while you were around. I suggest to take a very long walk to nowhere and you don’t come back.”
“You can go to hell, Dwayne,” said Keith while walking closer to him, “and you’ll get there well before me, because it’s a wonder you can cross to the other side of the street without me kicking your ass.”
“I would want you touching me, Keith, and frankly none of your colleagues can stand you either-”
Keith took a swing at Dwayne and the room gasped again. It wasn’t much of a swing, and Dwayne didn’t have to back up by much to avoid it, but it was clearly attempted physical assault and it was enough to send management in an HR-fuelled overdrive reaction.
“KEITH!” said the room at once, unifying business and IT in one fell swoop.
“That’s it, Keith, go back to your room,” said the IT Director General, cutting through the various exclamations in the room. He gestured to the door. Keith didn’t move for a moment, then made for the door, the crowd parting before him. He nearly made it to the doorknob, then turned back.
“This is bullshit. All of you are going to regret this.”
He tried slamming the door, but the hydraulics wouldn’t allow it. He left in an unimpressive huff.
“I suggest we take five minutes,” said the business DG.
The meeting broke up.
“I can’t say it wasn’t satisfying to see Keith get thrown out,” said Ravi a few minutes later after getting a much-needed cookie, “but why do I feel terrible?”
Jasmine, Michel and Ravi were still in their usual spot at the back of the small room, where they’d seen everything at a distance. This should all have been funny, but they weren’t in a joking mood.
“Because we don’t do violence,” said Michel. “We can watch movies with dozens of people being punched out, but the moment it nearly happens in our lives it’s like an intrusion.”
“I was kind of enjoying the part where he unloaded on the business, but not really.”
“That’s because you already hated him and he was winning. Made you rethink the fairness of the universe.”
“Is he finally fired? Throwing a punch?”
“HR will decide that. I expect that management is not going to sleep well tonight.”
Michel nodded toward the DGs and the directors, clustered together at the front of the room, cell phones out and talking furiously to persons unseen.
“Big thinking going on there.”
Ravi narrowed his eyes, as if to see better. Did Karen have her hand on Dwayne’s back? He blinked, and it was gone.
“Are we going home?” asked Min-Jun.
“That’s what they’re deciding. This is not going to take less than five minutes.”
Ravi looked around the room. People were talking on the phone, perhaps warning their family that they could come home earlier, perhaps telling for the first time the story that they would repeat for years. That time someone took a swing at a director…
After another fifteen minutes — long enough for the pastries to disappear –, the facilitator cleared his throat and announced that the retreat would go on.
“Hello, hello, your attention please. I realize that what we just witnessed was very unusual, and I’d like to put the project on pause to discuss how you feel about it…”
It was the right call. After the DGs affirmed that this was unacceptable, the IT director general confirmed that “effective immediately, Keith is no longer working on the project,” an announcement that was greeted with applause. HR had been contacted, was on the case, but even if disciplinary actions were still being discussed, the project team had lost confidence in Keith—so he was out. His access credentials beyond basic login and email were being removed, and he was to stay home until further notice. CLC personnel were encouraged to stay clear of him.
As everyone nodded in agreement with those actions, something else happened: People found common purpose in unloading on Keith. How he made them feel bad, how he was casually mean, how he didn’t care for anything or anyone. Ravi spoke up to tell his own experience, and so did other project members. Nobody found anything nice to say about him. All agreed that anyone else, even if they didn’t know the system as well, would be a better replacement.
Finally, just before the supper break, everyone agreed that they weren’t going to let something like that stop them from completing the goals of the retreat. They would get back together the next morning, and talk until they had a workable plan. Until then, they could get food from the hotel restaurant and enjoy the rest of the evening.
Michel excused himself: he and his wife had a 7 p.m. reservation at Mont-Laurier’s least awful restaurant, and he was looking forward to talking to her about his day. Ravi and Jasmine had supper together, then found a quiet corner for a few rounds of Wizards & Wombats, a card game they often played over lunch.
Keith never showed up. Was he gone? Who cared — as long as he stayed away. At some point, two business analysts stopped by and joined them, which was good for a few more rounds.
By nine, Ravi was surprisingly frazzled—although, with the bus ride, unfamiliar environment and the afternoon’s excitement, the day had been heavier than most. He excused himself and went back to his room.
His attempts to reach his wife by videoconference were not initially successful. As expected, everyone was busy streaming and the hotel network was slow as, well, molasses in January.
Ravi sighed and checked other connections. All of them were password-protected, and they probably went through the same pipe anyway. Not admitting defeat, he used a slightly more … unusual network connection manager. One that, among other things, tried a few common passwords just in case they happened to work. One did: “Telecom-Utility.” Boring. Practical. Maybe unused.
Ravi wasn’t that good of a hacker, but he knew his way around scripts. What was Telecom-Utility? He ran a few tests.
Well, it turned out that Telecom-Utility was a wide open pipe, separate from the hotel Wi-Fi. There was some ongoing traffic, quite a lot more than Ravi expected, but the bandwidth wasn’t even close to being saturated.
Ravi wasn’t going to use it to stream the lamest latest TV series anyway—he wanted to see his wife. That justified the means. Compared to everything else going on that connection, they’d barely notice it anyway.
He reached his wife as she was watching TV, both kids in bed. The day had been uneventful for her, so Ravi got a chance to explain what had happened. After the expected gasps and commiseration, they wished each other a good night.
Ravi had no other plans. While he usually whittled away late nights by working an hour or two on his slowly advancing game, nearly everything was on his computer back home. (Why, oh why hadn’t he still not set up remote access to his desktop?) At least he had some network connectivity. What was all that traffic on Telecom-Utility? He decided to find out. If he tripped some kind of cybersecurity wire along the way, well, what did they expect from having so many IT nerds so bored?
A little bit of Wireshark later (don’t tell CLC IT…), he was set straight—this was all video feeds. Security cameras. He didn’t press any further: what could possibly be any duller than watching hotel hallways in the middle of a winter night?
He didn’t have access to his Unity installation, but he could still work on his hobby project: He pulled up a few gamedev resources and read on a kind of mesh shading he was planning to use. Itching to write a bit of code, he logged onto his Github account and jotted down a few notes. By the time he called it quits, he has a workable idea of how to implement the rendering technique on his game.
Then he turned out the lights and drifted to sleep. Tomorrow was bound to be less eventful…
He was woken up shortly before six-thirty, his usual alarm time, by a lot of noise coming from outside. Opening his eyes, he noticed flashing lights coming from the gaps between the window and the blackout drapes—red and blue.
This wasn’t good. He got up and risked opening in the balcony door in his pyjamas. All the action was on the other side of the hotel’s entrance — police vehicles, an ambulance, two cars branded with TV network logos, and a few people in heavy winter coats milling around. Blinking in the cold, he saw camera flashes and two paramedics lifting a stretcher. There was clearly a person on the stretcher and a blanket covering the person. They put the stretcher in the ambulance without any hurry.
In a moment, he was clearly awake. As eager as he was to rush downstairs and ask what was going on, he still took a few minutes to take a shower (cursing the billowing bathtub drapes), dress and make himself presentable.
Downstairs, he didn’t have a long time to wait before learning more. One of the kernel development guys was almost eager to tell him the news.
“Did you hear? Keith’s dead.”
“They found him frozen stiff outside the hotel. Police are asking a lot of questions now.”
He wasn’t kidding. Within moments, as Ravi lounged in the lobby, one more police car arrived at the hotel. Then two. Then three. This was going to be the hottest place in town for a while.
The police weren’t the only ones congregating. Within five minutes, nearly the entire CLC team (but not Dwayne, Ravi noted) was in the lobby asking for more details. Michel arrived in the thick of the confusion. All were not-so-subtly shuffled into their meeting room, where a few breakfast staples had hurriedly been brought. Anyone wanting the leave the room was either rebuffed, or escorted directly to the washroom and back.
After a few minutes high in wild speculation, the two DGs signalled for attention.
“We’re very sorry for this disruption, and we want to clarify some rumours. As most of you have heard, our colleague Keith was found dead early this morning.”
The crowd took this confirmation with no great sorrow.
“The circumstances of his death will warrant an investigation. For more, we’re going to let someone else speak — sergeant detective Gertrude Boileau from La Sureté du Québec.”
The woman who stepped up in front of the crowd was rotund and with a no-nonsense demeanour. She spoke in clipped tones.
“Your colleague Keith was found dead earlier this morning by a hotel maintenance worker. He was on the ground, in front of his third-floor balcony. He was frozen stiff, but a cursory inspection of his body revealed a broken neck from a fall. While we’re waiting for the coroner’s autopsy, we also noticed several injuries inconsistent with a simple fall.”
A swell of questions, comments and surprised reaction rose from the crowd. Boileau silenced everyone with a gesture.
“As a result, we will be conducting interviews with everyone who was at the hotel overnight. We understand that some of the circumstances surrounding Keith’s day yesterday were unusual and eventful.”
That was one way of putting it, thought Ravi.
“For the next few hours, we ask that all of you remain in your hotel rooms while police officers go around taking your statements. Feel free to order from room service if you are hungry. Please do not communicate details of this ongoing investigation to anyone outside the hotel until we complete our interviews.”
A number of hand shot up.
“No questions. I’ve been clear enough.”
Ravi didn’t have much choice—he went back to his fine cage and waited. Michel was with him: he didn’t have a room and the hotel wasn’t going to extend him that courtesy. The suggestion to order room service wasn’t ignored, but so did everyone else—both men were told it would take an hour for breakfast to be delivered.
Ravi wondered how the interview would go. Would he need to show his Github commits to provide his alibi? Would he need to explain Github?
Absent anything interesting, he lasted roughly thirty seconds until his curiosity got the best of him.
“So, Michel. What do you think?”
“I’m thinking that Keith fell to his death,” said Michel, “but the police felt that this was mysterious enough to warrant an investigation. Ergo…”
“Are we talking about murder?”
“Sounds to me that this is what the police is thinking. Everyone is back in their room to prevent them from talking. They must suspect something.”
“Was Keith pushed?”
“Remember what she said — injuries inconsistent with a simple fall. Sound like he was already dead before touching the ground.”
“Thrown off the balcony. What better way to camouflage murder?”
“It’s not as if the building isn’t filled with potential suspects.”
“Not just the hotel. What were you doing late last evening, Michel?”
“Having sex with my wife. What were you doing, Ravi?”
“Check my Github commits.”
“Ouch, OK, pathetic enough that I’ll believe it.”
Both of them chuckled. While doing so, Ravi remembered Telecom-Utility and its video feeds.
“At least they have surveillance camera footage.”
“There’s a wireless network called Telecom-Utility. Last night, it was streaming a lot of video footage from what looked like security cameras.”
“Huh. If the cameras had been in the right place, there would be a video record of what happened on the balcony.”
“There were a lot of different streams on that network.”
“Got an IP for me?”
“Didn’t get that far.”
“How about now?”
“Isn’t this when, as the senior guy, you’re supposed to tell me that tampering with electronic files in the middle of an active police investigation is illegal?”
“That’s true. But we’re looking, not tampering. So, how about now?”
“Right. Let me log in.”
Ravi logged onto Telecom-Utility using his laptop. The video traffic was still flowing out of the hotel on its own private connection. Where was it going? Were there archives? He set his sniffing scripts to gather more information. If files were transferred, then there should be a clue as to where.
“You’ve got a lot of fun stuff on that work laptop,” said Michel.
“You want me to stop?”
“Never mind, carry on.”
“The scan will be complete in a moment. Why are we doing this, already?”
“I’m not going to avenge Keith.”
“No, I think the world is slightly better without him in it. But if there’s a murderer among our colleagues, that’s something I’d like to know.”
“You script is done.”
So it was. The video streaming was being uploaded on another server, and the connection seemed solid enough. A wired network? Another wireless network close by?
“Poke around. Ping around” suggested Michel.
That was the next step. Moments later, he had both partial access credentials to the other site, and a traceroute suggesting that the site was very, very close by: Few hops to get there, and great latency.
“Let’s try the access credentials. Is that a password or a hash?”
“It looks like a hash.”
“At least try it.”
It must have been a hash, because the connection was refused.
“Right.” said Michel. “So much for that. I guess we could ask the hotel for the password. Hey, can you show me the Wireshark screen again? Something weird there.”
Ravi tabbed to the Wireshark window. What was Michel looking for?
“A few dozen simultaneous streams. What about them?”
“That’s a lot, wouldn’t you say? How many cameras would you need for a hotel this size?”
Michel was right. From the number of simultaneous streams, it looked as if there were at least a hundred cameras feeding streams. Not all of them at once — maybe some kind of selective compression? Motion detection?
“I see what you mean. That’s weird.”
“A little bit more than weird, Ravi. You’ve been thinking that this was a hotel security system, right?”
“Except that the only reason I can think of for having more than a hundred feeds is if the cameras are covering each room. That’s… not legal.”
“While I’m going to keep sitting here as if nothing was wrong, I want you to do me a favour. You’re going to leave the laptop and the phone on the desk, then you’re going to take that penlight you always have with you and you’re going to look in the ventilation vent that’s above the bed. Approach from the side. Try not to be seen. Don’t disturb anything.”
Chills ran down Ravi’s back. He let the laptop and phone down and went as if he was going to the dresser next to the bed. Then he stepped on the bed and peered inside the vent with his light.
It took him a while, but he eventually saw it — a wire, thin but with a glass bead at the end. The other end receded in the ventilation system, no doubt connected to a source of power and a wireless antenna.
“I see it.”
“Still think this is part of the hotel’s security system.”
“I think we should take a look at that hash.”
“Got any ideas?”
As Ravi went back to his computer, remnants of gray-hat security articles, reports of infosec conferences and late-night internet searches came flooding back to him. The trick to being a good hacker wasn’t necessarily doing bad things, but knowing enough about everything to understand what bad things could be done if necessary.
“I’m thinking that this shows some sophistication, but not top-notch security. We’re talking about porn, right?”
“Yes, we are. Amateur hotel night footage for enthusiasts. Maybe blackmail, but still penny-ante stuff. I mean: In Mont-Laurier?”
“Right. Probably a local job on a pass-through hotel. Meaning that there’s a good chance the hash is a simple, popular one. Not a custom scheme.”
“You’re thinking of de-hashing?”
“The scripts are easy enough to find.”
“The problem is processing power. Your machine isn’t that powerful. It would take until next week for your poky machine to brute-force usable result.”
“I’m not limited to my computer.”
“Where are you going to find a supercomputer in Mont-Laurier?”
“Come on, Michel, think GC strategic digital principles. There are cloud solutions out there.”
These things could be arranged.
Moments later, he has spinning off a virtual desktop off an Amazon Web Services instance. What was a hundred bucks for a few minutes’ worth of blunt-force petaflops? Michel offered to pay his half. Ravi ran the script and saw the results pour in—the problem was trying them so that he could find which standard hashing scheme was used.
“Time to copy and paste with a vengeance,” said Michel.
“Easy enough to say, you’re not the one doing all the work.”
They chuckled. Ultimately, Ravi got lucky — he got in on the eleventh attempt. SHA256 wasn’t as secure as it once was with super-computing power available to anyone.
“Stop that virtual machine!” said Michel once they were in. Renting computing power meant that every minute was costing them something.
Ravi immediately stopped the AWS virtual machine script, spun off the instance and paid the bill. Not bad — it came out to less than an hour’s salary. Shared.
“All right,” said Michel, “now that this is over, let’s a take a tour of the file server.”
Now that they were in the remote site, it was time to snoop around. Ravi looked at the root directory — standard media server installation here. Where was the video feed stored? He made his way in the directory structure, letting their size guide him.
He blinked when we found the media directory. There was easily more than a hundred different video feed directories here. Was that possible?
He got a sinking feeling when he saw the directory names. If that was right…
“What do you want to see?”
“Let’s not get too deep yet. I want to see HALLWAY-3RD-EAST-EAST for last evening.”
Ravi opened the directory and downloaded the latest file. He opened it … and clearly saw what looked like the hotel corridor, seen from above, with a timestamp in the lower right of the screen.
“Looks like the third floor,” said Ravi.
“Fast-forward to… what was it… four-thirty?”
He fast-forwarded and skipped ahead a few seconds at a time. Shortly before five, while the entire SJC team was busy unloading on him, Keith stomped down the corridor, two bottles of alcohol in his arms. From his gait, it looked as if he had spent some time in the hotel bar after storming out. He stumbled with his card key, dropping it onto the floor, then went into his room.
He did, going past the group having supper downstairs. At some point, the IT Director General knocked on the room and went into Keith room, probably to have a chat about his behaviour and what Keith could expect if he didn’t go along with it. He stayed there for ten minutes.
Other CLC employees also went back to their rooms after supper. Hilariously, Dwayne’s room was right on the other side of the corridor from Keith. Even more hilariously, Karen snuck from her room to Dwayne’s room a few minutes later, once she had made sure no one else was in the corridor.
“I knew there was something going on between those two!” said Ravi.
“Well, let’s not jump to conclusions. Maybe they were playing patty-cake in there.”
But then Dwayne got out of his room and knocked on Keith’s door. He pushed his way in when the door opened.
He stayed there maybe two minutes. When he came out, he was holding his hand to his head. Was that blood?
“Did you see Dwayne downstairs this morning?”
“No. Haven’t seen him all day.”
“Maybe hiding a nasty cut or bruise on his face?”
“That sure looks like a shiner in the making.”
“I wonder what happened in there.”
“Of course, there is a way of knowing.”
“I’m not sure I want to see.”
“I’m not going to tell you what to do.”
Ravi looked at the room numbers on the hallway corridor video, then he went back to the Telecom-Utility remote server.
His hand shaking, he downloaded the latest file from directory ROOM_314.
A police officer entered Ravi’s room after knocking and identifying herself.
“Are you ready to answer a few questions, sir?”
Ravi had been waiting for half an hour. His adrenaline levels had tapered, somewhat. They were about to go back up. He had already spoken to his family lawyer and decided to ignore most of what she had said.
“I’d like to speak directly to sergeant detective Boileau, please.”
An hour and one more phone conversation with Ravi’s family lawyer later, he was ushered into a small conference room on the ground floor of the hotel. The room was tiny, and it was crowded: it was Ravi, Michel, Karen, the IT DG, Business DG, Dwayne and sergeant detective Boileau. Two rather large police officers flanked the room, but their role was to ensure everyone stayed in, not participate in the proceedings.
Boileau started, conscious that everyone was looking at her expectantly.
“There are about a dozen reasons why I shouldn’t do what I’m about to do. Everything in the manual says I shouldn’t. It’s poor procedure. It may be a legal vice — I believe at least one of your lawyers has already objected to this.”
She paused for effect, clearly enjoying the moment.
“But as I’ve always wanted to say — I’ve brought all of you together here to clarify a certain recent matter of fatal interest. The death of your colleague Keith.”
She gestured toward Ravi and Michel.
“Thanks to the somewhat unorthodox efforts of these two gentlemen, combined with our own more traditional investigations and recent autopsy results, I believe we will be able to explain just how Keith died.”
She turned the laptop computer on the table toward her and tapped a few keys. In the short but intense time he had spent with Boileau, Ravi had been pleasantly surprised at her computer literacy. He hadn’t had to explain many things to her, and she’d jumped ahead of a few explanations that had been unnecessary.
The TV on the wall of the room came to life. It showed the pinhole camera’s view of the third floor east hallway, as Ravi had seen.
“This hotel does not have security cameras. This footage was captured illegally by someone we’ll be arresting soon. It shows the hallway where a few of your team members had their rooms.
The screen showed Keith stumbling into his hotel room, two alcohol bottles in his arms.
“We found that your colleague stole those bottles of alcohol from the bar,” commented Boileau dryly. “It’s unlikely that the hotel will press charges.”
Boileau skipped forward to Dwayne entering Keith’s room. Ravi noticed that she had jotted down time-stamps on the notebook opened in front of her.
“Here we have Dwayne entering Keith’s room rather forcefully.”
She switched video files. This one showed most of Keith’s room, the bed being prominently centred in the middle of the frame. Still, you could see both men arguing heatedly.
Then, Keith punched Dwayne in the face.
Dwayne struck back, hitting Keith in the chest. Then in the face, then in the face again.
“Ugh,” commented Dwayne next to Ravi.
The video continued to show both men arguing forcefully, but they stepped back from each other and seem perfectly content to stick to verbal abuse. After a while, Dwayne backed away and left the room. Keith screamed some more at the closed door, then downed what was left of the two bottles of hard spirits.
“The coroner has already determined that Keith had a stupefying amount of alcohol in his bloodstream,” added Boileau. “Anyone else of his age and size would have been comatose, but we suspect he had built quite a tolerance over time.”
Translation: He was a habitual drunk and had been for years.
She skipped forward a bit. Suddenly, Keith screamed some more, jumped on his bed and gestured obscenely toward the door. Then, as if taken by a new idea, he went to the hotel balcony, opened the door, stepped outside in his underwear, and apparently prepared to make a grand balcony statement to the absent masses.
Then, surprisingly quickly, he slipped and tumbled. At his height, the railing was under his centre of gravity. He went over, head first.
As the room remained obstinately still, Boileau delivered her final statements.
“The coroner says that he hit his head on the second-floor balcony, then fell head first on the ground, snapping his neck. Dead instantly. The body cooled off rapidly during the night. I will be recording this as an accident fuelled by excessive consumption of alcohol.”
Boileau looked at them with some contempt, and Ravi could imagine some of what she was thinking. She confirmed it as soon as she spoke.
“I am a simple, plain woman and this is a simple, quiet town. If you big-city folks want to punch each other and die in dumb accidents, I suggest you do it at home.”
She snapped her laptop closed, making a few people jump.
“The coroner will complete his report. I will not be filing charges against any of you. I will, however, be spending the next few days filing multiple charges of voyeurism against the local pervert who installed cameras everywhere in this hotel. Considering this, am I to expect any more nonsense from you?”
Variations on “No,” “No ma’am” and “absolutely not” quickly came back.
“Good day, gentlemen. I hope never to see you again.”
A few minutes later, the surviving members of the Multi-Core project team were back in the conference room, with the DGs providing the latest updates.
“…and so we can affirm, with some evidence, that our ex-colleague Keith died accidentally, his death hastened by excessive consumption of alcohol.”
Ravi noticed that Dawyne’s role in all of this had not been mentioned, and did not object.
“At this point, given all of this, I think it would be logical to head back home-”
A surprising grumble of exclamations rose. As many were quick to explain, they still had half a day today, another half-day tomorrow, the hotel rooms were paid, the accommodations were fine, and they hadn’t gone through this two-hour trip, huge confrontation and murder mystery just to go back home without anything to show for it. Everyone was there and ready to go.
Get. It. Done.
So they did. By the end of their second day in Mont-Laurier, they had a workable roadmap to the MVP. Michel had dinner at the second-least-awful restaurant in town with his wife. By noon the next day, the entire Multi-Core group was fired up, aligned and ready to get the job done.
“I hope they don’t write case studies about this specific team-building exercise,” muttered Michel to Ravi before each boarding their ride back to Ottawa.
Ravi spent the bus ride next to an empty seat. It wasn’t a tragedy.
Chapter 4 – Through the Wall
Most of February flew past in a flurry of work. After the events of Mont-Laurier, the Multi-Core team was back on track—the sprints met their deadlines, the communication channels cleared up, the user testing happened promptly and the new definition of the MVP stuck together long enough that it became the real goal. Keith was replaced by a very nice older woman who wasn’t quite as knowledgeable, but communicated so well that she ended up doing better work. Ravi’s team had a small role to play on one of the modules and delivered to specifications with a week to spare.
But things weren’t necessarily rosy across the Kanban board. One module stubbornly resisted improvements, and that’s why Karen eventually had a new assignment for the group.
“We’ve got an issue with the routing module and time is running out. Performance is simply unacceptable — it’s slower than the previous system and we can’t have that. Ravi, I’m told you did optimization in your previous job. Time to get cracking on this one.”
“How much time do we have?” asked Michel.
“Not enough. You know the goal—up and running by April first, so we can strike that project off the planning commitments.”
Michel didn’t answer.
“This is not optional,” added Karen. “Lots of eyes on the project as it nears the finishing line. But that routing module must work.”
“Fine, fine, we’ll take a look at it.”
And that was how, two weeks later, Ravi was still beating his head against the problem.
“You’re fixating again,” said Djamila as she walked in their kitchen.
Ravi blinked. How long had he been staring out in the yard? Oh well — time to be in the present for a few minutes.
“You’re all ready?”
“All ready. We’ll be back Friday evening.”
She kissed him on the cheek.
“Enjoy living the single life, dear.”
“I’ll try to clean up before you get back.”
He saw her and the kids in the car and waved them goodbye. It was that time of the year for Djamila and her sisters to get together at their aunt’s house in Montréal, and the aunt was adamant that all of her nieces’ kids—all seven of them—should be there. Which left Ravi alone at home for three days—a very strange feeling considering that he had spent practically the last few weeks working from home, taking care of the kids when Djamila went to the office and her mom left for the day.
Oh well — at least he’d get a chance to focus on the routing module.
He went to his office in the basement. Djamila and he had voluntarily set up their respective offices at opposite ends of the house: his in the basement, hers on the second floor. Neither had anything to say about the other’s office (well, except for Ravi setting up her connectivity), which allowed him to set up three workstations the way he preferred, multiply the screens and cover the walls with shelves containing boxes of equipment.
The work computer was easily the least powerful one of the three. He had to do with a laptop provided and approved by SJC, but at least he had hooked it up to a big screen, the best keyboard and mice he could find and a better webcam than what came with the computer. A wired connection avoided any wi-fi issues, and a comfortable chair on polyurethane casters completed the set.
The mobile chair was not an indulgence, as he often went from one computer to the other during the day. A powerful development/gaming machine was in the middle of the room, complete with three screens (a portrait-oriented one for code, and two other landscape-oriented ones for general work). Another, weaker machine — his previous main station — had been configured as a media workstation and had a massive TV on the wall as its second monitor.
It all worked pretty well.
Unlocking the work machine, Ravi reviewed what he knew about the routing module.
In some ways, it was the algorithmic heart of Multi-Core. You fed it the transportation mechanism, the map of the territory, the specifics of the cargo to transport and it spit out the optimal path for delivery. This was seldom as simple as it seemed—in the logistics field, a simple A-to-B trip usually went through points C, D, E all the way to J in order to pick up cargo, deliver other things efficiently and save a bit on fuel costs. In extreme cases, there wasn’t a delivery as much as a never-ending circuit in which cargo picked up somewhere along the way were left somewhere else, with optimal load-outs every step of the way.
Logistics in Canada also had challenges of its own. The country was big enough and north enough that orthodromic navigation was often a good option, and temperatures had to be managed so that the fuel wouldn’t freeze (or, conversely, that cargo wouldn’t spoil). Mountains were in the way, cities had to be avoided (unless the point was metropolitan delivery), forests grew up by a few centimetres every year and glaciers were no longer immutable.
All in all, it was a headache-sparking puzzle.
Ravi and Michel had taken a look at the module as it existed, and hadn’t immediately ripped it apart: it had been competently put together, well-documented and included plenty of essential edge cases. Michel had progressively enhanced the API for clarity and flexibility, but Ravi’s work had been slower.
Part of the problem was that he was trying to defy decades of computer science itself. The routing module was only a few trivial details short of the Travelling Salesman’s problem, a famous, century-old optimization thought experiment.
Let’s say you’re the average poor schmuck of a salesman in a pre-Internet era. You’ve got a trunk-full of widgets, and razor-thin margins. You have twenty cities to visit and you want to minimize both your gasoline costs and your nights in a hotel. So: You want to calculate the most efficient route possible, knowing that getting it wrong means the difference between your kids eating or being given up for adoption. So you start plotting your twenty cities, and the distance between each city … until you end up with an exponential number of routes with every city to add to the trip.
It was a solvable problem, but computationally intensive — possible solutions increased with every city, and soon enough you’re spending more time calculating the route than just picking a random next stop and getting there. Getting deep into the weeds of the problem eventually took observers all the way to the quasi-mythical P = NP conjecture that brought computer science as close as it could get to pure magic, but there is a limit to the amount of CS-101 theory that readers of a comic novel will tolerate, so let’s not go there.
Ravi was not arrogant enough to think that he could out-think decades of the best computer scientists working on the problem. In fact, looking at some of the latest theory available on-line, he believed that his predecessors on the module had done a competent job at the overall routing algorithm. But the pathfinding within the optimal route could be improved.
It wasn’t enough to find out that a cargo shipment going from Montréal to Toronto could be enhanced by an additional stop in Ottawa to unload a few Montréal goodies and pick up a few things that Toronto was lusting for. (As absurd as it was to presuppose Toronto lusting after Ottawa products.) You also had to know what way to take from one place to another—was it best to drive from Montréal to Ottawa on the 50, the 417 or the 401/416? Drivers all had different answers based on such things as the time of day, roadwork, weather, season or exact destination.
(Using a driving analogy obscured the true nature of the problem — Once you realized that the routing had to include ships, trains, planes, helicopters and maybe one day drones, then it wasn’t so simple as making a call to the nearest GPS provider.)
Fortunately, Ravi’s previous background in videogames gave him a head-start on the problem. While Ravi would never be able to show a screenshot of a Murderer’s Oath instalment and say, “See, I did that!”, his work had been more fundamental: he often worked on the calculations that allowed Non-Player Characters (NPCs) to go from one place to another—say, from their home to their shop. This was frequently more crucial than it seemed—players often hated escort missions because of bad pathfinding, and they loved to make embarrassing memes about NPCs walking into walls and being unable to get from one place to another. You also had to do that while not slowing down the graphic engine, meaning that you couldn’t just brute-force the problem with unlimited calculations.
Ravi’s greatest professional achievement, so far, had been watching a review of a Murderer’s Oath game he had worked on, and hearing the well-known and normally sarcastic reviewer opine that “the NPC pathfinding in this game doesn’t suck as much as you’d expect.” That was roughly the extent of the public recognition he’d ever get for painstaking months of work.
Now he’d get to use that experience for the benefit of the Canadian taxpayer.
He had, over those two weeks, made a few significant enhancements to the module. Working with Michel’s API and tweaking small portions of the overall algorithm with familiar techniques, he had managed to reduce the total computation time by a third — something that was impressive on paper, but still far from being enough to make the module workable in a production environment. He needed an order-of-magnitude change in order to crack the problem.
It was time for rethinking the fundamentals.
He suspected that his way out of the problem laid in pre-calculations and computational approximations. It made no sense to resolve an array of equations every time the routing took place — there had to be a way to run some calculations beforehand, use a look-up table and save at least part of the computation.
Once again, he went over the steps of the algorithm piece by piece, examining which step took the most time and where he could have the biggest impact. He focused, as he usually did, on the step in which three-dimensional arrays had to be multiplied, matched and combined. This was an incredibly computationally intense step, and clearly the one everyone was afraid to meddle with—mess up one semicolon, and the cargo would end up on Mars.
The thing is—this wasn’t all that different from NPC pathfinding. The added complexity here was in the distances—NPC moved on predetermined flat (ish) terrain, whereas the distances involved here had to take into account the curvature of the Earth. Pre-calculating would require a big library, and getting to the optimal seeds would ideally need a bit of machine learning.
Ravi dawdled for a few more minutes. One so-far unresolved fundamental problem in software development was convincing coders to jump into a problem rather than procrastinate. Even despite code backups and versioning, there was always a feeling that once you opened up the hood and took apart the engine, you were really getting into it, you were committed — no stops allowed until the repairs were done or the garage was on fire.
He filled and started the dishwasher, spun a load of laundry, swept the entire first floor, got the mail, paid a few bills online, and only then pulled the latest file. He wasn’t supposed to develop anywhere but on government devices, but he made a copy of the module on his own development machine and put everything on his own Github account — it would simply be faster that way, and he wouldn’t feel as if he was screwing everything up if he did indeed screw everything up.
He looked one more time at the code he wanted to replace, then commented it all out. Then he started writing pseudo-code — just describing the main operations he had in mind to make sure it still made sense when written down. He’d convert all of that to actual code later.
From time to time, Ravi wondered if coding wasn’t the same thing as painting. In this case, he was working within the canvas defined by Michael and the system architects. His pseudo-code, progressively refined, was the general composition of the image he wanted to produce. Then, as he’d go along, he’d build the general scaffolding of the code—progressively sketching the nature of the elements inside the composition. Then he’d fill in the details, the lines of code that made it all work. Then, later, he’d spend more time on the bug-fixing, the edge cases and the monitoring code—the equivalent of a painter slaving over faces, hands and the details that made a painting credible.
By the end of the day, he had a scaffolding and a bit of mid-level code, but nothing workable. More vexing yet, part of his pseudo-code still contained comments like:
/* ??? - Magic goes here */
…which were not the foundational elements of robust software engineering. He, in other words, still hadn’t figured out those parts.
At least work was being minimally intrusive. A short stand-up meeting with Michel and Jasmine earlier during the day had clarified that they should all stay out of each other’s way for the rest of the week, and Ravi had gone one step beyond disabling new message notifications to not logging on his mail and messenger applications entirely.
Still, he painted in some of those details. The “???” parts of his code were still crucial, but they were increasingly surrounded by worked-in details. If he could figure out those parts, then the rest should follow.
But he still had a hard time cracking the code. He acknowledged, on some level, that despite the flow of this first day alone at home (wait, had he eaten?) had been, in many ways, make-work stuff. Placeholder noodling. Delaying the inevitable hard work that would be necessary to crack through.
As the afternoon ticked into the evening, then late night, he started alternating between coding and research. There wasn’t much more coding to be completed before it turned into bike-shedding. He had to hit the books and resolve his issues. By the time he called it quits, it was well past midnight but he had brought down the magic missing bits to two elements:
- He needed a fast transform function to approximate direction vectors; and,
- He needed to crunch an incredible number of possible scenarios in order to produce a lookup table that would replace array multiplication.
So simple — the kind of stuff Orbiware resolved through months of work by PHDs.
He went to sleep, but didn’t sleep. The trouble with being this deep in a problem is that it took over everything. He saw equations, smelled vectors, heard functions and touched variables.
And dreamt solutions.
He woke up, unusually sharp, well before his alarm. It was five o’clock, dark and cold outside, and he had an irresistible urge to go digging in the boxes still stacked in his basement.
His office took up a third of the basement, but it was adjacent to another room that was essentially a mini-warehouse. Boxes of stuff from Ravi and Djamila’s life — plus an increasing number of boxes with kids’ stuff — were piled to eye-level. One of those boxes had books from Ravi’s years studying Computer Science.
It took a few minutes to find the right box, but it had what he was looking for — a textbook on computational mathematics. The science of using digital code to progressively approximate analog equations. His dreams had dredged up memories of learning something… yes, there it was.
He could have looked it up on the Internet, but he didn’t know what he was looking for. The textbook was his key. He quickly flipped through the chapter he half-remembered—Fast inverse square root. You can read the details of that specific hack on Wikipedia, but the summary-of-the-summary is this: Once upon a time in prehistoric 1999, legendary coder John Carmack included in the source code of Quake III Arena a profoundly counterintuitive way to replace a series of complex divisions with a simple step, and commented the code with a profanity. The code was exceptionally clever, but the profanity was what anchored the incident in fellow programmers’ minds when the code was made public a few years later.
Now, Ravi did not need the exact fast inverse square root code that Carmack used — that was useful back when computers were far slower, and most modern compilers produced code that was just as fast in resolving the same problem. But he needed something similar, and the textbook gave him the language he needed to search for relevant papers, and the context required for him to understand it.
The next step was to make so many search queries that Google briefly thought he was a bot up to no good. Coding forums, research papers, Siggraph presentations — the answer could be anywhere, so he looked everywhere. Over time, he refined his search, got better at interpreting the results. Slowly, he began to understand what he was doing, and what he was looking for. All programmers steal bits and pieces — the hard part was knowing what to steal, and writing what was needed for the stolen stuff to work together. But he was far beyond SourceForge now.
Despite a few setbacks, he knew that he was steadily getting closer and closer to the answer. His search area was getting smaller, the pings from his cognitive treasure finder getting louder. At some point, he started noticing that his solutions were converging and repeating. By the time he saw two different pieces of code and realized they were doing the same thing, he knew he was there.
Now, when we say that programmers “steal,” let’s not pretend it’s simple copy-and-paste. Logic is what gets quoted—the implementation is up to individual style crossed with corporate style requirements. Ravi didn’t put a chunk of code taken from the Internet in his module—he reinterpreted, smoothed out a few weaknesses, put in some error-checking and made it flow with the rest. No matter the inspiration, the result was indisputably his.
He ran a few limited unit tests, taking into account the still-missing lookup code. It worked. He profiled the code—it worked much faster than the baseline results, exceeding the required performance objectives.
Suddenly drained, he realized when it was. Three o’clock in the afternoon. He hadn’t logged-in to work. He was still wearing pyjamas. He hadn’t eaten since his last-night snack. He was definitely starting to smell a little.
The prospect of attacking the look-up table number-crunching seemed beyond him. He sent a quick text to Michel (“Still alive. Spent the day in the zone. Huge progress. 80% done.”) and went to take a shower.
The shower lasted much longer than expected, because he kept zoning out thinking about the next steps. He washed his hair three times, temporarily forgetting that he had already done so. But by the end of the shower, something had clicked.
It wasn’t fully baked yet, though, so the kitchen was his next stop. Putting together a sandwich, he thought further about the training parameters required to create good lookup tables. The number crunching. Scaling back the latent solution space for results. The fast transform function was late-twentieth-century computer science, but this next part was going to be pure twenty-first century stuff.
It wouldn’t be easy, and he was probably looking at another full day of work just on this alone. He reached into his emergency cabinet and got his special open-in-case-of-emergency can of superpowers — an energy drink.
Ravi did not usually drink caffeine. This quirk defied more than a few stereotypes—public servants IV-dropping coffee, programmers with duelling Monster Drink and Red Bull tattoos. But caffeine disrupted his sleep patterns more than he cared for, and caffeine withdrawals usually led to aspirin-proof headaches. He used it like World War II soldiers used amphetamines—in case of emergency, when they needed a boost in order to positively, absolutely shoot the other guy dead.
He finished the sandwich and the energy drink, mindlessly looking outside and letting his mind wander some more on the problem. Calculating the final look-up table wouldn’t be his problem — he would once again spin up an AWS instance and crunch the numbers on the cloud. But coding the training scripts would be his problem, and there were many, many variables involved. Ugh.
But that’s what the energy drink was for. After a few minutes, he started feeling the unfamiliar buzzing of the caffeine flooding in his bloodstream. The jitteriness, the fast thinking. It was a good thing he didn’t have to speak to anyone; otherwise he’d be motor mouthing two hundred words a minute. He removed his sweater—he’d be radiating heat for a few hours.
All right! Time to get to work. Make the computer learn something. It wasn’t just writing a training model. It was also creating a fit-assessment model. Making sure the right answers were computed. Fortunately, Jasmine had already worked on it. Created nearly a hundred test cases. All based on the most popular routes. Taken from the legacy system that Manticore was replacing. Adapting them was easy. Re-use the route data, but put it as interrogation. Same process to test results before and after. All scripts, all automated. The first he’d run locally. Making sure it worked before spending AWS credits. That part was over easy. Now on to the training model. Pull up guides. Use CUDA library. Nice to have an Nvidia card: built-in ML tensors. Look up existing scripts. Rip out the internal. Replace by first approximation. Run locally. Test against expected result. Better than random, but not quite there. Add a few more variables. Don’t forget curvature of the Earth. Run again. Better. Add more cities, more variables. Look up optimization techniques. Add more steps. Realize not all VRAM was being used. Recompile framework script. Run again. Better! Much better! Look up tips and tricks. Understand better. Add feedback pipeline to re-use results. Add routine to avoid overfitting. Add checks to prevent wild first iterations. Run again. Still better! Rebalance weighting parameters. Realize one factor is repeated twice. Hot in here: GPU overheating? Realize that more data is required. Go back on CLC network. Ignore emails and messages. Download entire legacy system routing database. Upload on personal system. Automate quick extraction of data into a far more massive fitting database. Find paper on dropping edge cases. Realize depth of ignorance. Quick despair. Back on the horse. Add dropout code. Test again. Still better! Tidy training data to focus on repeated routes. Test again. Only slightly better. Plateauing? Overfitting? Time to get AWS instance? Re-check code. Find minor optimization. Progressively increase batch size to counteract learning plateau. Oversample newish learning data. Read more recent papers. Reduce regularization, improve reinforcement routine. Test again. Definite plateau. Time to pay the Bezos. Blunt force number crunching. Spin instance. Configure ML VM. Upload model. Last-minute check. CRUNCH. Wait. Wait … wait…
The AWS machine was kind enough to ping when the script ran its course. Ravi opened and blinked his eyes. What time was it? Halting the AWS instance, he downloaded the lookup tables to his computer. Would it work?
Bleary-eyed, the caffeine clearly burning out, he ran his test suite.
Maybe he was dreaming, maybe he was tired enough to have missed something.
He ran the test again.
He cleared the cache, wiped out the generated files, rechecked his testing parameters and ran the test again.
He had been hoping, and planning, for an order-of magnitude improvement and had managed two of them. And the results were good — he even tried some of the rare edge cases he had removed from the database and got significantly better results.
He was done. He had done it.
Looking at the daylight slowly brightening the day outside, he quickly compiled the module, included the new lookup tables and sent the results to Jasmine for testing, with a CC to Michel. “HUGE SUCCESS. Worked around the clock. Will now crash.”
He’d document later.
For now, though, he was going to sleep.
“Ravi?” said Djamila. “Are you still sleeping?”
He loved his wife, but not at that specific moment. He was about to answer something sharper than advisable when he looked at the clock. Eight PM.
Oh boy — the headaches would be bad enough, but getting back to his usual sleep schedule would be something else. At least it was Friday.
He was reasonably functional the following Monday, which was a designated office day. He had spent much of the weekend recuperating, playing with the kids and making small tweaks to his code — just to make sure that his caffeine binge hadn’t produced incomprehensible work that just happened to compile. Everything held up rather well while sober, even if a few changes had improved legibility slightly. He’d comment later, after the code review.
That code review was scheduled to take place early in the day—The pressure was on to get Multi-Core back on track, and a speedy integration of any routing improvement was seen as vital. Jasmine had run the unit tests and confirmed the performance improvements, so the next step was a cursory review of the code before merging it into the main trunk.
Word of Ravi’s work on the module had already gone up to Karen, who invited herself to the code review. He wasn’t sure what she’d contribute, but he supposed it was for the clout of it.
“All right, let’s go,” said Michel. “If we stick to the code, we should be done by noon.”
The code review took place in one of the meeting rooms with windows — they had a nice view of downtown, but more importantly they had some natural light. The north-facing room was not yet drenched in sunlight, so they had the drapes open and the light didn’t overwhelm the screen, which was flanked by doors on each side. That room was a favourite of Michel — Ravi would have been perfectly happy in one of the smaller windowless areas closer to their offices, but Michel was the boss and organized the meeting, so…
“That’s… quite a lot of stuff you wrote last week. Can you take us through it?”
Ravi delivered a five-minute version of his code logic, pointing out how it was shaped by Michel’s new APIs and followed the Multi-core code formatting standards. He broke down the structure of the new module, described how he’d developed a fast transformation function and how he generated the lookup tables. Even barely scratching the surface, he saw how Karen’s eyes were glazed over.
“I’m not quite done with the module,” he concluded. As a sop for Karen, he added: “As usual, coming up with the code is something, but it needs to be polished, optimized, reviewed for exceptions and errors. Also a lot of documentation.”
“But it works, right?” said Karen.
“All the unit tests show a two-order of magnitude improvement in performance, with the exact results we were looking for. Actually, no that’s not true—there was one test when we didn’t get the results, but when I checked it your new module had found a better answer than the one suggested.
Ravi didn’t know that, but it was a nice bonus. And bode well for future-proofing.
“So you’re a go?” asked Michel.
“The tests pass, and the code looks fine to me. Sure.”
“I’m not crazy about the lack of documentation and I’m tired of repeating myself about it, but OK, let’s merge it.”
Michel opened the commit log. He added Karen, Jasmine, Ravi and himself to the list of reviewers. For some reason, Ravi noticed that the information also included the meeting room—probably to track who was doing it from home. Michel reviewed the code one last time, then clicked to merge the code into the Multi-Core main trunk.
None of them quite anticipated what they’d set in motion with the simple click, but they would find out five minutes later.
In the meantime, a subdued Karen had a few generic “Good Job!” words for them, and Michel discussed what was next now that Ravi had delivered on what was expected of them.
Ravi was starting to look forward to lunch when, with a noticeable Pop!, a hole appeared in the wall of the meeting room where the screen was. A faint violet line marked the outline of the hole. It was perfectly round, roughly two meters in diameter and on the other side of it was what looked like a research laboratory with a few people looking at them.
Karen jumped back, got up and pointed at the hole in the wall.
“What is that?!”
As Jasmine, Michel and Ravi took in the sight, two people came out of the hole and into the room—two women. One was petite, white and blonde, looked like she was in her twenties; the other taller, older, darker and brunette. The blonde smiled; the brunette didn’t.
“You must be Ravi,” she said.
“And you’re Michel” said the other woman to, well, Michel.
“We don’t have a lot of time. Every second counts. Do we have to explain, or are you willing to accept that we’re not from here or now?”
“I…. I’m willing to accept that, yes.” said Ravi. “The hole in the wall is very convincing.”
“Great. We need your help. We need both of you to come back with us. You’ll be brought back here, unharmed, in five minutes of your time.”
“You will be compensated for your effort and your expertise.”
What could you say to such an offer?
“All right, then.”
Ravi was getting used to weirdness, but this was next-level enough that he felt compelled to see it to the end.
“What about me?” said Karen.
“Who are you?”
“I’m Karen! Their director!”
“Oh, you. No, you won’t be useful to us. You can wait here.”
“And me?” asked Jasmine while Karen stared at them, mouth agape.
“Jasmine, you cannot under any circumstances be allowed to come back with us. Your colleagues will explain when they return.”
“Okay, I guess,” she said incredulously. “But I’m taking this personally.”
“You two, come with us,” gestured the brunette.
Ravi followed, and Michel as well—both of them making exaggerated gestures to avoid coming in contact with the luminescent edges of the hole.
They stepped through the hole into what looked like the set of a Science Fiction movie. Wire-studded electric equipment shared space with smooth glass surfaces used as input devices, complex machinery everywhere, a slight buzz of high energy as background noise.
Behind them, the hole went out of existence with an audible Pop!
“Michel, Ravi, welcome to 2055.” said an impossibly familiar voice.
They turned. There she was, older but still recognizable.
“We need your help to debug a piece of code”, said Jasmine.
Chapter 5 – Generational Tech Debt
“I understand that this must all be very disorienting,” said Jasmine, “so we’re going to have plenty of time for explanations and questions. I’d like to pretend that I’m here so that there’s a familiar face to greet you, but that’s not true. I’m the one who got the idea to bring you here, and I’m the one who made it happen. Fortunately, it’s not coming out of my budget.”
If she was thirty years older, she wasn’t showing most of those years — she looked like a slightly older sister, not like a mother.
“Wait, wait–” said Ravi.
Jasmine looked at him and waited.
“…What?” he finally blurted.
“Okay. Look, we’re going to leave this lab and get to a friendlier place for you to work in. Please follow me.”
She gestured at the two women to follow them.
“If you can just be patient for two more minutes, we will explain.”
She led the way silently, the two women not-so-subtly boxing them in. As they left the lab, Ravi was grateful for the short break—every moment was one more opportunity to process what they were going through. If this was a hoax, he couldn’t even begin to imagine how they’d done it. The hole in the wall was one thing, but the messy lab, high-tech display devices and apparent resurgence of beige as a dominant colour all contributed to the working theory that they were really in 2055.
The corridor in which they were walking was nondescript, but Ravi couldn’t help noticing the strange new electrical plugs, the roving bots on the ground, and the weird aesthetics that seems to blend 1970s colours with 1950s flair.
Jasmine gestured and a door opened before them, leading to another room.
“This is going to be our base of operations for however long you’d like.”
Surprisingly, the place did not look like an office or a meeting room. It was closer to a studio apartment, more than spacious enough for two people. A large living area contained what looked like apartment furniture, sofas arranged around a big coffee table, plus two computer workstations. An area to the right led to a kitchen. Two doors to the left led to individual bedrooms. Another door next to the kitchen suggested a bathroom. And at the far end of the room, a very large window showed a skyline. The two women entered with them.
“I’d like to introduce you to your two guides—Olivia and Jany,” said Jasmine.
But neither Michel nor Ravi were listening. Drawn to the window, they took in the view.
It was Ottawa, but not quite Ottawa. They were a few floors up, and they had a good view of downtown from the south-east. Some of the city landmarks were visible—Lansdowne, for one, the Rideau Canal for another—but there were many more condo towers punctuating the skyline. Many of them were of unusual height, far taller than the 2020s city limit. Below them, an LRT rolled where no LRT had rolled before. Then there was the large number of drones and quadcopters flying around.
“I’m convinced,” said Ravi.
“I’m getting there,” said Michel.
Jasmine cleared her throat.
“Yes, that window gets a lot of comments. I can’t blame you for rushing there. But as I was saying, I’d like to introduce you to our two guides — Olivia and Jany.”
Olivia was the darker-skinned woman who looked to be in her thirties but acted older. Jany, on the other hand, was the younger blonde with an asymmetric haircut who behaved like a dog eager to please.
“I’ll have to go in a few minutes,” said Jasmine, “but they will assist you during your stay here. Olivia is a specialist in time-travelling portals, while Jany is one of the Multi-Core product managers.”
“Multi-Core?” both said Michel and Ravi.
She sat down on one of the sofas in the middle of the room and gestured for them to sit down as well.
“I should be the one to tell you why we brought you here. The Multi-Core system on which we worked thirty years ago is not only in use today, but it’s routing about thirty-five percent of the air traffic in Canada at the moment. Considering that there are about fifty-two million of us these days, that’s a lot of moving pieces.”
“It’s still in use?”
“Government systems are built to last. Our team did such a good job that others started using it, and it snowballed from there. But that’s not the important part.”
“Let me guess,” said Michel. “It’s not working as well any more.”
“Increasing inaccuracies. Getting worse every year.”
“And you can’t figure it out?” asked Ravi.
“Look, we’re not idiots here in 2055, but Information Technology is no longer attracting those mythical best and brightest. Moore’s law died a while ago, expectations went along with it, people got used to a performance plateau, there’s been a lot of commodification and IT is now seen as a utility. Most development is handled through low-code expert systems.”
“Surely there’s still research and development-” said Ravi.
“For very large companies who can afford expensive bunch of increasingly older and more expensive staff despite diminishing returns, sure. But IT is seen as charmingly quaint these days. Kids are going elsewhere, in biotech.”
“Surely you must still develop systems-”
“Mostly through Artificial Intelligence-assisted natural language interaction, yes. But you can probably guess the limitations of that.”
“No new algorithmic work, common frameworks, no optimization.”
“Close. Let’s just say that AI coding is faster and cheaper than hand coding.”
She gestured expansively.
“It’s not that we can’t figure out a way to replace the module. It’s that the way you implemented the system, in between your API and your base code, is still faster than anything else on the market or in the lab.”
“You can’t figure out what I did?”
“You did not document your code.”
“But… I’m about to. Later this… afternoon?”
“No, Ravi. You never did. You always said you were about to, and the Multi-Code project team was only too happy to give you something else to do. Why bother commenting it? After all, it just worked.”
“But surely you could reverse engineer, or just ask—wait—wait—WAIT!”
He gasped. The biggest chill of his life ran down his spine.
“I’m no longer alive, right? That’s why you couldn’t ask me.”
“That’s right. You’re dead. But that probably wouldn’t help.”
She turned to Michel.
“You’re still alive in this future. But this was so long ago, and you spent so little time on the Multi-Core APIs that the current version of you was of no use to us. You couldn’t remember a thing. And yes, you’re still living happily in the woods with your wife. Nice place. We were there three weeks ago.”
“Great decorating work,” piped Olivia.
“Your wife makes great cookies,” added Jany.
“So that brought us back to historical you. Relatively speaking. Freshly off the coding work, as per the merge date and time.”
“This is … weird.” said Ravi. “Like, really weird. Debugging by time travel? You bringing us in the future so casually? Doesn’t this break like ten different rules of time travel? Will Michel vaporize because he can’t be in two places at once? Should you even be telling us all this?”
Jany huh?-ed audibly as if that was the weirdest thing he’d ever heard, and looked quizzically at Olivia.
“They’re from the pre-Antoniadis era of temporal physics,” said Olivia.
“WHAT?” asked Michel and Ravi.
Olivia spoke up. “You probably think of time as a straight arrow with linear cause and effect, one single past leading to one inevitable future. It’s really more complicated than that. Do you want the full presentation?”
“Well, I’ll try to summarize, because it’s not really relevant to what we’re trying to do here, and the details are fit to give anyone migraines. Time splits into parallel universes all the time. Many of those universes merge back into each other, leading to strange quirks like the Mandela Effect, deja vu and perception breaks. The only workable ‘time travel’ we have is punching through parallel universes at different moments, a bit like a squirrel going from one branch to another.”
“We’re no longer using that analogy, Olivia,” gently said Jasmine.
“Oh, right, sorry, very misleading. Anyway, the point is that you definitely come from our past, but we are almost certainly not your future. The moment you go back to your present, tiny quantum deviations will ensure that this here will no longer happen for you.”
“So cheer up — you most likely won’t die in that maple syrup warehouse explosion.”
“Urk-” answered Ravi.
“There are a few other things too — like we can only open a time-travel portal back in time, never forward. It takes a colossal amount of energy just to open the portal for a few seconds. We can’t really go back to “change the timeline” or such nonsense. We’re limited to the favourable alignments between parallel universes, and we’ve never been able to open a portal older than thirty years. The computations to calculate the coordinates required to open a portal are terrifying. But we’re really getting away from our focus here.”
“I, for one, would like to know more,” said Michel. “A lot more.”
“The point being,” said Jasmine while getting up, “that we’re asking you to work with us to fix the algorithm. You will be paid very well and you can take the time you want. Olivia and Jany are up to speed on the tools we use and the current state of the system. I have to go report on this meeting to many people, but I’ll try to return soon.”
“Jasmine?” asked Ravi.
“Of all the things I can ask, there’s one I’m particularly curious about. Thirty years later, you and Min-Jun-“
“Oh, we went our separate ways a few years ago, but we did raise two kids.”
“The first one has your name as a middle name.”
As she left, Olivia took the lead.
“Jasmine is too modest to mention she’s the CIO in charge of Multi-Core. Her schedule is really busy. Now, let’s get you started.”
She brought them to the two workstations in the middle of the room.
“We’ve got a few things here to help you. We understand that you won’t be familiar with our current coding tools, so we tried to provide you with systems that we were used to—a few emulators, a few transcoding scripts, some legacy hardware. You’ll have access to a copy of the code base—unfortunately, your security clearances have expired, so our Meta-Security people weren’t willing to allow you production access.”
“How can we renew our security clearances?” asked Michel.
“They did ask, Olivia. The temporal ethics commissioner ruled on that.”
“What?” said Ravi.
“Don’t-” tried Olivia.
“You’re not the first temporal visitors to come here,” answered Jany with a bit too much enthusiasm. “As such, there’s already some jurisprudence about your rights and freedoms. You have all the rights of a Canadian citizen in being protected from harm and having access to essential human rights—”
“Glad to know,” muttered Michel.
“-so we have to provide you with reasonable accommodations and in your case, you are still considered Government of Canada employees. Your PRIs are still on file, your personnel files have been reactivated, your social benefits have been indexed and you’re still unionized.”
“Wow.” said Ravi unironically. This was actually kind of endearing — in its own bureaucratic way, the Government was still taking care of them. (Or, as Michel would later say, was still compelled to follow their collective agreement to the letter.)
“So, yes, your request to renew your security clearance has been recorded and activated. Ravi, do you want to make the same request?”
He shrugged. Why not? It would probably take six months longer than his return to the 2020s, but considering Olivia’s frown, it felt like fighting back a little.
“How about pay—?” mentioned Michel.
“Already considered,” said Olivia. “You heard the part about you being well remunerated? You’ll be issued with a pay stub upon your return home and secured compensation that you will be able to use back home.”
“Well, then, no excuse,” said Michel.
“You did snatch us right before lunch, though” pointed out Ravi. “Why don’t you brief us over some food? How about a good old-fashioned pepperoni pizza? If you still have those?”
Even as a stalwart union guy, Michel wasn’t going to start nit-picking about the issue of working over lunch breaks. Even if the kitchen was full of things to eat, Olivia ordered a few pizzeria stables to be delivered — as it was four o’clock over here, it wouldn’t be much of a group meal, and Ravi understood that he would be facing another uphill climb in re-acclimating himself to the clock.
While waiting for the food to be delivered, Ravi couldn’t help but sit at the station that had been installed for him. It was still recognizably a desktop computer—two large bezel-less screens, one teardrop-shaped mouse, a keyboard, and a central box that housed everything else. A pair of VR goggles were placed behind the monitor—available if necessary, but apparently optional. If those were legacy hardware pieces, they still looked brand-new—no sign of discolouration, use or dust. He pushed on a button, and the thing instantly came to life at the desktop, ready to use. Had it been in sleeping mode, or was boot-up always this quick?
He looked at the icons. Many of them, and their associated names, were unfamiliar. No browser he could recognize. Except, what was this? Horizons? That seemed promising.
Instantly, a screen greeted him: Advanced Logistics Canada Intranet.
He entered cbcnews.ca in the empty URL bar.
“It’s not that we don’t trust you,” said Olivia behind him, “it’s that we’ve found this to be better for productivity.”
“I request open access to the Internet,” he said.
“Request received and submitted,” she said with a sigh. “It may take up to twenty-hour hours until resolution.”
“That’s how it works,” said Jany with delight. “The ethics commissioner had some really specific guidance on how to treat people brought back from the past.”
“Do you do that often?”
“I’m afraid that’s classified info. You have rights to information concerning you, but that doesn’t extend to operational matters.”
“Do I have a file?”
“Can I see it?” asked Ravi impishly.
At this stage, anything he could do to fluster them was fun.
“Oh, for goodness’ sake,” sighed Olivia.
“Of course you can!” said Jany. “It will be delivered tomorrow.”
“Same here,” said Michel. “And I want open access to the Internet as well.”
“Oh, it’s so cute you’re still calling it the Internet!” said Jany.
When lunch arrived, Ravi was relieved to see that it was what he expected. He’d asked for pizza, and he got pizza. There were so many tiny odd differences between the thirty years that he was constantly surprised and that took a toll. Even knowing that they were in a carefully designed environment designed to minimize future shock.
Then he tasted the pizza.
Despite looking the same, it tasted different. The difference was hard to describe. Less salty, more flavourful. Overall better — not quite as hard-hitting on the salt and fat than he was used to.
“Yes, we know,” said Olivia. “Others have told us as much. This is what you get these days. Not much appetite for the old-school stuff these days.”
“Hmmm,” said Michel noncommittally.
“Also, Pizza isn’t as popular as it was back in your time.”
“What’s popular, then?”
“You’d be surprised at how big Shawarma got.”
“But we’re from Ottawa. That’s not much of a change.”
“Then you’d be surprised at how people now eat like they did in Ottawa.”
As the pizza got smaller, the shop talk grew sharper. Multi-Code had gone through two significant updates in thirty years—the first to port to new semi-quantum servers, the second to adapt to the AI-driven higher-level programming language. The code that Ravi and Michel had worked on was still the foundation of the program, but they had been encapsulated by two more layers of abstraction. The user interface module had been rewritten a few more times to accommodate new templates, access device paradigms and adaptable inclusivity requirements. Yet the engines of the system toiled on, buried in the figurative basement of the code and accessed very rarely by specialized personnel.
“There’s actually a debate going on as to whether they should be called paleo-developers, info-archeologists, or deep-core coders.” said Jany.
“I don’t like any of those” grouched Michel.
“I kind of like the last,” admitted Ravi.
Nonetheless, both of them kept up with their future minders, absorbing information about how the system had been ported over a few times, how the code repository had been transitioned to new platforms every decade, and the mixture of shims and emulators that kept some of the older code running.
“We’re hoping that in giving us the keys of how you computed the lookup tables, we’ll be able to complete the work to get rid of those older layers.”
“How long are we expected to take to do this?”
“We were hoping to be done in a few days,” admitted Olivia. “At least that’s what Jasmine suggested when she spoke about you two.”
Great, thought Ravi. Pressure by flattery.
As they talked it over, both women also taught Michel and Ravi how to use the workstations. While they had been set up in a rather charming approximation of their desktop environments, there were thirty years’ worth of enhancements available under the hood. Although, once Ravi got familiar with what was available, he felt underwhelmed by the changes.
It all amounted to maybe ten years’ worth of progress, plus arbitrary design and UX decisions. Different, but not incomprehensible. Olivia and Jany hadn’t pressed the point—he suspected that other than asking for his own personal file, information about the future was on a semi-strict “need to know, pressed to ask” basis—but information technology had indeed fallen by the wayside over the past three decades. The computers were certainly snappier to use, but the desktop paradigm hadn’t changed much. The vocabulary was still recognizable, and Ravi wasn’t that overwhelmed by the changes. After a few minutes, they were looking at their own code, and felt almost at home.
Even in this carefully controlled environment, he couldn’t help but notice a few unmentioned things about this future. Olivia and Jany had both skirted the question, but Ravi saw bits and pieces of a biotech-heavy future around them. Olivia behaved at least ten years older than she looked (not to mention Jasmine)—and both of them had such flawless skin that something was going on. Ravi was an idiot when it came to makeup, but his wife had explained and shown enough to him that he didn’t think that cosmetic products would explain the result. The pizza felt, in a word, perfect—and Jany had said something about the pepperoni being from ethical sources. Both women had eventually wolfed down two slices of pizza each without making a fuss, but their skin seemed slightly redder now, and warmer whenever they came close. Their muscle definition was remarkable. There was no perceptible excess weight on any of them, nor Jasmine, nor anyone else they’d seen since they’d gone through the wall.
Would biotech be advanced enough for micro-metabolism adjustments? Would it feature skin renewal and rejuvenation? Had all meat been replaced by lab-grown equivalents, controlled for ideal nutrition? Were people getting jacked up by safer supplements and muscle stimulation? What else was going on in this future where IT was a solved problem and biotech was presumably where most of the innovations were coming from?
The cynic in Ravi couldn’t wait to talk to Michel about it — the older man would be far more creative in his suppositions. No doubt he’d be talking about the trail of errors and failures that could have led to this result: Never take the 1.0 biotech supplement!
But that was for later. For now, Ravi was content enough to be in his code, taking a look at how it had been superficially modified since then, and getting back into documenting his intentions. He shrugged and started to work. Jasmine did have a point — the code was still fresh in him mind, and he simply had to explain the obvious-to-him.
Still, it felt like pure drudgery — exactly why he didn’t like documenting code, and liked to say that it spoke by itself. This was usually true — but this was the first time he was using such extensive look-up tables, so in some ways he had outsmarted himself on that front.
It’s not as if he hadn’t taken any notes — he was pleased to find one little README.md file in the directory tree, with some very cryptic fields that helped him structure the more formal documentation. But he could see how others would be completely lost.
Part of the lookup generation he would not be able to rebuild—it depended on the hodgepodge of scripts, quirks and jury-rigged code he had assembled in a fury of caffeine and stored on AWS, all thirty years gone.
Wait, was that true?
He tried logging in on AWS. You couldn’t be too sure…
“Is my open access to the Internet coming along?” he asked Jany, not Olivia.
“Still under review.”
“I may still have an AWS account.”
“That would be really unlikely considering the data centre shortages of the late 2030s, but we can check whenever your access is granted.”
He shrugged. Too bad. It did mean that he wasn’t too keen on trying to re-create what could be downloaded in a few hours. But he still had to complete the attempt.
At nine o’ clock, Olivia excused herself. She would go home, sleep and come back for the next shift at three AM. Jany would remain from nine to three, and both of them would be back by nine in the morning.
Ravi filed “less than six hours of sleep” in his expanding mental notes on future biotech. Fast transit also seemed to be in the forecast.
“I hope you’re getting paid overtime,” said Michel.
“Oh, we are,” said Olivia.
“Which reminds me — I want to see my Collective Agreement.”
She groaned again.
It was around ten when Ravi stopped documenting. He was feeling unusually tired — despite being four hours out-of-phase, the day had been mind-bending, and he just may be able to sleep if he could wrap his mind around being thirty years in the future. (A future, rather.)
Ravi went exploring the fully stocked kitchen. Having been raised on Mississauga’s multi-ethnic groceries, he was probably better prepared than most for the variety of new flavours available. Still, the pepperoni pizza had told him nearly everything he needed to know from the food he grabbed for nibbling—the new food was good, tasty and probably healthier than what he was used to, but it wasn’t as heavy on salt, sugar or fat. The spices seemed sharper, though. New food regulations? Or the changing tastes of an increasingly diverse population?
He went back to the central discussion area, where Michel had settled after completing his part of the documentation. Jany was, of course, there to keep an eye on them.
He dropped two bags of chips on the table and pushed them toward Michel.
“Those are pretty good,” he said.
“How is it going?” asked Jany.
“Nearly done on the formal documentation. Re-creating the training scripts will take longer, but I think I remember enough. It would be helpful if I could check my AWS account.”
“We’re working on that. We’re also checking if we have your personal archives.”
Jany was able to file, check and report on a lot of things without seemingly having a cell phone or any other communication device. Something else to investigate.
“Do you feel that this is all morally acceptable?” asked Michel.
“What do you mean?”
“This idea of going back in time to get workers from the past to fix bugs.”
“The temporal ethics commissioner-“
“-Was set up to deal with a fait accompli, I’m sure. But really—should the future get to get resources from the past like that? What’s stopping you from getting more resources—after all, you’re quite comfortable knowing that our disappearance from our time won’t affect yours. Meanwhile, there’s nothing we can do to stop you.”
“Well, it’s expensive, and also the temporal ethics commissioner-“
There was an uncomfortable pause as it became obvious that Jany wasn’t going to add anything more.
“So,” said Michel, “tell us about the world. Strictly for our entertainment value, considering that we’re unlikely to end up exactly here.”
“If you’re counting on me to give you the next winners of the Stanley Cup, you’re going to be disappointed.”
“You’re going to tell us that quantum fluctuations will ensure that the list is invalid?”
“Well, yes, but also the NHL was disbanded in 2033.”
Michel stared at her.
“OK, I admit that was a joke.”
For some reason, Ravi felt relieved… and he wasn’t even a hockey fan.
“The problem is that we suspect that the long-term trends are unusually resistant to quantum fluctuations. Specific events may be susceptible to variation, but the overall picture isn’t.”
“We can guess a few things from what we’ve seen, though. Ottawa is out there and thriving, meaning that we’ve had thirty years of general prosperity. Canada must be doing well, and I suspect that the United States can’t be that much of a hell-hole. Biotech is advanced enough to reduce aging, and I don’t think you’ve ever had to diet or mindlessly exercise in your life, right?”
“So far so good.”
“Lots of snacks of Indian origins in the kitchen, not so many ones from China.” said Ravi. “While I’d like to think that you care about what I would like to eat, I think there’s a story there.”
“I don’t get to give you that part of the briefing,” said Jany.
“Strictly Canadian Content, right? Okay, here’s one I’m curious about: Is there a Canadian flag on Mars?”
Ravi and Michel high-fived.
“What happened to Shared Informatics Canada?”
“Disbanded after twenty years, all functions transferred to Government Services.”
That went on for quite a while, sometimes getting an answer, sometimes not.
By eleven, they were down to naming artists and web sites, most of whom met a blank from Jany.
“I think I’m done.” said Ravi, yawning. “I’ll be turning in.”
“Your measurements were taken earlier,” said Jany. “Clothes will be delivered by tomorrow morning.”
Ravi thanked her, then prepared for bed. 2055 was full of surprises, but he didn’t think he could handle a single more. He set his alarm clock for eight.
Surprisingly enough, Ravi woke up at seven, feeling remarkably refreshed. His hosts had kept their promise—there were a few clothes his size available to him, and Olivia was the one standing guard. A continental breakfast was also available, and their computers had been updated with some access to the outside world.
Amazingly, he still had an AWS account, even if the two-factor authentication required some assistance from Olivia and her unseen army of helpers. Looking at the account log, he saw that a few years from now –A few years ago in the future? Temporal verb tenses were weird– he had sprung for a lifetime account as long as it stayed under a specific size and usage threshold. The company had apparently not checked his log-ins. Or maybe his kids had kept up the torch? No matter: He had the training scripts right there.
That would cut through the time required to get it all back up. If he had understood correctly, Michel didn’t have much to do any more — it all fell on Ravi.
He repressed his natural curiosity to go out and read all he could read about 2055. He focused — the faster he fixed the problem, he faster he would be able to go home. Considering the quantum fluctuation factor, would it be helpful to read on a world whose details would be forever different?
So he roared back into getting the training scripts up and running. Part of the anticipated difficulty was that the Machine Learning algorithms had advanced a lot in thirty years, even with the stagnation of IT. What worked a few days (or rather decades) ago would not necessarily work the same way. There were a few adapters, sure, but would they produce similar results?
One way to know: he ran the scripts.
Compilation errors, of course. Deprecated functions. Ugh.
An hour later, he was up to speed on the newer frameworks — enough for the training script to run, anyway.
It generated something. It was now time to get Jasmine’s test scripts out of mothballs. He chuckled at the thought that if something went wrong with those, he could ask her to take a look.
But nothing went wrong. They had been adapted over time, and they confirmed that his newest look-up tables were at least equivalent to his old ones. In fact, they were a bit smaller and faster — but that was all thanks to the compiler, not him.
OK, great — by noon, he was up to the final problem: Why was the routing module getting less and less accurate by the year?
He closed his eyes to visualize what was going on.
A few things helped the debugging—the inaccuracies got worse over time, and they got worse over long distances and they got worse the farther north you went. That suggested a compounding factor, not necessarily a specific error in his logic. So what could change over time?
He thought, for some bizarre reason, about continental drift. But that didn’t make sense for two reasons: Continental drift wasn’t an error within Canada, and it would take millennia before seeing any significant change.
EMP interference? But that would be specific to transportation devices, which included hardened military electronics.
He still didn’t have access to Wikipedia (which still thrived: he’d checked), which was getting increasingly annoying — he was in research mode.
By this time in the day, Jany was back and looking as chipper as ever.
“Don’t I get research assistants, or anything like that? Any ideas and theories?”
Olivia intervened, as she did when it was a bad-cop answer.
“We’re trying to limit the number of people exposed to you. It’s a best practice.”
“I’m not sure how keeping me in the dark about everything will help me figure out and research what’s wrong.”
“You could use the AI Virtual Assistant. You don’t have to use the VR module.”
Right, he could. All right. Let’s try that.
It was right there on his desktop. He activated it, but despite a remarkably lifelike simulation of a young woman eager to help him, it was obvious that this was just a glorified search engine with better natural language processing.
He was not going to talk to a computer. He’d refused long enough to give in now. Long live the keyboard — he could type faster than he spoke anyway.
>Hello assistant, which factors have changed geography over the past thirty years?
The assistant answered by talking about climate change, more climate change, a lot more climate change, and a little bit of climate change on top.
A little bit of magnetic pole shifting, but not much. Which was also increasingly thought to be climate change.
Dams creating new reservoirs anywhere rivers could be dammed for hydroelectric power. Increasingly northern cities radiating heat and further contributing to climate change. (Mont-Laurier was now four times its 2020s population, Ravi learned.) Deforestation, but also reforestation as clear-cut areas were rewilding. A few new canals and dredged passages, especially in the Arctic to help with the very busy year-long Northern Passage.
As the hours went by, nothing was sparking any ideas in Ravi’s mind. In desperation, he typed
>Did anything change the Earth's shape over the past three decades?
The assistant answered more climate change.
Ravi gave up. He got up, and went to forage in the kitchen. A few flawless fruits later (not so sweet, any of them), he was eating a slice of melon when he flexed it under his fingers. No, the crust of the Earth would not be affected by someone eating underneath it. But the crust of the Earth…
He ran to his workstation, spooking everyone else.
>Is the Earth bigger than it was thirty years ago?
The computer confirmed that, why, yes, the Earth was slightly bigger than it was in the 2020s. Most of the difference was found at (ah-ha) polar latitudes, where the melting glaciers had, in no longer exerting so much weight on the surface, allowed mountain ranges and lower-level elevations to push up slightly. The Earth was still an oblate sphere, but not as much as it had been — something that had cartographers concerned.
Ravi went back to the test results. Yes, yes, and yes—the errors got worse the farther north you went, which was more frequent now that deliveries were made by drones in higher latitudes. More people, bigger cities, northern passage. It made sense.
So he reviewed his training scripts to change the shape of the Earth. Feeling slightly God-like, he ran the scripts and was pleasantly surprised when his station gave him results in a shorter time than AWS did a few days/decades ago.
All right, let’s try the new test cases.
It worked. Of course it worked. It was the solution. The errors disappeared.
He snapped his fingers.
“All done, here.”
He wasn’t, in fact, all done — As a happy-but-stern Jasmine reminded him, he still had to document the training scripts and especially the new shape of the Earth.
He was able to complete that last remaining task before the afternoon was through.
All three women were effusive in their thanks. Already, they said, the software (and integrated firmware on drones using the routing module) was being updated to the latest verified version — the testing had been done on semi-quantic servers, so the deployment pipeline wasn’t that long to complete.
Michel and Ravi indicated their firm intention to be back home before the end of the day. Jasmine nodded and made arrangements. Ravi has a few more requests—he wanted a copy of his documented code on a USB drive ready to be copied over. The shape-of-the-Earth code would be commented out, but at least he would not have to redo the documentation another time. Finding a USB drive in the age of data wafers was a challenge for the legacy hardware crew, but quickly solved.
Before long, they found themselves back in the high-energy chronotemporal laboratory, waiting for the connection back to their time to be established.
“We can’t simply punch in a date and time and step through,” explained a rather cheerful Olivia. “Full-quantic computer searches and tests are required to find a vector to a specific date and time, then saved. The temporal localization coordinates weigh in at roughly three gigabytes, with every single digit being essential to finding the right date/time/universe again.”
“It’s really expensive,” reminded Jasmine.
“Any advice for your younger self, Jasmine?”
“Nah, I’m good. Going on a date with Min-Jun was the big thing.”
As the technicians finalized the localization of the right coordinates in the universal latent space, Jany had one request.
“Can I step in the past with them? Just for ten seconds.”
“Do you owe a lot of money to anyone?” asked Jasmine.
“Oh, I’m not going to stay. I just want to see for myself beyond the radius.”
“All right. But five seconds. We’re paying for this.”
“Good enough for me.”
“Stand by for temporal rift,” said a technician in the background.
Ravi, Michel and Jany stood on the markers for the temporal travellers.
“It’s been fun, Jasmine,” said Michel.
“Glad to see you went up in rank,” added Ravi.
“Don’t treat me any differently!” she said.
“Five! Four! Three! Two! One! Rift!”
The circular portal opened with a Pop!, and what looked like a familiar boardroom appeared in front of them. Without delay, Ravi and Michel stepped through, avoiding the edges.
Jany had a point about the difference between peering through the rift and actually stepping through it, because the moment they did, they knew something was wrong.
Jany stepped behind them for her five seconds of tourism.
“This isn’t it,” said Michel.
“We’re not home,” said Ravi.
Outside, the familiar Ottawa skyline had been altered by a massive black tower, probably fifty floors high — it looked like a dagger planted in the middle of the Glebe. The city was burning, with several fires billowing stacks of smoke in the air. Giant Airships were criss-crossing the sky, many of them clustering around the black tower, firing lances of light.
“Oh no!” said Jany in a panic before turning toward the lab. “THIS ISN’T IT DON’T CLOSE THE—”
Her hand reached out back out, and she was fortunately too slow — an instant before her fingers would have gone through the rift, it simply disappeared.
With an audible Pop!
Chapter 6 – No Plan Survives
Jany looked in horror at the blank wall.
“Does that happen often?” asked Michel.
“Are we stuck here?” asked Ravi. “This is clearly not where we came from. That … tower over there is something new. The airships too!”
“I don’t know!” said Jany. “Standard protocol is to try again five minutes later.”
She turned toward the two men.
“You heard Jasmine! We were supposed to deliver you back to your boardroom no more than five minutes after taking you to our future. They don’t make mistakes like that!”
In the silence, they heard faint screams from elsewhere on the floor, and sirens from the outside.
“What’s that?” asked Ravi.
He moved to the window. As he got closer, he saw more of what was going on the ground. The campus below them looked different: the layout of the buildings was similar, but the pathways in the wrong places, the ground-floor restaurant not the same.
“This is really not where we came from.”
“We’ve got bigger problems,” said Michel.
“Look at the street.”
Ravi looked further to Heron Street, in-between two buildings, and saw what Michel was driving at. An ambulance (wrong colours, wrong model) had crashed in a light pole, then a concrete barrier. Fast-moving human figures were swarming the vehicles. As Ravi watched, they opened the door of the vehicles and dragged out the driver. The poor woman was clearly trying to get away, but her assailants put her on the ground and started to feast.
Ravi had seen far too many movies depicting this exact scenario.
“You have to be kidding.” said Michel, who had clearly seen most of those movies as well.
Ravi turned to Jany.
“I don’t believe you understand time travel nearly as much as you think you do.”
“I— I – I’m not— I don’t—” she sputtered.
“THIS IS NOT TIME TRAVEL!” shouted Michel. “AIRSHIPS AND ZOMBIES AREN’T REAL!”
“WHAT DO YOU WANT ME TO SAY?” she shouted back.
“Wait-” cut-off Ravi. “Listen.”
The screams and groans inside the building were getting closer.
“No time to argue.” said Ravi. “Focus!”
The boardroom was a close match to the one Ravi knew, but not quite. Big brass handles on solid doors, each one located at the extremities of the same wall. Solid wooden table tinted dark rather than fake-granite composite. Dark panelled walls rather than light-gray. Wherever they had landed, their aesthetic sensibilities were closer to Victorian England than early twenty-first century corporate.
The disquieting sounds of screaming and groaning grew even louder.
“Can we lock the doors?” asked Jany, looking unwell.
Ravi got closer to one of the doors. They had been built to present as few problems as possible to building security — which meant that only people with keys could lock or unlock them.
“Not unless we’re security.”
“Block the doors with the chairs” suggested Michel from his side of the room.
“We should probably take a look outside.” said Ravi.
“Protocol in case of lost contact is to re-open the portal five minutes later,” said Jany. “We can’t leave!”
“On the other hand, we don’t have anything to defend ourselves, and we don’t know what’s going on outside. Do you even want to survive those five minutes?”
“We won’t make it if we just go dawdling outside!”
“Ravi’s not wrong. At least one of us should go.”
“I will,” said Ravi.
“Suit yourself, but make sure to come back.”
“Just a peek.”
He listened at the door one moment, heard nothing too loud, then opened it.
It was an office, and yet not their office—the computers had been replaced by larger brass-and-wood machines. The overall colour scheme was much darker and browner. Everything screamed steam power and child labour.
Ravi stayed low and moved slowly. He gave himself two minutes of exploration, and preferably the acquisition of a weapon-like object. There were noises elsewhere in the building — shouting, screaming, groans — but it seemed far away.
He advanced in between the cubicles. There was a lot more green felt than he expected in the decoration scheme. This couldn’t be real, he thought again, and the implications of that were so staggering that he refused to follow them any further. For the moment.
He peeked and turned a corner, hoping he wouldn’t lose his way. The office was empty, but there were disturbing red-brown streaks on the wall and floors. The smell was also getting to him — putrid, rotten, coppery. If he could make it to a stock room of some sort, there could be something to wield against an opponent. No stock room was ever placed near a window, so he went deeper into the building.
He either got lucky, or the world they were in closely followed his — a stock room was before him. Mindful of open spaces, he dashed from the cubicles to the stock rooms-
-and realized he had made a mistake when a figure looked up and saw him.
It had been a human some time before. Probably an office worker, looking at the knee-length skirt and formerly white (now gore-splattered) blouse she was wearing. If she had been beautiful was a question he’d never be able to answer, as her rotting face was missing a few rather essential components. Ravi had disturbed her from a snack — another colleague lying flat on the floor in front of the office printer.
She had been feasting on unmentionable parts, but the appearance of fresher meat got her attention.
She groaned much louder than Ravi had been expecting. He reacted instinctively, throwing himself backwards… and falling to the floor.
She had no such disadvantage and leaped forward. Toward him.
He turned, rolled and she slammed on the floor, losing a few chunks of flesh on impact. He rolled some more and got back up on his knees. He leapt forward as she lunged, and gained a precious meter of space between them. She screamed a most disagreeable sound.
In first-person shooter videogames, this was the point when the savvy player abandons the stealth approach and starts shooting. Unfortunately for Ravi, he was stuck in a horror game without weapons: the only thing left to do was to flee. (He wasn’t going to try hiding in closets.)
He ran. Unfortunately, the undead woman wasn’t too far behind, and she was making enough noise that her friends were certain to come help her. Panicking slightly, as was allowable under the circumstances, he had one single idea in mind: get away as fast as possible. This meant, among other things, that he forgot the way back to the boardroom and went farther in the building.
He was, at least, much faster than the undead woman trying to follow on a stump and fast-rotting muscles. But she wasn’t alone, and he could hear the call-and-response of a pack of zombies pursuing fresh meat.
He turned a corner and ended up in a small open area where, in happier and less zombified times, colleagues would have sat down to collaborate on the delivery of programs fit to improve the lives of ordinary Canadians.
To his horror, the area had been converted to either a pantry or a slaughterhouse cooler, with bodies of former public servants stacked like firewood. The Canadian Taxpayers Federation would have loved this, but Ravi had another opinion.
Now zombie groans were coming from all directions. He looked around—his two minutes of leave were up, but at least there was one weapon-like thing he could use. Grabbing a brass-plated standing coat rack like a spear, he found his bearings to the boardroom and started running.
A zombie came out from an office, the tattered remnants of a pinstripe suit suggesting he had been an executive. Ravi did not slow down and aimed the coat rack in the middle of his chest. What happened next was not what he anticipated—the tip of coat rack went through the zombie’s chest cavity, twisting the pole between his arms. Disoriented and off balance, he slammed into a cubicle partition, his weapon stuck in the zombie’s chest.
The zombie didn’t seem to mind and reached for Ravi—fortunately, the hooks kept his body, and grabbing hands, away.
Ravi kept going, stomping on the zombie’s chest cavity and pulling the coat rack toward him, freeing it from the undead’s innards. Where was that boardroom? He kept going, hoping he’d run faster than pursuers. But he hadn’t done cardio in a while — would he have the energy to make it back?
Crossing another open area, he was surprised by another zombie. This time, he took no chances: he swung the coat rack at the undead, hitting her on the side of the head and sending her to the floor. She stayed down, but so did the coat rack—Ravi then realized that the two events had something to do with each other as he had managed to drive one of the coat hooks into her head.
He twisted and freed the coat rack. Hopefully, this zombie virus is harder to catch than COVID, he thought, because he was breathing hard and no one was sticking to a two-meter separation.
He looked up and saw the entrance to the boardroom.
“I’m coming!” he shouted. “Make sure I can get back in!”
Unfortunately, like a cursed Hamelin piper or Kelis at her prime, he was bringing all the zom-boys to the board-yard—he could hear them behind him, groaning for the chance at some warm flesh.
He raced, threw the coat rack to the side and opened the room.
Good news—Michel and Jany were still in one unbloodied piece, although from their expression they were one slight inconvenience away from full-blown panic.
“Has the portal opened yet?” he asked.
“NO!” they both shouted.
“Try to hold the doors, because we’re going to have some company.”
He braced a chair against the nearest door, trying to find a way to stop it from opening. Why did this room have to have two exits rather than one?
The zombies didn’t mind—in fact, they quickly piled up at both entrances, their bloody handprints leaving reddish-brown streaks in the window, and their guttural groans quickly providing a lugubrious soundtrack to their struggles.
They were holding, but for how long? Jany and Michel seemed to be doing well—Jany was much stronger than she looked—but Rani was struggling. He was out of breath, slightly giddy at the thought of having survived a skirmish with zombies, and not sure how long he’d be able to stop them from breaching the room.
He kept himself going one second at a time. Every second was one more until the portal opened again, he told himself. Because it would open again. Jasmine’s team would be frantically working at reopening the portal to rescue them. They would get it done a few minutes later.
Don’t think about the way the portal disappeared suddenly. Don’t think about how this universe doesn’t feel real. Don’t think about zombie viruses in the air. Don’t think about getting tired. Don’t think about those three gigabytes requires to obtain exactly the coordinates to open the portal. Don’t-
The zombies suddenly started slamming against the door. Pushing, clawing, groaning was one thing, but slamming? He felt the door crack. Uh-oh.
“They’re going to break the door!” redundantly said Jany.
“Keep holding on!”
But it was an effort doomed to failure. Every SLAM weakened the door. Already, the glass window cracked and broke, a few shards falling on Ravi. Hands reached through the window. Ravi drew back slightly, which let the door crack just a little bit more.
He looked at the other door — Michel and Jany didn’t seem to do any better.
Then there was another big SLAM, and their door broke open. Michel and Jany were thrown to the floor, quickly scrambling to get up as zombies made their way into the room. Rani kept holding as the two drew back to the centre of the room, close to the wall where the portal was supposed to open.
“GET BACK! SHOO! GO AWAY!” shouted Jany, as if trying to deal with a wild bear.
But the undead did not identify as ursine, and kept coming closer.
With another SLAM, Ravi’s door splintered open. He drew back, past the conference table, and tightened his fists. He hadn’t solved a few wicked computer problems to go down like a limp nerd—he’d make them pay, teeth by teeth.
A zombie far too rotten to be identified by specific pronouns roared as it made its way past the chair, and saw Ravi as his next nibbly-snacko. So be it, thought Ravi, maybe punching it on the chin would shatter its jaw. Pop! he imagined the sound effect. Or had he?
“Ravi!” shouted Jany.
He looked. The portal was open, and both Michel and Jany were going through, pushing back the two operatives who would normally get people to go back through the portal.
Never mind the fisticuffs — he jumped toward the portal, rolled over the conference table, landed on his feet and jumped again through the portal, not minding the edges too much.
“SHUT IT DOWN!” all three screamed at the first zombies started poking through the open portal.
Someone noticed, because the portal popped out immediately, leaving a few dismembered undead limbs falling to the floor of the lab.
There was a long, long moment of disbelieving silence in the high-energy lab after that. Ravi wasn’t moving. Was it over? Were they going to be shot dead like at the end of other movies where the protagonists were rescued from the zombies by the government?
“Immediate quarantine!” said Jasmine. “Call the hazmat team!”
Michel and Ravi found themselves back in their government-provided suite, with two new roommates — Jany, obviously, and Olivia who had volunteered to stay with them as she had been there when the portal was opened. The rest of the team inside the lab was also held in similar suites not too far away, waiting to get confirmation that they hadn’t been infected with some terrible flesh-eating virus.
“There’s a bit of a precedent for this,” said Olivia.
“WHAT?” said Ravi.
“Not the zombie thing. The quarantine thing. This is partly why this room exists. People from other timelines can carry with them viruses and bacteria against which we have limited protection. Jasmine, Jany and I all had some extensive vaccine booster shots prior to this… situation.”
“And what about the zombie thing?” said Michel. “I don’t know about 2055, but in our world zombies are not just non-existent—they’re impossible. There are no fundamental principles of biology that will allow rotting undead people shambling around and hankering for brains.”
“I don’t know.”
“This wasn’t time-travel.”
“I don’t know.”
“It felt like a made-up steampunk zombie fantasy.”
“I don’t know.”
“I knew it!” said Michel.
“Here we go…” said Ravi.
“This is a theory, okay? Brand-new, possibly crackpot whackadoodle theory.”
“Oh, I’m listening,” conceded Michel.
“We’ve been referring to this as time-travel, but the way we’re approaching it feels more like parallel universe interaction. We don’t even understand how we’re able to punch holes through one timeline to another. Most of the coordinates we feed in the system don’t work. Those that do open in our past, but that’s because we’ve got AI systems to guide us to a workable solution throughout the latent space of possibilities.”
“Oh GOD,” said Ravi with a sharp breath, envisioning the conclusion at the end of the forthcoming explanations.
“Oh, you get it, right?” said Olivia. “You have enough experience with AI.”
“Keep going,” said Ravi.
“WHAT?” said Michel and Jany.
“There is a small, but not insignificant theoretical possibility that in the latent space of all possible past destinations, we can either derive universes that are not entirely historical. Some have theorized that by combining a specific vector with the solution space, we can bring in existence a fictional universe by fusing a real one with characteristics of a fictional one.”
“Like taking our timeline and adding steampunk with a zombie apocalypse?”
“I– Well– There’s an infinity of possibilities.”
“If that’s the case, have we created an entire world merely to doom it after our departure?”
“This was not intentional.”
“As someone who nearly died over there, I can assure you it felt very, very real.”
“Well, there’s another, even more fanciful theory that may or may not help.”
“At this point, I’m ready to hear anything.”
“The other theory is that it’s not about latent spaces as much as it’s tapping into concurrent simulations.”
Ravi started laughing. And laughed. And laughed some more. Was this what it felt to go mad and discover that everything is meaningless? He didn’t care if his laughter was hysterical, high-pitched, possibly maniacal. It felt like the exact right response to the theory. Which wasn’t a new one at all.
His sides hurting, his heart beating madly, he eventually stopped—he simply couldn’t laugh any more. If the world was mad, insanity would be the best choice.
“Are you all right?” asked Jany.
“I can’t believe you’re going to say what you’re going to say.” he said to Olivia.
“It’s ludicrous, but it still hasn’t been disproved,” said Olivia.
“What is?” asked Michel and Jany.
“Simulation Hypothesis,” said Ravi. Religion for nerds, he thought, right next to the singularity.
“The idea that we’re in a simulation,” said Olivia, “that the same virtual super-quantum-infinite computer is running other simulations and that we’re now somehow able to tap into those other simulations.”
“That’s crazy,” said Michel. “This means nothing is real and everything is possible. I can’t accept that.”
Welcome to my club, pal, thought Ravi.
“And yet it seems less and less crazy as we go on. Proof being that our computing capabilities may be limited by the virtual machine — Moore’s Law being a cap on the speed of the simulation.”
“Pick your crazy. Or maybe we’re just characters in a novel being jerked around by an author trying to hit plot points without making sure they’re coherent.”
They look at the reader. The reader recoils. The reader does not wish for metafiction. The reader expects straight-ahead comic entertainment, not an existential mind bender. The reader imposes their will on the author. The author recants. The author throws the plot back on the rails and ignores the previous two paragraphs.
“There’s one more thing, though,” said Olivia. “And this is not speculation: we did not use the right coordinates to send you back where you came from. We had them, but clearly they were replaced. What’s more, in years of using this technology we have never been able to get coordinates that gave us anything but a verified path to our past. It would take something out of our capabilities to generate, let alone open, a portal to the kind of non-historical universe you experienced.”
“Are you going somewhere with this?” asked Ravi.
“As much as I feel as if I’m diving deep in cuckoo-land with this, I expect that as we will investigate what happened, we are going to discover that some … thing fiddled with our coordinates. I don’t think this happened by accident.”
“So what would be the motive?”
“Maybe you’re that inconvenient.”
“Skynet trying to make sure we’re not in the way?”
“I’m not familiar with that technology.”
“Never mind. 2020s stuff. You wouldn’t understand.”
Ravi got up to get a big tall stiff glass of the hardest drink they had in the kitchen. Which turned out to be a glass of what they called black licorice beer. Despite the name, it was non-alcoholic (as you would expect anything on government property to be) but tasted as if it was.
The philosophy bull session had broken up while Ravi was in the kitchen looking for options. The women were in their room, rearranging it to accommodate the temporary bed that had been provided. Ravi, meanwhile was going to share the other room with Michel, but he had no immediate plans to set up the sleeping arrangements.
Out of options, he sat down at the computer.
He had one message waiting for him — his security clearance had been renewed. Wow, so useful.
However, his internet access was still limited.
He normally would have tried coding something, looking up research, or simply browsing technology news, but right now he simply felt flat. He felt impossibly far from home — blocked from getting back to his Djamila and the kids, maybe even sabotaged from doing so. And if what they had seen confirmed one of Olivia’s wilder theories, the world suddenly felt hollow.
Increasingly glum, he didn’t even notice when Jasmine entered the room.
“Hey everyone, I’ve got news.”
The four guests of the suite immediately went back to the sofas.
“Aren’t you under quarantine?” asked Michel.
“Same quarantine as yours. I can go from my room to yours.”
“All right, so what’s new?”
“Early test results from our blood tests and the dismembered zombie parts show no contagion. We’re analyzing the limbs. If there’s something there, we feel confident we can have a vaccine ready by tomorrow afternoon. Experimental.”
“As for the coordinates being changed… that’s more complicated.”
“Go ahead,” said Ravi.
“The original coordinates we had on file were wiped and replaced from the system last night. We don’t understand why or how, we just know it was a very sophisticated and thorough job. Even the backups were corrupted.”
“But-” started Ravi.
Jasmine shut him up with a simple hand gesture.
“We’re working on getting the coordinates back. We didn’t just stumble upon them — we’ll find them again. It will take a few days even with our best computers on the case, but we will get them back.”
“Well, you better!” said Ravi with a surprising rage. “And I don’t want a reality almost the same, except my wife’s hair is blonde or something. I want exactly it! I want my exact wife and my exact kids and my exact house with everything the same!”
“And that’s what you will get. We just need time.”
“That, and no one cracking your system to replace the coordinates. How will we be sure?”
“We have the initial seed we used to find the passageway. The rest is multidimensional vector calculation. As for security…”
“This is, by far, the spookiest breach we’ve seen in a long while. Many of my colleagues over at the unmentionable agencies are really worried about it, and by that I mean that we’ve got teams of experts combing our systems for any clue.”
“Right now, no.”
“Any idea on how we ended in steampunkland with zombies, then?”
“Well, the intelligence agencies aren’t the only ones planning on a very long night. A fifth of the National Research Council has been brought back to the office for overtime. A lot of people concerned, a lot of people scared.”
She closed her eyes, but Ravi could see them moving behind her eyelids as she was clicking her teeth. Moments later she opened her eyes again.
“We have a bigger problem.”
Oh no, thought Ravi with the experience he had recently gathered.
She closed her eyes and apparently looked at something. Meanwhile, Olivia and Jany both seemed to listen intently to something.
“We’re under attack.” said Jany after a pause.
“Thousands of drones in Canadian urban centres,” confirmed Olivia.
“Appeared out of nowhere,” continued Jasmine.
Ravi could have done without the Greek-chorus-of-the-apocalypse thing, but he presumed by now that this was not accidental or coincidental.
“Maybe not out of nowhere, exactly.” said Jany. “There’s footage of the drones popping out of nowhere, as if from a temporal portal.”
“Which immediately closed.”
“The drones are shooting at everyone and everything. Energy beams. Not always fatal, but lethal enough.” said Olivia, her voice steadily rising in pitch.
“Few reports from smaller cities. Sounds like a concentrated attack on population centres.”
“This can’t be a coincidence” echoed Jasmine. “Not with this timing.”
“CSE says the drones are using our telecommunication packages,” said Olivia.
Then she turned toward Ravi and Michel.
“They’re using the Multi-Core routine API.”
Ravi’s jaw dropped. This suddenly felt very, very personal.
“More drones are popping up. Even close to here.”
Then, with a Pop!, a portal opened in the room, next to the door.
Everyone gasped. A few screamed briefly — but we’re not telling you who.
But then a familiar figure stepped through the Portal.
“Jasmine,” said a slightly older Jasmine, “I’d like to chat.”
2055 Jasmine froze.
First time?, through Ravi.
“As you know, these portals are expensive to keep up. Can you and your group come over here for a few minutes? I’ll explain everything we know. And we’ll help you deal with your new problem.”
“Am I supposed to…”
“We have thirty years on you when it comes to portal technology. We know that the zombie thing isn’t catching. Yes, you can come over. You can even shake my hand. It’s safe.”
Ravi was the first to get up and walk through the portal. At this point, going deeper and deeper into the future seemed like the most logical thing to do.
The other side of the portal wasn’t the calm, geeky high-energy lab in which he’d emerged in 2055. It was a utilitarian area, with a spartan atmosphere and bland decoration that made Ravi think about a military operation.
That hunch was confirmed when he saw some of the people standing back from the portal. Were they really that tall? Were they really that wide? They slung big guns with overly large barrels as if they were twigs. Silent flashing lights suggested something was up.
What have we got ourselves into? he thought.
Looking back, he saw that portal technology had apparently improved over the decades—there was no visible radiation at the edge of the portal. More amazingly, he saw the older Jasmine press her hand on the edges of the portal as she made her way back to the future.
The portal closed with a Pop! as soon as all temporal visitors were in the room.
“All right, what do you have for us?” asked Jasmine 2055.
“It’s 2075, we’re also under attack, and we need your help.”
“You brought us in a warzone?”
“Yes, but I can guarantee you that it’s safer than where you were. We know how to fight back, and we’re going to finish this. But you don’t know what just hit you, and we really need you to win.”
“Ah-” said 2055 Jasmine to her older self.
“I know that you’re going to want to sputter and interrupt, but I need to make this quick and bring you up to speed. It’s going to be a lot to take in, but I know you can. All right?”
2055 Jasmine gave a nod to her older self.
“Okay, the good news first: Canada is still doing pretty well. Sixty million people, all well fed and properly housed. Nanotech finally works, longevity treatment still holding strong, we’ve got a colony on Europa and we’re beating back climate change—temperatures are going down again, and we’ve reclaimed nearly all of Florida. My point being: This is a future worth fighting for, all right?”
She raised an eyebrow.
“More personally, Min-Jun and us are back together. He’s quite a remarkable man, you know. The grandkids are a delight.”
Then her expression turned sour.
“Unfortunately, not everyone is equally happy. The Disorder movement that you think is laughable in your days? Not so much right now. A lot of them are from south of the border. Campaigns of systemic terrorism — no demands, just an attempt to bring us back to the stone age. They’re a small number of people, but they can do a lot of damage.”
She pointed to the silent flashing alarms.
“Just as you are, we’re dealing with a massively distributed drone attack right now — kind of a last-ditch sort of thing considering that we’re about to take them out permanently. Sword of Disorder, they call themselves. Largely a diversion to stop us from helping you out, so never mind us. Temporal travel is now available to anyone with a fair bit of fusion power and patience, and we just discovered that they’re taking aim at you. Not you personally, but you as your 2055.”
“That doesn’t make sense,” said Olivia, “given that—”
“I know that you think you know how these things work,” interrupted 2075 Jasmine, “but we have twenty years on you. As it turns out, some coordinates are more important than others. More stable. More influential on the latent space. More real, in fact.”
She looked at Michel, Ravi and Jany.
“Yes, there are fictional universes in the latent space. Tough to discover, incredibly unstable once created. But they managed to feed one of those in your system before trying to send you back and, well, you saw what happened. Although, on the flip side, it’s that event that led us to knowing a lot more about temporal travel.”
She turned her attention back to Jasmine.
“Your past — I mean, your present, our past — is incredibly important. Even more so now that you’ve put the Multi-Core routing module back on track. They haven’t launched the attack at an arbitrary moment — they’ve targeted it at the earliest time precision pathfinding was available. Ravi, Michel, I’m afraid you were just a bit too good this time around.”
“Maybe I’ll get a Surpassed on my PMA this year,” said Michel.
“If you make it back. They are planning on sending a bunch of drones to your time and destabilize everything. That also means your time-travel facility. Then they’re planning on going over and staying.”
“I didn’t say it was a good plan. Sword of Disorder attracts the… ideologically fervent, not the deep thinkers. You will most likely wipe them out, but can you afford the war? Ravi, Michel, are you prepared to wait months or years before they can send you back home? What if we gave you a way to end it within minutes?”
She took a deep breath.
“We can’t quite predict what’s going to happen next, but we suspect that it would have an impact on many, many other timelines. So we’re ready to give you what you need to deal with that threat first.”
“And then what?” raid Ravi. “Just wait for the next temporal invasion? More kidnappings from the future?”
2075 Jasmine smiled widely—she clearly had an answer to that question.
“When I said I had what you needed, that included what we call a Shield. A way to prevent visits from other timelines, other futures. A way to make the coordinates bounce off and cut yourself off from those intrusions. Maybe that’s what you want. Maybe not. But you’ll have it either way. In your time as well as in 2055.”
“Now I’m interested,” said Michel. “No offence meant, ladies, but I find the future overbearing right now.”
“Oh, you two 2020s refugees have a few things to do as well.”
“What’s the plan?” asked Ravi.
“It has a lot of moving parts, but we’re feeling very confident about it.”
“Not that reassuring, but go ahead.”
“We’re going to need three teams. Jasmine, I’m going to provide you with some very convincing information so that you can get the highest levels of the government to understand and react. I’m afraid that you’re going to end up with a series of meetings with increasingly more obnoxious people, but we need someone to coordinate the upper-level response.”
“Make sense. I’ve always wanted to meet the prime minister.”
“You will. She’s really nice. Meanwhile, Michel and Olivia, you’re going to have to stay near the home base and protect the time portal. We will provide you what you need to take down the attacks. Michel, I trust you’ll be highly motivated to act. If it can sweeten the pot, we’ll throw in the right coordinates for you and Ravi to go back.”
“I’ll do anything to have supper at home.”
“Wait—,” Olivia frowned, “You’re not just doing this out of the goodness of your heart. Are the beacons making it easier for you to open portals to our time?”
“I’m afraid this is a secret I’ll keep to myself.”
“Would I have answered otherwise if it wasn’t? You’re a smart girl. Still are.”
She raised her left index finger.
“One more thing. You will also have the code for the Shield, although that can’t be activated until after Michel and Ravi are sent back. Keep in mind that the Shield makes time portal technology useless. So you may want to think twice before cutting yourself off. We can handle the Sword from here, so we hope you won’t make yourselves unreachable.”
She turned to Ravi and Jany.
“You two may not have the hardest part of the puzzle, but you’re going to have to move a bit more. And I mean physically. There is a data centre on Sparks Street that serves PCO. Still does. Being so close to the centre of power, that data centre has elevated privileges for a few things, one of them being approving and distributing zero-day security patches to all federal systems.”
“Oooh,” nodded Ravi.
“This time, we won’t need you as a coder… at least I hope. We can’t trust any communication network, so we need you as a courier to deliver the code to the data centre, and supervise its immediate emergency deployment to all nodes.”
“What’s in the new code?”
“A nasty surprise for Sword war drones. If you’re asking why you, it’s to make sure we’ve got an expert on-site to take care of any problems if they arise.”
“Right. And part of Jasmine’s role is making sure they’ll open the door to me?”
“First order of business.”
She looked at the small group.
“You’ve been hand-picked thanks to pure favouritism from me. Please don’t let me down. Any questions, or should we get your equipment?”
An hour later, Ravi was fully decked out in a tactical suit (fully adjusted to his size), lugging an EMP rifle in his hands, equipped with a communication shroud and carrying a few invaluable flash drives and data wafers in his suit’s pockets. All of that for him to keep—for delivery to the Clerk of the Privy Council once he made it back home.
He wasn’t alone in military-grade clothing. Michel, Jany and Olivia were also now in jet-black gear, being briefed on what they could expect from it. Some resistance to impacts. Basic anesthesia in case of wounds. Haptic feedback to warn against threats from the back and sides. Anti-machine weaponry.
His own weapons training had been cursory. The EMP rifle he’s been provided was useless against anything but electronic machinery: “Point the boomstick toward the bad bot and pull the trigger” was the extent of the advice, along with the already mentioned twenty-degree cone of impact. There was some aiming leeway, but not a lot. Ravi resolved to right-click aim as often as he could.
The rest of the briefing was about the Sparks Street Data Centre, which had taken over an old abandoned movie theatre in Place de Ville Podium Building. Travelling above ground to downtown would be suicidal given the warbots presence, so the plan was to use the LRT tunnel until Parliament Station, then run down Sparks to the Data Centre entrance. Sparks’ enduring reputation as a deserted wind tunnel could work to his advantage, as it would be difficult for any drone to sneak up on him in the brief time he’d be out and visible.
All in all, he was taking it rather well for a desk jockey thrown fifty years in the future and asked to save the nation from nihilistic ruin. This wasn’t the kind of calm and quiet he had been looking for when he quit Orbiware for the federal public service, but he had had a few restful months along the way.
Reflecting on the situation, he supposed he was calm for four reasons:
- He was fully expecting to make it back — He had the full backing of not one, but two Canadian federal governments behind him.
- With the amount of personal weaponry and armoury he was shouldering, some of which was fully automatic, his chances of making it past an average gunfight were astronomically better than they were even sixty minutes ago.
- He had spent years developing first-person shooters, so the chance of doing it live was irresistible.
- He had a strong suspicion that one of the services provided by his nanotech suit of armour was a savvy steady dose of biochemicals meant to calm him down, boost his reflexes, give him focus and perhaps even make him unusually pliant to helpful suggestions.
A last flurry of activity went on around him to finalize the plan. It seemed ridiculous to have a three-ring circus last-ditch plan to save the country (the world? the universe? the multiverse?) but the beauty of it was that that they were all highly motivated to see it done. Back home by supper? Sure, although Ravi didn’t have the same conception of time he did even a few days ago.
Jasmine 2075 was in between dozens of other things, but she took a few moments for a quick bilat with him.
“It looks as if we’re getting the upper hand on those Sword drones right now.”
“I trust that you’ll take care of the rest of the organization soon?”
“They’re clearly not for peace, order and good government, so they have to go.”
“I’m sorry I won’t be there to see it.”
“If you’re lucky, you’ll go back home and think of this as a crazy dream. Or not.”
“I’ve already said it to Michel, but thanks for being so nice to me fifty years ago when I was just a new hire fresh out of school.”
“You mean how nice we’re going to be from now on.”
“Something like that. You realize that if everything goes well, we won’t see each other again. And if things don’t go well…”
“Mmm-hmmm. Well, in the best-case scenario, I’ll still be able to talk to the younger you.”
“If you have a message for me, just give her a sealed envelope.”
Chapter 7 – Warzone Ottawa
Jasmine had been right in saying that 2075 was far safer than 2055. While their trip in the deeper future had been utterly calm despite a drone invasion, they felt the panic in the air the moment they stepped back in earlier times.
The 2075 crew had been nice enough to open the time portal in the middle of the busy Public Safety situation room, just so that they would have additional credibility in claiming to be able to solve the problem. This landed Ravi’s crew in the newish Government campus on Cyrville Road, right into the Incident Response Nexus.
The less-than-imposing building had been located in the periphery of Ottawa’s downtown to provide an unassuming gathering place for the critical emergency response specialists coordinating the activities of various departments and other levels of government. It was continually staffed, but rarely used—as it should be. The Incident Response Nexus (inevitably the IRN to a government in love with TLAs) was located deep in the middle of the building, built to withstand even a direct attack on the building … as they were finding out.
The population of the IRN had quadrupled in the past fifteen minutes, with emergency response protocols being activated across the chain of command. There were roughly a dozen people on-site, and most of their tasks involved reaching and interacting with incident specialists located across the country.
There was a brief hubbub of activity as five heavily-armed-and-armoured people stepped into the room via time portal. Their weapons had all been carefully stowed on their back to show no aggressive intent and their hands were clearly up as they exited the portal, but it was still a gamble that some overzealous security guard with a gun would take a shot or two.
Jasmine 2055 shouted her full name, PRI, security clearance and official job title within the federal public service as they entered the room, encouraging anyone in the crowd to verify her credentials as soon as possible. The moment they had everyone’s attention, Olivia and Jany did the same.
Then they turned toward Ravi and Michel.
Ravi shrugged his shoulders and gave his information. Michel did the same.
Well, they said they had reactivated our accounts, PRIs and security clearance, thought Ravi. Are we in the GC active directory as well?
The incident responder who seemed least fazed by the situation — name-tag LABELLE — looked at them strangely once their information was confirmed. He was a big guy with a crew cut and the no-nonsense attitude of someone who knew what he was doing. One minute in, and they were already visibly testing his patience.
He’s no doubt wondering what a few really-well-preserved old guys are doing here, thought Ravi before remembering that according to records he wasn’t just supposed to be old, but also dead. No doubt he wasn’t the first one is that situation—the government would have some kind of procedure.
“We have a bigger problem to resolve,” said Labelle.
“We know. We’re here to help.” said Jasmine before unloading a bit too much knowledge on the poor guy. It took three minutes.
At some point, Labelle threw his hands up to interrupt.
“Wait, wait, wait, this is above my pay grade. Who do you want to talk to?”
“How high can you go?”
“Give me five minutes and I think I can get you to the Deputy Head.”
“I’ll take it. Meanwhile, we’re going to need these four to go places. Two of them downtown.”
Labelle laughed in disbelief.
“Sure. In the meantime, can anyone help deal with what’s shooting at us outside? We’re deployed our own drones, but it’s not enough.”
“That’s what the two others will do.”
Labelle got busy—calls to supervisors, train clearance request to the local transit authority, reservation of an all-terrain armoured vehicle from the motor pool. He dealt with the temporal intrusion in stride, while insisting with various stakeholders that its unusual nature meant that it had to be taken seriously. In roughly three minutes, he had whipped some order in the chaos, and notified Jasmine that the deputy head was really interested in having a chat.
Jasmine was clearly getting ready to go on her own mission: ever-higher meetings. She had to leave first — the data centre wouldn’t be open until she had made her case. She turned toward the rest of what could be charitably called the temporal strike force.
“Ready to go?”
All four of them agreed in their own way.
“You all know what to do. Don’t be afraid to improvise. The future isn’t set in stone.”
On that note, she left. Labelle turned toward them.
“I’ve been told two of you need a ride downtown, and the other two can stick around the building as our protection force. We’re going to need it. Let’s go.”
Hurriedly, they went out of the situation room and into corridors leading outside. Before getting to the final door, Labelle stopped.
“Are you sure you know what you’re doing? Because it’s not pretty out there. And-“
He stopped, listening to his earpiece.
“I’m told that many more drones and converging here. They changed direction the moment that your … portal opened. Are you ready?”
“We’re ready,” said Ravi with more assurance he should have felt.
“Suit yourself,” said Labelle opening the door.
Ravi blinked a few times before he got used to the brightness of the day.
Outside, it was clear that Canada was at war. The BRRRT of automatic weapons fired by the Public Safety security personnel and GC-owned drones met the burning husks of the dozens of Swords drones on the ground. They were in a parking lot at the back of the building, and the fallen drones had set fire to a few cars, the conflagration spreading to neighbouring vehicles and spewing dense back smoke in the air. On the ground, groups of soldiers and security offers were gamely trying to use their weapons against the flying threats, but it was clear that they were outgunned and outmanned. After disposing of the few Government drones, the Sword war drones were extracting their toll — blasting people with accuracy, firing at building windows where, Ravi supposed, people could be seen inside.
This may not such a good idea, suddenly thought Ravi.
It was Olivia who regained her senses first, brought the sights of the EMP rifle up and started shooting. The EMP rifle made audible CLUNKs when it fired, the inner barrel of metal producing a directional electromagnetic charge that fried the electronics of any war drone in its cone of impact. It certainly worked: Shot after shot, she aimed, fired and a machine fell from the sky.
Before long, all four of them were getting into it, roughly dividing the sky with their own zone of fire. They spread out, not wanting to present a single target.
Ravi was positively thrilled the first time he shot. Operating the rifle was meant to be easy — it emitted an audible tone when something dangerous was in its cone of impact. It recharged faster than he could shoot, so it became something of a shooting gallery. The CLUNK of the mechanism produced a small but highly satisfying amount of recoil every time he pulled the trigger, and seeing the drones fall out of the sky was its own reward. Unlike traditional kinetic-impact weapons, the EMP rifle didn’t have to hit a specific point to damage the war drones — they were effective as long as the cone of impact intersected with the drone’s electronics. Mindful of weight, the airborne drones didn’t carry armour.
He saw more drones coming at them. Some came from behind the building — he aimed and hit two of them at once. The suit was helping him pick the targets — he could feel it poking at his side when it identified a target worth turning for. Before long, it became instinctive — feel a buzz, turn, see, aim, hear the tone, fire. From a shot-after-shot rhythm, he found that he was able to take a breath -then two- between every target.
“You need to get to the train station!” shouted Olivia. “Michel and I have this!”
“Follow me!” said Labelle. “We have a vehicle waiting for us!”
Following was a loose concept when Ravi and Jany were providing the cover to the security officer. They slowly made their way to the end of the parking lot. The train station was right in front of them, but Labelle had another idea.
“That’s our ride!” he said, pointing to a heavily armoured vehicle in front of them.
Ravi supposed that military vehicle styling was not primarily a matter of aesthetics—the thing in front of them looked solid and clearly had what it took to move around, but it still looked like a box on wheels, with just enough windows to see where to go.
Ravi kept shooting, but he was running out of targets. While there was still some activity near the building where Michel and Olivia were cleaning the skies, they were getting into sparser territory.
No complaints here, thought Ravi.
“Nearly there! The doors are unlocked! I’ll drive!” said Labelle.
They kept running after Labelle, and Ravi found that contrarily to what he would have expected, he wasn’t wound up. He was breathing hard, but not feeling any fatigue. Ever since he had gotten into the suit, he noticed he was running warm—was the suit doing a little bit of techno-wizardry there? Stimulating muscles, repurposing fat energy, boosting metabolism, gently imposing a workout to improve his cardio, stamina and speed? He resolved to weigh himself after this was all over.
They got in the abomination Labelle called a truck. As soon as they were in and hurriedly fastened their seatbelts, Labelle stomped on the accelerator and got the entire thing moving at a fast clip. He swerved and aimed for the small strip of grass that separated the parking lot from Cyrville Road.
Ravi got concerned when he saw that Labelle was grinning. That was someone with a little bit too much pride in his work. Moments later, he rolled over the husk of a burning war drone, drove over the curb, down the ditch and swerved again on Cyrville.
“Um-” said Ravi, barely holding on to the straps installed inside for that purpose.
“You can open the windows and keep shooting” forestalled Labelle.
Ravi opened the window and did exactly that.
They raced to the light rail station. Around them, cars were immobilized, either marked with burnt-out windshields reflecting drone attacks, or people hiding inside after stopping their cars. If anything else, Ravi was proud to take down drone after drone, helping make it all safer for everyone.
“Um-” repeated Ravi as Labelle aimed for a closed gate meant to prevent drivers from doing exactly what Labelle was doing.
“No time to waste!” said Labelle.
He crashed the vehicle through the gate, and the gate reluctantly gave way, with barely a minimum of sparks and the high-pitched screech of metal against metal.
They raced down the small slope leading to the light train rails. Looking about, Ravi could see people sheltered inside the station, hiding in corners and trying to make themselves as small and imperceptible as possible to the drones. Labelle simply drove past them, landing the truck on the rails leading downtown.
“Hang on, it’s going to be bumpy!”
In that and all the other things, Labelle was dead serious: He accelerated further, and soon they were driving at highway speed over steel rails, wooden beams and stone gravel. Everything was shaking so badly that Ravi through he’d lose a filling or two. Furthermore, it was loud.
“I called to clear the tracks all the way to Rideau!” said Labelle conversationally.
Ravi wasn’t too sure how exactly they would make it all the way from Cyrville station to Sparks. The main line did go underground to avoid the drones, but there were three and a half stations until then, and Ravi supposed that there were plenty of trains along the way.
But Labelle had done his job — the trains had shifted slightly so that there was always a way forward. Not necessarily a leisurely way forward — Labelle was regularly shifting from one set of tracks to another to avoid stopped trains, and gunning through open spaces not much larger than the truck’s width.
“If you’re going to shoot your EMP rifles, I’d advise not aiming toward the train systems! Or the truck!”
Considering how badly they were shaken about, Ravi preferred not shooting at all. Not that there was an immediate need to do so — Labelle’s maniacal driving had the benefit of apparently confounding the war drones, who saw the vehicle quickly driving away and becoming some other drone’s problem.
It helped that much of the LRT track from Cyrville to Campus was built in the remnants of the once-proud Transitway, a dedicated bus throughway down in a recessed trench carved from a busy urban landscape. They could see the sky, but not much else, and that explained how Jasmine and Labelle had both identified this route as the best to downtown.
Things got more dangerous on the way from Lees to Campus. As the train went up the grade and out of the loose trench, drones clearly converged toward the moving vehicle… and started firing.
“Time to work your magic!” said Labelle without necessarily slowing down.
Ravi loosely aimed and fired whenever he heard a tone. But there was definitely a limit to how much hunting he could do from behind his narrow window and before long the drones scored their first hits on the truck. Fortunately, they were in an armored vehicle — the sparks and jets of molten steel inside the vehicle were manageable. Ravi got the brunt of one hit and the suit shrugged it off, even if the suit became very hot for a moment or two.
Still, the drones were getting more numerous, clustering above the truck where Ravi and Jany couldn’t shoot very well.
“The tunnel is coming up!” said Labelle as they zoomed past Campus station, once again cutting it close between two trains. Roughly two hundred meters to go…
From a gentle rain of energy weapons, the sky outside had become a hailstorm of plasma bolts sorely testing the truck’s armour. And tires.
As they approached the tunnel, the drones got lucky or the protections finally failed, and the truck lost both its right wheels. This would have been survivable had the truck been driving gently on a level terrain, but it wasn’t: Labelle was swerving to avoid hitting another train, and the slopes of the train tracks were an added difficulty.
Despite a heroic effort, Labelle finally lost his minutes-long struggle with keeping control of the truck. Its blown tires hit the tracks, and the momentum carried the other edge of the vehicle upward.
The truck flipped over. Once, then twice. Ravi and Jany’s suit inflated to immobilize them during the worst part of the impromptu roller-coaster. When the truck stopped, they had somehow made it to the very edge of the tunnel leading underground all the way to downtown.
Ravi groaned, but supposed he was lucky to be alive. He unbuckled his safety belt and opened the door. Just as quickly, he aimed, fired and systematically took down a dozen drones who had followed their kill. Only then did he look back.
Jany was also out and shooting. Which left Labelle.
Ravi ran around the immobilized truck and looked at the driver, fearing the worst.
“What?” said the indestructible Labelle. “I’m fine.”
He unbuckled himself, opened the door and started walking deeper in the tunnel, gesturing to follow him.
“I hurt everywhere, though, so don’t mind me if you want to race ahead.”
He signalled them to go, go, go.
“I’ll stop at the Rideau Centre Shoppers for aspirin. Give ’em hell!”
That was enough of a hint. Jany and Ravi stepped up and started jogging.
I should be dead, through Ravi incredulously. Or, at the very least, curled up in a ball waiting for painkillers and splints.
But no—the suit provided. The suit kept him alive, and kept him sharp, and kept him going at a steady job when he usually got winded just climbing one flight of stairs. The suit even turned on a light to let them see where they were going as they jogged deeper and lower into the dark tunnel.
“How are you doing?” asked Jany as the tunnel seemed to stop going deeper.
“Surprised I’m not dialling 911,” said Ravi, “but otherwise fine.”
“Yeah, those suits are something else,” she said with an even breath while keeping up a steady jogging pace.
In the dark, it was difficult to know just how fast they were going, but that got clearer as they passed the emergency lights of Rideau stations. As they avoided one stopped train, they could see and hear the people who had huddled deep inside the station, like WW2 Londoners seeking safety from overhead bombing.
But as quickly as they had come, they left the station behind. The next station would be their stop—Parliament station, in the middle of centretown Ottawa. Closest LRT station to the seat of government. Also closest to the Data Centre.
Ravi once again felt the data wafer in his suit pocket.
Two trains closed the way at Parliament station, so they hopped aside and climbed the stairs leading up, narrowly avoiding the people who sought refuge inside the station. They ignored the questions shouted at them—what could they answer? Or rather—what could they answer that wouldn’t lead to more questions?
“We should split up,” said Jany. “I take Queen, you take Sparks and we deal with what we see.”
“Makes sense to me.”
This isn’t a horror film — splitting up means we won’t both get hit at once.
There was madness in considering that an ordinary public servant had a two-hundred-meter dash ahead of him in order to save the world.
Public servants aren’t supposed to save the world…
You have already read the next bit.
Snapping out of his flashback, his recent life no longer flashing in front of his eyes, Ravi saw that his shot had gone true: the drone’s electronics sparkled and went silent, then the entire machine crashed to the ground.
His suit not giving him any warnings of further threats, he raced down Sparks Street.
I really hope Jasmine is getting through, he thought.
The farther west anyone went, the deader Sparks became. What was a lively (during the day) pedestrian mall with many storefronts became less and less friendly to tourists and passersby and more focused on delivery workers, maintenance personnel and (ironically) federal public servants working nearby. Fewer stores, many more concrete planters.
He hurriedly crossed Bank Street and got to the data centre door without further incidents. Had the warbots left for the suburbs now that downtown was cleared? Were they all clustering around the Cyrville IRN?
The data centre door wasn’t blatantly marked as such — it was an ordinary-looking lobby in a quiet mid-block section of Sparks Street marked 300 Podium Place de Ville, leading to what normally looked like a very dull reception desk where a commissionaire and plenty of equipment ensured that lost tourists would be sent back on the street with a smile.
But today wasn’t normal, and the door was locked. He knocked, and the commissionaire at the reception desk refused to make eye contact.
Oh, come on! he thought.
Jasmine clearly hadn’t had her last meeting. Until then, he was stuck outside during a warbot swarm. He wasn’t defenceless, but not in any hurry to test that out.
“I’m at the data centre, but they won’t let me in.” he broadcast on the group channel. “Getting risky in here.”
Ravi occasionally had bouts of social discomfort, but this was something else: he was out in the street, exposed to any passing killer drone, but he couldn’t go shelter anywhere in case the door suddenly unlocked. Maybe he could uproot a tree from one of the planters and hide behind it?
Moments later, he didn’t have the luxury of being uncomfortable — his suit buzzed, he was hit hard on the side and he went flying through the air. He landed disgracefully on the concrete tiles of the mall, his suit doing its best to soften the blow. Catching his breath, he looked up at what hit him.
Oooh, bad news, he thought.
This wasn’t a flying killbot—it was a ground drone, four spidery legs allowing it all-terrain mobility. It was the size of a pit-bull and had twice their enraged viciousness. The dark alloy of its limb glistened threateningly as they precisely smashed the door of the data centre entrance.
This thing clearly knew what it was going after, and Ravi was just an obstacle.
Time to show how much of an obstacle.
He un-shouldered the EMP rifle and brought it to bear on the spider-drone, but the robot jumped at him and knocked the rifle away before he could shoot. It clattered on the street, too far away to reach, but he couldn’t move—the spider jumped on him and gamely tried to stab him with one of its spiked limbs.
Ravi turned, and the spike made a dent in the concrete. Weaponless didn’t mean harmless, so he made a fist and punched the drone.
The suit helped a lot — the spider went clattering and flipped over. Ravi jumped after it, aiming his next punch at the abdomen of the bot.
It didn’t work — the spider flipped over and one of its limbs hit Ravi on the leg, making him trip. The bot had definitely identified Ravi as a target, now, and it was clear it would finish the job with him before going back to the data centre.
“The Sparks Data Centre is open to you, Ravi.” he heard through his earpiece. “Simply show up, and their bio-scanners will do the rest.”
They have my bio-scans? When did that happen?
Gee, this thing is really trying its best to kill me.
He grappled with the spider, grabbing two limbs with his suit-powered gloves and trying his best to tear them apart. But there were two other limbs to avoid, and he wasn’t sure how long he would be able to do so. One of them pieced his suit on the outside of the leg, making him gasp. Another jabbed at his head, missed once, recoiled to try again-
Then suddenly, abruptly, two limbs lost power.
He didn’t miss a beat: He tore one of the powerless limbs out of its socket, grabbed the other working limb and quickly got up while the machine was struggling.
Then he let go of a limb and used the other one to slam the entire machine on the ground.
Then he did it again for good measure. By the end of the second smash, the machine was in pieces, one last remaining half-limb pitifully clawing the air.
“Look like I got here right in time,” said Jany with her own EMP rifle in hand.
“Thanks for the assist,” panted Ravi.
He retrieved his weapon, then knocked again at the splintered door of the data centre.
The commissionaire, who had seen the entire drone-smashing episode, was now expecting him, and the door opened. Both of them were encouraged to take the stairs leading up. Ravi followed Jany, panting and trying not to limp from the wound in his leg.
Sparks Street had long hosted a government data centre, albeit not always at the same place. While critical government databases and application servers were physically located somewhere else far from cities — sometimes on military bases –, it was simply too convenient to have a telecommunication nexus close to Parliament, and the tendency when you had one of those was to add a few, then more than a few server racks for “essential applications” where you physically couldn’t blame the physical distance between the servers and the Very Important Users up on the Hill. That also meant that the Sparks Data Centre was a physical location with some elevated privileges — able to approve deployments with fewer steps and stakeholders, despite the vehement opposition of most GC cyber-security experts concerned with least-access account control.
He climbed the stairs. He smelled popcorn, and it wasn’t his imagination. From a location in the basement of some other government building in the vicinity, the Sparks Data Centre had found its latest location to date in a vast curiously unused space right in the middle of centre-town Ottawa—the remnants of a vast movie theatre.
The following paragraph is entirely factual: From 1971 to 1986, the Place de Ville office complex also hosted, in its middle “Podium” building between Tower C and the Marriott Hotel, a 1200-place movie theatre divided in two screens placed one atop the other, with structural sloped concrete efficiently shaping the theatre footprint. For a decade and a half, the theatre was a favourite of local mandarins and politicians—Prime Minister Pierre Elliott Trudeau watched The Godfather there in 1972, but no records exist of whether he cackled knowingly during the film. When the theatre became economically nonviable in the mid-1980s, the very factors that made it special also made it impossible to repurpose for other uses: The sloped concrete structure couldn’t be destroyed or rearranged for office spaces without threatening the structural stability of the building, and the almost-invisible nature of the theatre, surrounded by a ring of offices, made it easy to keep out of sight and out of mind.
Until, that is, the government went to look for another space to host its Sparks data centre. The cocoon-like nature of the concrete shell surrounding the low-height space made it ideally suited for survival when surrounded by skyscrapers, and the sloped concrete floor made an ideal base for raised (if staggered) floors supporting new data racks. But some of the remnants of the place’s colourful history survived, including a pervasive odour of buttered popcorn.
A technician expected Jany and Ravi at the top of the stairs. She didn’t look all that happy to see them.
“I don’t know who you are, but I’m told you’re the guys.”
“I just need access to the Multi-Core system.”
“Fine. Right this way.”
The technician brought him to a modern access terminal. Ravi was relieved to note that technology seemed to have stood still here — no fancy new UX paradigm here in the bowels of a data centre: good-old industrial-grade Windows, with a console ready to help two keystrokes away. My kind of terminal.
This being said, he wasn’t here for programming high-wire tricks — his job was to insert the data wafer in the right port and wait.
“Right there,” showed the technician, tapping an access port.
Ravi reached in one of his suit’s pockets for the data wafer. He took it out and winced: The wafer had broken in pieces, probably during the street fight with the spider-bot.
He reached into the suit’s other pockets, and pulled out another wafer. This one was intact. They’d planned for this.
Ravi put the data wafer in the access port.
Hopefully, this wasn’t a trans-generational con by a renegade Jasmine to bring down the IT infrastructure of the government of Canada for purposes unknown. That was the problem with elevated access credentials — once you were in, it was really easy to screw things up in a way that couldn’t be undone.
The server scanned the data wafer content, identified the data payload, uploaded it to the production repository and began the merge process.
An authorization pop-up appeared: Stand by for bio-metric security clearance validation.
Rolling her eyes at Ravi’s befuddled expression, the technician tapped near an optical sensor.
Riiight, he thought while looking at the sensor. Here’s where it could break — invalid iris print, insufficient access privileges, some database hang-up about him being technically dead…
But no: the authentication was valid, the commit went through, and the automated distribution pipeline got going.
Ravi exhaled, unaware he had been holding his breath. So this is it, he thought-
—But no: the server threw up an error.
He looked at the error message and didn’t understand what he saw.
“Oh, I’ve got this,” said Jany, gently elbowing him out of the way. “Jasmine must have forgotten about the specifics of our deployment pipeline.”
She started typing at unusually high speed, popping and closing windows faster than Ravi could understand.
“As of three weeks ago,” explained Jany, “we’re on an interim handshake library between the nexus server and the staging area. The newest one was giving us issues, so we reverted to the previous one while we’re waiting for the next release.”
The commands were different, but the problems remained the same, thought Ravi.
“…and done.” She clicked and ran the pipeline again.
“Good thing you had the project lead around,” she winked.
“So, what now?” asked Ravi.
Jany cupped her earpiece.
“We have just uploaded the payload,” she said. “Everything went through.”
“We should see some of its effect soon,” said Jasmine through the earpiece. “It will take a few minutes as the software update is distributed.”
“Got any news channel?” asked Jany to the technician.
She shrugged and took them to a small office, where a wall was dedicated to multiple silent channels of continuous news.
It did not look good. Footage was coming from all major Canadian cities—scenes of buildings on fire, people fleeing, destroyed cars, bodies in the streets, government drones trying to shoot down the Sword warbots, journalists huddled in buildings while looking nervously outside. Everyone had a sombre expression on their faces, and all the channels were showing the same things.
Somewhere in the crawl, mentions were made of international attacks — but what was going on in Canada was bad enough that the footage didn’t need to go outside Canadian borders.
I hope that will work, thought Ravi. What if Jasmine had miscalculated and sent something completely useless? What if Multi-Core wasn’t the primary routing system used by the drones? What if there were many more of those spider things?
When the turn came, moments later, it was nearly imperceptible. One channel reported that a swarm of drones changed directions, that it headed for a river and voluntarily crashed into the water. The immersion did quick work of shorting out the electronics.
Then similar reports started piling up — airborne drones making a beeline to rivers, lakes and canals, all three oceans. Ground bots skedaddling to the nearest creek, brook, pond or pool. All of this often as they were firing, as people were trying to shoot them down.
Government drones were not affected — just the Sword ones.
Ravi squinted as he tried to understand what had happened. Redirected all nongovernment drones to the nearest body of water? What kind of lookup tables were necessary for that?
“I don’t think I could have coded something like that,” he said?
“You’re not the only coder out there, Ravi. Plus, Jasmine had twenty years to understand the documentation you just wrote.”
Jany and Ravi made their way back to the Cyrville IRN in far more leisurely fashion. Jasmine booked them a cab, and as the vehicle made its way back to the suburbs (possibly guided by Multi-Core), Ravi could see clean-up crews already shoving drones out of the way, trying to prevent the traffic jam that would soon follow as people understood that the threat was over, that they could now come out and resume their lives.
The casualties would be horrific, Ravi knew. The Sword wanted to create chaos and destruction, and it had achieved its goals. Around the cab, buildings and vehicles were still on fire. Bodies were left in the streets.
There were several of them at the Cyrville IRN. Ravi was relieved to see that both Michel and Olivia had made it through—both of them looked terrible with dirt, sweat and soot caking their entire bodies, but they were still alive.
“Good job, Ravi!” said Michel with a fist-bump. “You can add combat software engineer to your resume now.”
“I think that’s going to be classified.”
“I’ll make you a little certificate, then.”
“Let’s get home first.”
He turned to Jasmine, who had found a way to get back to them.
“Any news on that?”
“We should get back to the ALC offices. I’m expecting a go-ahead on your return within moments.”
Another car, much bigger stopped by the Cyrville parking lot. All five of them got inside. It was very quiet inside.
“What’s going to happen next?” asked Ravi.
“You two are going to get back home,” said Jasmine. “For various reasons, it would be much better if you weren’t around for what’s going to follow. Easier, anyway.”
She looked outside the window as the car made its way through the increasingly busy streets.
“The country will mourn, be shocked, demand answers and retribution. The answers will be shocking, and the retribution will be impossible—at most, I’ll be trotted out in a parliamentary commission to explain what happened, how the Sword will or was destroyed in 2075, perhaps even who made the trek to a data centre to upload the fix that had stopped things from getting much worse.”
“Hence us being away.”
“That’s right, although Jany’s going to be unexpectedly famous for a while. In time, I expect that we will activate the Shield very soon, and cut ourselves off from all other timelines. Much safer this way. And let’s face it — we’ve existed almost forever without time-travel, we can probably go back to that state without too much trouble.”
“You will be stuck doing your own debugging, though.”
“Ah well, I guess it will just take us longer. Longer term, I don’t know. A few years of conservative politics to absorb the shock. I’m probably going to be put in a nice dead-end Special Advisor job to make sure I don’t make any trouble.”
“That good or bad?”
“After the last few hours, I’ll take it. I feel as if I’ve compressed an entire career in an afternoon.”
She cracked a smile.
“They were right, though, about the prime minister — she’s really, really nice.”
“But I’m in for a few rough days. Even me skipping out to see you home — I’m going to pay for this. I’m escaping from more meetings in high places, probably a big unfriendly debrief from our friends at the security agencies.”
“Wow, better you than me.”
“I should have stayed a developer, maybe.”
The rest happened surprisingly fast. The zombie virus no longer being a concern, the coordinates to their timeline having been verified as valid, them having very few things to pick up, the government wanting them out of their way to simplify the coming media circus, they went almost directly from the car to the high-energy lab.
A few touch-screen button-pressing moments later, they were standing on the portal platform, listening to the checklist countdown, trying to find something to say to each other.
They got news that Labelle was doing just fine — he was currently helping take care of the last few people who needed help at Rideau station.
“So, ah,” said Ravi, “It’s been an adventure.”
“I swear we were really just trying to get you to fix a bit of technical debt,” said Jasmine.
“It really just escalated after that” added Jany.
“I wish I could say that I won’t miss you,” said Michel, “but that wouldn’t be completely true.”
“Too bad about the Shield.” said Ravi.
“The future is long, and everything will happen,” said Jasmine.
“Next time, though, maybe give us a bit of notice before you kidnap us?”
“We’ll aim for two weeks.”
“Send an appointment by email. My calendar is up to date.”
“Well, if you want to send me a message, just give me a sealed envelope.”
“Funny you should say that…”
A technician interrupted them to say that they were ten seconds away from opening the portal. Michel and Ravi stayed on the platform and waved to Jasmine, Olivia and Jany one last time.
“Three, Two, One…”
The portal opened. Ravi peeked through, saw Karen and Jasmine (thankfully younger), and stepped through.
Both women were wearing exactly the same thing they did when they’d left (well, as much as what Ravi could remember which wasn’t much), the room felt exactly the way it did, their laptops were still on the table (not yet having activated their lock screen) and Ottawa outside looked the way it usually did.
He looked at Michel and he nodded back. They both looked at the portal and gave it a thumbs-up.
The portal went away with a Pop.
Karen screamed, pointing at them.
Ravi realized that he and Michel were still in their 2075 suits, still lugging an EMP rifle on their back, still carrying a backpack with a functional Shield, still caked with dirt, sweat and soot, sporting stubble and (they’d later find out) fifteen pounds lighter even when considering the added muscle definition.
They would need to explain all of this.
But at least they were home.
Chapter 8 – As Normal as Possible
The first week was not fun at all.
They had plenty to do. In between everything else, both Jasmines had tried to brief them on what to expect when they went back home—the channels they would use to tell everyone what had happened, the people to contact in order to give them crucial pieces of evidence, the specifics of how to present the information.
They could, Ravi reflected later, have decided to stay silent and kept everything to themselves. Maybe they would have been able to distract Karen and Jasmine with a bit of misdirection, professing a sudden overpowering love for pranks and cosplaying, and pretending that everything they’d seen was normal and/or an elaborate practical joke played on them. Karen might have bought it for no other reason that she did not deal very well with Outside Context Problems. Jasmine, on the other hand, would not have been fooled so easily.
But putting aside the practicality of getting away with it, their overriding concern was that it simply would not have been the right thing to do. They had been entrusted with fifty years’ worth of progress in their pockets, with the practical demonstration of their wild tales, with a way to shield Canada against extra-temporal incursions.
You can’t keep secrets from the future.
Eventually, their inaction would have terrible consequences. Another Shield, another attack, another entity poking holes in the space-time continuum when they could have done something to prevent it. Both had children and families to think about. It was a moral imperative to spill everything.
So, in a mirror image of Jasmine’s escalating series of meetings in 2055, they too ran through the gauntlet. First with Karen (after she had stopped hyperventilating), then with the DG, the ADM, the DM, a few scary people from unmentionable agencies, and then a peeved Clerk of the Privy Council who didn’t look too happy to be up this late, but soon changed his mind when he glanced at a few briefing papers slid under his nose. It turns out that Jasmine 2075 knew what she was doing when she had put together the briefing documents: It included confidential PCO documents that had been filed earlier today, and for the rest of the week.
The Clerk put down his reading glasses and looked at them for an instant. It wasn’t clear to Ravi whether the Clerk could fire them at will or not — While often considered the Head of the Public Service, the Clerk’s employment termination authority was somewhat nebulous — in-between union representation, collective agreements, Deputy Ministers being appointed by the Prime Minister and plain old precedent, they probably couldn’t be fired on the spot for a wrong answer — but Ravi wasn’t intent on proving or disproving the theory.
“Technically,” finally said the Clerk, “I’m sure we could convict you for having unauthorized possession of Cabinet Documents much above your security clearance.”
“Our security clearance was deemed appropriate when we were given those documents,” said Michel without skipping a beat.
This was, after all, the third time this matter has been raised and answered today.
“I’m told your proofs are convincing. The suits and rifles have been successfully tested as being beyond anything anyone can do today. Even by the Americans.”
“These files were to help guide the Canadian government.”
“Indeed. I’m told some material is strictly for the Prime Minister’s eyes only.”
The clerk put back his glasses to look at his briefing material.
“We’ve got a future history, reams of patents for inventions that don’t exist yet, entire textbooks of fundamental twenty-first century science… Quite a responsibility to manage.”
He removed his glasses and looked very intently at them, one after the other.
“Then there’s the matter of this so-called Shield.”
He let the word linger on. Despite the surprising number of people in the room (many of them accumulated from previous meetings, although Karen and the DG had been evacuated along the way), there was dead silence when the Clerk wasn’t speaking.
“The suits you were wearing during your adventures in 2055 were equipped with multiple cameras. I’m told that this would be very difficult to fake.”
He showed them an image of them shooting down drones from the sky in the Cyrville parking lot.
“And you’re telling us that this Shield would prevent such events?”
“It would cut us off from time travel. Meaning that we couldn’t be on the receiving end of a portal, nor open any of our own.”
“Kind of a tough choice, isn’t it? Protection, but also isolation. And inability to use the technology for ourselves.”
“We left 2055 before casualty numbers from the intrusion event were confirmed,” said Ravi, “but early estimates ranged somewhere between four high figures and low five figures.”
The Clerk sighed.
“That choice will be up to the Cabinet. I will make sure to report those figures to them. If it was left to me, I would turn the Shield on right now, and measure the consequences later. But since the choice is not up to me…”
He glared around the room.
“…I strongly suggest everyone forgets about this specific exchange.”
He put his glasses back on and flipped a few more pages in his briefing material.
“There’s one more thing. Among the messages that were addressed to me, signed using my specific encryption key, was a very specific note concerning your employment.”
He paused and looked at them again. Ravi was getting the impression that the Clerk’s understated showmanship must have been a factor in his suitability for the job.
“It strongly recommends here that for services rendered to the crown in 2055, you two should be guaranteed immediate retirement at a very favourable pay rate. We were even provided with extremely valuable information to pay for that early retirement. And then some, considering that the deal will end up benefiting the Canadian taxpayer.”
He cracked the barest smile.
“That, on the other hand, is a recommendation I can make. Your next pay, Phoenix permitting, will be split between your current department and a special affectation from PCO as the highest advisor level we’ve got. Your employment files and back-pay will be modified to show that to be your effective pay rate for the past five years. No penalties will be incurred if you choose immediate retirement.”
He closed the briefing book but kept his glasses, peering above them.
“In other words, gentlemen, I think we can say that you have won the public service. This being said, I would beg you to stick around for a few more years. We clearly need people as capable as you.”
“We’ll take your advice under consideration,” concluded Michel.
That, however, had not been the final meeting. The climactic one, certainly, but not the last. In the next few days, much to the frustration of their wives who couldn’t be swayed by mere mentions of national security, a long series of debriefings took place.
Two or three times, Michel and Ravi were separately asked to go over their adventures in the future and recall, detail, explain everything they had seen, heard, felt or thought along the way. They had no illusions — this would all be compiled and combined with the rest of the evidence into a thorough record of their adventure for the benefit of researchers and decision-makers.
Fortunately, it wasn’t unpleasant. A bit annoying, certainly, but their interviewers had obviously been selected for their ability to elicit confessions and explanations. Ravi rather enjoyed himself in trying to explain the finer points of his algorithm to someone who either didn’t or pretended not to understand how Ravi had done it.
At least they could go back home every night (if later than they wanted), kiss their wives good night and sleep in their bed. Things were looking up.
It helped that Ravi and Michel could talk to each other — a proof, perhaps the last they’d keep, that they had indeed gone through those adventures, that they weren’t as crazy as they sounded.
They also understood that they would probably never hear about the Shield again unless it was revealed to the world — the decision would be taken secretly, the device activated (or not) without anyone noticing anything different, and that would be that. Which suited them just fine — with every successive day, they hungered for normalcy, and having nothing to do with multiverse-shaking decisions.
Eventually, though, official interest in them petered off. They had provided flash drives filled with corroborating information, video footage and physical proofs — there was a limit to how much Ravi and Michel could recall. A week later, they were thanked profusely by their interrogators, reminded about the draconian measures in their security agreements in case they revealed secrets to unauthorized people, and sent back home.
The second week had been easier. They went back to work, explaining their absence to nodding acquaintances by talking about unexpected holidays. After all, they had delivered the Multi-Core routing module — they could take a break.
Jasmine and Karen had not been so easy to placate. Karen was still fuming from having been called useless by the time travellers and left out of the trip. Jasmine, on the other hand, seemed to know something was up. Had she seen herself through the portal? Was she sensing something from the deference in which they were now treating her?
“What did you see in there?” she said at one team meeting. “Why was I specifically told not to go with you? How did they know my name?”
Michel and Ravi had talked about this, and this is the only thing they ever said to her about it:
“You will eventually outrank us, Jasmine.”
And they stuck to that simple statement. Jasmine, after a while, accepted that this was the only thing she’d learn.
Slowly, they got back into the routine of it. The question of retirement weighted over Ravi’s mind. Retiring early sounded like the best possible thing, but would he like it? There was no harm in working for a while until he made up his mind. He still wanted to help drive Manticore to the finish line.
So, before anything else, Ravi worked on the documentation of his routing module. He wrote it in detail, rewrote it for clarity, put in the Earth-size fix to make sure no one would ever bother him again about it in the future, and even made a specific module to update and validate the table lookup values every year or so. By the end of it, the documentation was longer than the code by a factor of magnitude, and Michel had to intervene to stop him from spending even more time reworking it again.
Two months later, Ravi no longer felt out of time. He had started thinking of his future escapades like a particularly eventful holiday in a foreign land, leaving indelible memories but making him feel even more comfortable at home. He played with his kids and kissed his wife with renewed purpose, and appreciated everything with the fervour of a born-again routinist.
His first post-adjustment paychecks came by, tripling his pay. That was really nice. He talked dual retirements with Djamila, who wouldn’t have any of it and remained highly suspicious of his sudden influx of funds.
Manticore roared along, pushed by the team spirit that followed Mont-Laurier and Ravi’s home-run of a contribution on the routing module. So much so that by the third month, he was back in the issues-tracker for the legacy application, once again falling into the routine of checking the list every morning and spending days tracking down evermore obscure bugs. He enjoyed it.
Contrarily to what he had expected, he didn’t feel that this was drudgery after unimaginable adventures. This was the life. Heroes were symptoms of something having gone wrong. By staying where he was and playing his part, he prevented the catastrophes that required heroes. He came to relish sitting down at his workstation every morning, looking forward to shaping more order back into the universe.
So, it was with mixed feelings, one afternoon in the office, that he heard a small Pop! behind him.
He turned, and so did Jasmine. Michel had gone home, so he wasn’t around to see a horizontal portal in the middle of their pod, from which dropped two very familiar EMP rifles, two black battle suits and one piece of paper.
Before anyone could say anything, the portal disappeared with a Pop!
Before Jasmine could react, Ravi grabbed the piece of paper. It read:
Ravi, Michel, you are in danger. Put the suit on now! — J 2075
Ravi did not hesitate. He started unbuttoning his shirt.
“What is this — Ravi, what are you doing?”
He shrugged off his shirt and undershirt, then unbuttoned his pants.
“Do I need to call HR?” said Jasmine. Then: “Wow, nice abs and muscles! When did you get that?”
That had all been the suit’s doing three weeks earlier. Djamila had loved that. Unfortunately, he was already losing muscle definition—easy come, easy go.
As per his previous fitting of the suit, he kicked off his pants, removed his socks but kept his briefs — let Jasmine be happy or disappointed, he didn’t care.
He reached out and grabbed both suits. One was clearly marked M and the other R. He hurriedly put his own, feeling the nano-enhanced fabric tighten around his body as the suit recognized its owner.
As he pulled up the shroud, a holographic projection appeared in front of his eyes, the sound only audible to him.
It was Jasmine 2075, and she looked ragged.
“Ravi, Michel, we have just wiped out the last remnants of the Sword. Unfortunately, we weren’t able to stop them from sending four hunter-killer androids back to your coordinates. 2055 is Shielded, but you’re not, so they used the last of their energy stores for pure vengeance. We think they sent two bots to your office, and one to each one of your homes. The suits and the rifles should help, but be careful: We removed the limiters from both. You should receive this fifteen minutes before the bots are set to arrive. Get that Shield up. I’m sorry to bother you again with this, but good luck and goodbye!”
The display shut off and Ravi froze for about a second, trying to figure what to do first. Then he turned to Jasmine, who was still wide-eyed from the portal and the strip show.
“Leave now. Call in a bomb threat to the building. I’ll get this floor evacuated.”
He took out his cell phone and called Michel. The older man answered from the LRT station where he was waiting for a ride home.
Ravi quickly repeated Jasmine 2075’s message, and added “stay there. Tell your wife to leave the house. I’m going to take care of the bots here, and then I’ll bring your suit to you.”
He hung up and hurried toward the elevator banks. Not skipping a beat, he dialled Djamila.
“Don’t panic, but I want you to go pick up the kids, then go spend the night in a hotel. Don’t tell me where. Buy whatever you need after leaving the house. Go now. This is serious.”
Then he pulled the fire alarm.
As the alert tone blared throughout the floor, he knew what time it was — this late in the afternoon, anyone left in the building wouldn’t bother to wait until this was called a false alarm or not — they would pick up their things and leave, which was exactly what he wanted.
He saw Jasmine slip out of the office through the emergency stairs. Already, people were clustering to leave. He went back to his office, ignoring the stares along the way.
Great—communications completed. Now, to wait until the bots arrived. He hadn’t started a countdown exactly when the portal opened, but he only had maybe five minutes left.
He saved his work and turned off the computer. Priorities!
Karen almost dropped by his office on the way to the emergency stairs, but took a quick look at what was in the office and decided to hurry past him. She hadn’t mentioned anything to them since the day they had the escalating meetings—clearly, she still wasn’t doing too well dealing with Outside Context Problems.
Only a few moments left now — the office had emptied quickly, and Ravi could feel the suit working its magic on him: his heartbeat was slowing down, his energy levels rising. He felt warm and he felt fast — the suit already converting fat to metabolic energy.
It would have been nice to have some idea what these bots were capable of doing, what they looked like or even how they would be spotted: how was he expected to deal with them if they were at his house? He didn’t like the idea of waiting before fighting them off at home, but if he could take half of them out right away…
He was hefting the weight of his EMP rifle when the left side of his suit buzzed heavily. Then the right side, less heavily. Then the back of his suit, twice more faintly.
Okay, so that was how it was going to go — location of the bots buzzed right in the suit. He brought the rifle up and went in the direction of the heavier buzz.
The office was thankfully empty now. He crept past the cubicles, not knowing what to expect. He listened intently — but for the moment, the only thing he heard was the soft step of his own soles on the office carpet. He controlled his breathing.
The buzz of his suit was leading him to a cluster of executive offices — closed offices with doors, reserved for the directors and up. He couldn’t see beyond those partitions. Was something in there? Was that something able to see through walls?
He heard a creak and turned toward the source of the sound — saving his life. The energy bolt didn’t make a sound as it passed through the wall, missing his head by a few centimeters.
He dropped, rolled (amazed that he was able to perform such moves) and brought up his EMP rifle in the direction the shot came from. The EMP rifle didn’t buzz. He fired anyway, probably frying a few computers farther away.
He moved forward, looked over a partition and saw it.
It certainly looked evil. Black-chromed humanoid figure, four joints of articulation on the arms and legs. Dark-glassed eyes. Hands and feet that looked as if they could grip walls and ceilings.
Indeed, almost as if to prove it, the killbot jumped and hung to the false ceiling.
Ravi fired the rifle.
The killbot fell to the floor, but that was because it had miscalculated: the ceiling was a false one, and the killbot had placed its entire weight on tiles that broke apart the moment its claws tried to fasten on the ceiling.
Stupid bots are good news, thought Ravi.
Instinctively, he swatted away at the robot, and got it to slam into the wall. Was this what Jasmine meant when she said that the suit’s limiters had been turned off?
He saw the killbot point a fist toward him and ducked — his eye’s peripheral vision caught the flash of the energy bolt as it went flying toward the ceiling.
Ravi tried answered in kind with his rifle, but the killbot lunged at him and pushed him through the wall of the closed office.
Then crashed into an office supply room. Ravi turned and kicked the killbot hard, then grabbed a nearby printer as if it was a paperweight, then slammed it on the killbot’s head.
It didn’t do much: the killbot threw the printer back, and Ravi tried swatting it aside — unfortunately, the printer was heavy and that meant pushing himself toward the glass partition of the room. He bounced.
The bounce was good, though: it confused the killbot that was already lunging at him. Leaning into his momentum, Ravi sidestepped further, and the robot smashed through the glass partition, sending bits of tempered glass everywhere.
Ravi ducked and grabbed his EMP rifle.
He wasn’t going to miss his shot: He brought the rifle up to the killbot’s head and fired point-blank.
He expected the killbot to go limp, circuits fried. What he got instead was a curious spectacle: The killbot stopped, stepped back, turned around and extended its arms.
What? thought Ravi.
Then it came to him — he’d been thinking too much like a human. Killbots wouldn’t necessarily have their brains in their head: It would be in the chest, heavily protected. The head would be for high-quality sensors, and an EMP shot would merely take those out, not the entire system.
But, of course, no android designer would put all the sensors in the head, meaning that — uh-oh —
The killbot slammed into him, pushing them both into the counter on which various stationery supplies and equipment was located. Rifle knocked out of his hand (why hadn’t they sent him a pistol?) Ravi’s hands reached some something — anything — to stop his fall and…
… his right hand landed on the guillotine handle of the heavy-duty paper trimmer he’d always eyed suspiciously. That thing could cut fingers! Normally, it would have been too heavy, too cumbersome, too tightly bolted to the base to be useful—
But things were different in a suit that magnified his strength.
He brought his hand back toward the killbot’s chest, smashing the trimmer’s wooden base. He did his best to kick away the bot, then smashed the remaining fragments of the trimmer base against the counter.
The killbot readied itself for another charge, but Ravi had a nice handmade sword (or at least a machete) in his hand. As the machine rose its bolt-spitting fist toward him, Ravi gave it a good hard swipe of his new weapon.
The hand came clean off, and sparks came out of the stump.
It wasn’t what Ravi had expected — he had been looking forward to simply destabilizing the killing machine, but he wasn’t complaining too much.
While the killbot was learning how to react to sudden amputation, Ravi gave it another lesson: He drew back the blade and swung it again, aiming for the middle of the neck.
He decapitated the killbot.
Kicking it to the ground, he got his rifle back and pressed it against the exposed neck of the machine, pointing to the inside of the torso.
He fired, and the machine went silent.
Took more effort than I’d like, he thought, but at least one of them is down.
He’d explain the damage to the facilities people the following day.
Now where was the other killbot?
He had stopped paying attention to the incessant buzzing of his suit as he tumbled about and fought for his life.
Given this, it was a surprise when an energy bold slammed into him.
He grunted and fell back — the suit could absorb such a blast, but the price to pay was being briefly roasted at the suite vented the received energy in every direction, and tried repairing itself fast. He wouldn’t survive too many of those, nor a volley received at once.
He still had the EMP rifle, though, so he waved it around. At a faint buzz, he fired.
Painfully, he started getting up, then held his crouch. Scanning carefully, he swept his rifle and waddled out of the supplies room.
He caught some movement off the corner of his eye — a figure running from one partition to another, closer to the windows. Gotcha.
He started moving in that direction, aware that he was moving further and further away from his pod. Let’s take you down, then get back to business.
This part of the floor was a warren of closed offices for executives — difficult to navigate in normal times, downright dangerous when dealing with a hunter-killer robot. The front of the offices were, as with other closed rooms in this office, made out of a glass door and two glass partitions. Easy enough to check for murderous machines.
The problem was the side and back walls — they’d already established that they could shoot through walls, and Ravi wasn’t keen on being shot a lot. Come to think of it, he could shoot through walls too.
He squinted slightly as he approached the windows while sweeping the rifle — the sun was shining, and it was hard to see- there! Buzz!
He turned the rifle, felt the buzz get stronger, pressed the trigger. Offence, offence, offence—keep the pressure. Felt the buzz again, shot again. If he was hitting the limbs, maybe he was disabling the killbot one byte at a time.
He went around the corner, hoping to see a pitiful killbot crawling by one hand and mewling “kill me, kill me.”
Instead, he nearly got shot in the face.
His rifle shots must have had a degrading effect, because the normally fearsome machine was on its knees, one arm hanging lifelessly to its side. But its other arm could still shoot energy bolts (if not that accurately), and one narrowly missed his head.
Clearly, the killbot had no problem thinking like humans, or at least trying for head shots.
Ravi wouldn’t give him a chance to recharge: He brought up the rifle-
-But he wasn’t fast enough. The killbot lunged and pushed him back against the window.
Hard. Robot strength hard.
Hard enough that Ravi, slammed against the window, heard it splinter, crack, and give way. Made of laminated safety glass as in countless other high-rise facades, the window did not break: it held together thanks to the layer of heavy plastic inside, but was pushed out of its fasteners.
Ravi felt himself fall back. Seven stories above ground, it was a very, very unpleasant sensation. The killbot drew back as the window fell to the ground, having calculated its hit.
Ravi, on the other hand, was left flexing his body forward and frantically flaying about for anything he could grab.
In the end he found by accident — as he fell, his wrist became stuck on two fastening elements distorted by the force of the killbot’s hit.
Even with the suit doing its best, it hurt so. Incredibly. Much.
Hanging by the wrist forty meters above the ground was the worst position he could think of — completely exposed (was he hearing people down below gasping?), and unable to simply drop down and hope that the suit would do the rest.
Then it got worse.
Looking up, he saw the killbot bring his fist toward him. That looked suspiciously fatal.
But then, rather than take a shot, the killbot stopped and limply toppled forward.
As the android fell past him (somehow not snagging anything, or putting further pressure on his overworked wrist), Ravi blinked and looked bemused. What had just happened?
All was explained when Michel peered above the window ledge and grabbed his arm under the wrist.
“Don’t you know that when… when you’re in trouble, you should always call… call upon your supervisor?” grunted Michel as he pulled him back. He was clearly panting.
Michel was still in office clothes, but he had his EMP rifle. He pulled Ravi back, helped along by Ravi grabbing on to the ledge with his other hand and pulling.
“Taking chances, not being in the suit of armour.” Ravi said to Michel as he got up.
“I think you’ll appreciate how … how I didn’t have time to suit up. Besides, you know … Know I prefer glass cannon builds.”
“Respect your elders. I downloaded … downloaded Doom on … On a 2400-baud modem.”
“Two down, but there’s two more to go.” said Ravi, as two faint buzzes reminded him.
“Let me put on that suit.”
They were on the ground and running no more than five minutes later.
The running part was not optional — With the building evacuated, two figures dressed in black and clearly armed with imposing weapons were an unusually interesting sight for everyone clustered around the building. Even trying to sneak away through the back did not work — Hey! Hey! HEY! quickly shouted the emergency response officers.
One thing left to do: run. And that’s when Ravi really saw the benefits of the unlocked suits. Effortlessly running faster than a cheetah, jumping higher than a trailer truck, Ravi and Michel gradually grew more comfortable in their power gait. Running at the speed of a car came more naturally than he expected, and once more Ravi wondered at the amount of built-in software in the suit to enhance their wearer’s abilities.
They were clearly a strange sight, and Ravi knew that media, social and otherwise, would be plastered with videos and pictures of them jumping and running their way across town — The headline: Who are they? Their best hope was to finish this as quickly as possible, because Ravi suspected that they’d get bullets first and questions later.
Following the buzzing in their chest, Ravi and Michel ran and leaped east. Since they were both living in Orleans — Michel north of Jeanne d’Arc, Ravi near Trim and Innes, it wasn’t a surprise that they were going in similar directions.
“We can go faster if we hop on the train,” said Ravi as they made their way toward the LRT line—roughly at the Cyrville station where so much of their troubles had begun.
“Yeah, like they’ll let us on. Got your Presto card?”
“I meant leap on the train.”
“Hmmm… OK, let’s try that.”
They could go roughly forty kilometers per hour in the suits, or twice that by hitching a ride — as long as they were careful not to touch the electrical wires, although Ravi half-expected the suits to recharge if they did that.
With just a bit of additional effort, they managed to leap on top of the last train car as it left Cyrville station. Once firmly anchored, they tried to stay silent — no need to further alarm the passengers.
The train accelerated at a good clip, gaining Ravi and Michel the additional speed they hoped for. The train breezed through the small trench in which it ran. Another train crossed passed them by in a roar of sound and wind. The suits seemed unusually good at holding on to the train — magnetic adherence?
Then the train slowed down for Blair station. They moved to the left side of the train, trying to escape being seen by the people on the platform.
“Think the train will keep going, or the sight of two guys on top of the last car will be too conspicuous?”
“Look as if you belong,” joked Michel.
Ravi looked up. Unfortunately, a crowd was clustering around the train, clearly aware that something weird was going on.
“We’re engineers!” said Ravi.
Technically true, albeit software engineers.
“We’re doing testing! Making sure it’s reliable!” he tried.
Amazingly, more than a few of the onlookers nodded.
On the overpass, people were clearly taking pictures or video.
More amazingly, the train started moving again. While rain, sleet or snow would stop OCTranspo trains at the slightest provocation, strange figures hanging on top of the train did not qualify as showstoppers.
“Oh no,” said Michel as the train accelerated.
Ravi looked. A third figure had joined them on top of the train — another killbot. And it looked ready to shoot.
“How did it find us?”
“I’ve been presuming that if our suits know where they are, they know where our suits are.”
Ravi raised his rifle, his suit doing the hard work of keeping him steady on the moving train. He tried aiming — but it was no use: his rifle kept going all over the place, the connecting pantos getting in the way. What if he ended up hitting the train’s electrical system?
The killbot had no such compunction — it raised its fist and started firing a stream of energy bolts. But if the machine had the will, it didn’t have physics on its side — the bolts went wild, comfortably missing them both.
“We have to get closer!” shouted Ravi.
As insane as it sounded, he started running toward the killbot.
Under him, the train took the overpass ramp that smoothly took the track from north of the busy 417 highway to the middle of the highway where it would stay until the Trim terminus ten kilometres east. The killbot kept shooting at the two suited humans as they ran toward the front of the train, even as it made its way above the westbound highway and re-settled down in the median space.
The train was accelerating now, and the killbot figured out that its shots were not doing any good. It changed tactics, and started shooting straight down.
“What is it doing?” asked Michel.
“Killing the driver.”
Fear not, readers: Technical Collateral remains a zero-casualties novel (well, except for Kevin, those zombie lunches and thousands of 2055 Sword victims, none of whom you personally knew) and so the driver remained unharmed, albeit unable to watch any of The Terminator film series ever again. But as Ravi was about to realize in a few moments (and I’m only telling you early because we’re buddies now that you’ve made it this far), the shots found their target, severing the electronic connection between the driver’s controls and the train’s brakes. While keeping the acceleration going. Yeah, it just works like that.
Ravi and Michel kept up going toward the front of the train, avoiding the gaps between the cars, the electrical wires and the pantos. Then they slowed down — as they were closing in, there was a real chance some of the killbot shots could do real damage.
But Ravi sensed something was wrong. As the train neared Montreal Road station, it kept going faster. Pretty soon, it roared past the station without slowing down, and Ravi could almost hear the protests of the passengers for whom this was easily the worst thing that had ever happened to them.
They were only a car away from the bot now, and it seemed to be waiting for them. With the acceleration, though, Ravi wasn’t sure they wouldn’t be shaken off the train—or go under it as it derailed and rolled over a few times. Fortunately, they were on the median of the Orleans segment of 174—straight-ahead for a few kilometres, not a single curve in sight. No brakes, no acceleration—hopefully there was a good end-of-track bumper at Trim.
The train went faster, and the vibrations got worse.
“Stop the train, and I’ll take care of the bot,” said Ravi.
“How am I going to do that? Throw myself on the tracks?”
“You know what to do to an electrical train.”
“Oh, right. Wish me luck on the electrocution.”
As Michel went back to disable the electrical pantos, Ravi kept going, raising his EMP rifle in front of him to show the killbot he meant business.
The killbot didn’t care much, of course: designed to kill, it didn’t have much of an instinct for self-preservation except to complete its job. Ravi wondered if splitting up with Michel somehow altered the computations going inside that machine intelligence—become less aggressive in the hope that it would survive to take out the other target.
Oh well – time to find out.
Behind him, he heard sparks and the train noticeably slowed. A good thing too, as they rushed past Jeanne D’Arc station.
“I’m fine,” said Michel. “Great isolation on those gloves.”
It was time for Ravi to finish this. As the vibrations got better, he snapped a shot. It hit and didn’t seem to do much, but his goal was to progressively degrade the bot’s electronics.
The killbot, on the other hand, also fired and scored a hit on Ravi. The suit felt it — as if the circuits overloaded, he slipped and fell on the train’s roof, his rifle nearly slipping out of his hand. He wasn’t sure he could take many more such shots.
Regaining his footing, the suit repairing itself, closing the gap on the bot, he fired again and scored a full-body hit. Unfortunately, the bot was already gearing up for a lunge, and smashed into Ravi like, well, a freight train.
He felt weightless as the impact took them both down below, right in the fast lane of the westbound 174.
Ravi and his wrestling robotic partner fell on the highway asphalt, most of the initial bounce off the ground absorbed by the back of Ravi’s suit. They tumbled a few times, both of them unsuccessfully trying to score a punch on each other. Cars driving at highway speed screeched, honked, zoomed and braked around him — miraculously avoiding hitting them. (Ottawa drivers are, contrarily to popular opinion, not that bad. Things would have been different on the other side of the river had they ended on the 50. Drivers deliberately aiming at them would then not have been out of the question.)
Ravi had lost his EMP rifle sometime in the tumble. Aware that he didn’t have much of a way to take down the killbot otherwise (why had he left the paper trimmer blade at the office?), he tried to get back to the highway median. The plan: Let the cars drive past, get the gun back, shoot the bot in the chest.
The bot didn’t see it that way—single-minded in its determination to put Ravi six feet under, it fired a bolt of energy that Ravi narrowly avoided by rolling. It advanced, raised its fist again.
And got a big hard boot right in the chest, as Ravi kicked it staggering back a meter or two.
That did not hurt the killbot at all. But it sent him right in the path of a Freightliner 18-wheeler going at a respectable speed and that hurt the killbot quite a bit.
Not a kill, though—although, as the truck braked, at the killbot slid down under the cab in a flurry of sparks, as the wheels of the truck passed over the bot crushing its chest plate, it didn’t take much more to do the job.
Ravi had the five seconds he needed to find the EMP rifle, run back to the bot, shoot it point-blank in the chest, see how it went limp and immobile, and leave the scene without further elaboration.
As he sped back east, toward Michel and the train, he became aware of a slight buzz on his left side — the last killbot was somewhere in the suburbs north of Jeanne d’Arc. Somewhere near Michel’s house.
“Michel, how are you doing?” he asked through the suit’s communications system.
“The train is nicely snug at Place d’Orleans station. Couldn’t make it up the grade, rolled back to the station. Many unhappy passengers saying they’ll call the mayor.”
“You feel the vibrations from the last bot?”
“Rushing in that direction.”
So did Ravi. Last killbot to go.
He raced off the highway, into the twisty streets of the subdivision nested between the 174 and the Ottawa River. An older neighbourhood, nicely mature with fully grown trees, ravine-defined parks, kids playing in the streets and quiet people living happy lives. Clearly, no place for a killbot sent from the future.
Unfortunately, not really a good place to dispatch a bot either — no industrial smelters, cryogenic trucks, vats of acid, military base armory or construction sites handily equipped with a stack of explosives.
What was left? Dunk it in a swimming pool? Drive over it with a lawnmower? Bore it to death with a bottle drive? Ravi didn’t know. He was back to the original plan — shoot it with the EMP rifle as often as it would take. Showdown on Taffy Lane, the media would call it.
He kept racing toward the buzz: Rudely jumping over people’s backyards, racing across streets, ignoring the disapproving tut-tuts of retirees concerned about falling property values.
The buzz got louder, and he slowed down in the middle of a nondescript street that looked exactly like a dozen other Ottawa neighbourhoods. Where was the bot?
With an uncanny sense of drama, the killbot stepped out on the street, emerging from behind a parked white van.
Maybe it was going for a Western-style Showdown at High Noon kind of thing. Except that it was nearly six, and Ravi was incredibly tired of it all. The suit was probably running out of juice, and he himself was on his last legs. He didn’t have the patience for this.
The street was deathly quiet.
A plastic bag tumbled between Ravi and the killbot.
The killbot raised its fist.
But Ravi fired his rifle first.
The killbot went down like a sack of potatoes.
Ravi advanced cautiously, making sure he wasn’t in the line of fire of the killbot’s fists, not quite trusting that it would be that easy. He put another shot in the bot just in case, then moved closed and put another shot in the bot’s chest at point-blank range.
Triple tap—it’s the only way to be sure.
The bot kept not moving. For the first time in what seemed like forever, the suit didn’t give him any buzzing sensation to indicate where the other bots were.
Maybe it was over.
He heard someone jump next to him.
“Hey, there, you, okay?” said Michel.
Ravi stumbled to the white van and slid down its side. Now that it was possible that everything was over, he suddenly felt awful. Caked with dirt and sweat. Clearly ready for a few days off.
“I get you.”
Michel also slid down the white van. He looked as Ravi felt.
“All over. I’m guessing someone in PCO is scrambling to get that Shield up.”
“Yeah, I’m getting tired of saving the world.”
“If it’s part of the job description, I’m calling the classification team.”
“We are getting paid the big bucks, though.”
They exchanged a fist bump.
“Barbecue at my place this weekend,” said Michel. “Bring the kids.”
They heard a police siren. Then many police sirens. Ravi removed the suit’s shroud, threw his EMP rifle in front of him, and kicked it to the middle of the street. Michel did the same.
“If we’re done with the briefings.”
“Something tells me that they won’t want to drag this out.”
Groaning, they got up and staggered to the middle of the street, keeping a respectable distance between them and the weapons, and the immobile killbot.
They raised their hands and waited for the inevitable paperwork.
Epilogue – The Only Reward for Good Work
Three days later
Michel was right: It didn’t take this long that time. Whatever public anger there was about the Mayhem in East Ottawa (as the early newscasts had it) was tempered by the lack of casualties, rather entertaining footage of two black-suited special operatives (as the government called them) battling a few rogue drones of unknown origins (as would be impossible to keep calling them) and, behind the scenes, some red-faced embarrassment at not activating the Shield in time.
While the status of the Shield was a state secret far above Ravi and Michel’s current security clearance (the argument that their future clearance would allow it had not survived the argument that you don’t get access to documents while you’re undergoing the sure-to-be-fine security clearance process — the RCMP had been quite clear on the precedent), someone somewhere had deliberately leaked to both of them that elements in intelligence agencies had argued about the security risks of activating the Shield and were now hurriedly pretending they had never suggested such a thing even as the PMO had driven through the Shield’s activation.
In the end, two complete debriefs had done the trick for Michel and Ravi—the suit’s cameras had recorded the rest and the government was eager to get all of this past them. It remained uncertain whether the conspiracy theorists asking the government for answers would carry the day and force a public inquest that would either blow open the existence of The Shield and assorted concepts, or if the government would stonewall on national security long enough to get this to blow over. Maybe some celebrity scandal would grab all the headlines after a while.
In the meantime, Ravi and Michel were still anonymous, and the heaviest cross they had to bear was Jasmine suspiciously eyeing them on a continuous basis. Even right now, at a weekend barbecue meant to let everyone relax.
“What happens if the media blows this open and we’re dragged into it?” asked Ravi over a beer while Michel was busy grilling.
“Then we answer questions from parliamentarians, endure the attention and go back to our quiet lives once it blows over.”
“Is that reasonable? A lot of nuts out there.”
“And none of them are interested in low-level IT nerds. They want the prime minister, not flunkies.”
“And what if the future is revealed?”
“The future will be revealed. It’s only a matter of time.”
“You’re being disturbingly serene about it.”
“I’m probably retiring sometime this summer. You saw the back pay we received. There’s nothing stopping me from buying a cottage in the deep woods or renting one while I get mine built.”
“Nice of you to have an out.”
“Mine’s more out-there than most, but yours doesn’t have to be. The government will take care of us despite its worst intentions — for once, someone else taking all the glory for our action will be a good thing.”
One year later
Michel, as usual, had been right: The initial sharp interest in what exactly had happened in East Ottawa had died down, faced with unanimous stonewalling about national security. A flurry of articles had somehow popped up about foreign research in androids with military applications. Then Ottawa had gone against Calgary in the Stanley Cup playoffs and everything had been forgotten, except for a strident conspiracy fringe that no one was taking that seriously. Everyone was clearly convinced that there was something there, but no oxygen meant that it was replaced by something else. No big Machiavellian plot—just how things went.
Meanwhile, Ravi had been told (and told to forget) that elements in PCO were working on a gradual-release strategy to expose what they knew—bringing experts in to work on the data received from the future, building a change management strategy to minimize the public outcry, setting up a Future Threats Directorate in CSIS to take care of anything similar. There was concern that other countries would spill the beans first, that a security leak would blow everything up before everyone was ready.
But Ravi didn’t care. He, too, had decided to retire soon after Michel. Multi-Core was already a success out of the gate, so he didn’t feel any particular attachment to seeing the job to the end. His plans were to remain gainfully occupied by working on his video game until completion, then think about what they could do. He’d be home to take care of the kids while his wife kept working, and they would have enough to be all right.
One year and a half later
Jasmine and Min-Jun got married. Michel and Ravi were honoured guests — but since they were still all regularly in touch, in wasn’t such an unusual get-together. It was, however, a lovely ceremony. Djamila wept in joy, Ravi had a big lump in his throat and the wedding cake had a big cartoonish manticore on top of it.
Karen also got married, but nobody cared as much. In fact, neither Ravi nor Michel were invited (as they were of no use to her anymore) and they only heard about it a few weeks later.
Two years later
SteamDB Info: Busybots
Release Date: Nine Months Ago
Last Update: Yesterday
Busybots is rated 230th best Steam Hidden Gem, with 99% positive reviews from 83 gamers.
Two years and a half later
“Hey, Ravi,” said Michel, “remember what I told you last weekend? The team is expanding, and you’re still number one on our wish list. We’re really cracking open the math behind the Shield, and we need coders. Are you in?”
Three years later
“My fellow Canadians, the Shield is a lock, and we’ve got the key.”