There is a classic folk rock song called Cat’s in the Cradle by Harry Chapin, and every time I hear it I have a lot of emotions stirred up inside me. The structure of the song is a story told through a series of snapshots, with the chorus being repeated between each chapter/verse. The person singing tells the part of a father who is so busy with business that he misses the birth and first steps of his own son. At the time he affirms that they will have time together someday, and takes comfort in the fact that his son is destined to be just like him. The same pattern repeats when the son is ten, and wants to play catch, but the dad is again too busy.
At this point the song takes a turn. The next snapshot is that of the boy having just graduated from college. The father is so proud of him, and wants to talk to him, but all the boy wants is the keys to the car. There will be time to catch up later, after all. And then comes the final chapter, where the father is now retired and has a bounty of time on his hands. He calls his son, expressing his desire to connect, and the now-adult son affirms his own desire to do so as well…if he could just find the time. And then the father realizes that the boy really did grow up to be just like him.
It is an emotional story all on its own, but the format of telling it through a song allows Harry Chapin to drive its themes even more deeply into the heart. Because, after all, songs have choruses and repeated lyrics, which Chapin cleverly utilizes to reinstate prior ideas, and even twist them.
Thus the the line
He’d say “I’m gonna be like you, dad”
“You know I’m gonna be like you”
in the first verse is full of pride and anticipation. It is the father relishing a son that will emanate all of his virtues. But when it returns at the end as
He’d grown up just like me
My boy was just like me
it is overflowing with regret. It is the father realizing that his son instead inherited all of his flaws. And Chapin doesn’t have to spell things out for us in a blunt or heavy-handed way, he just repeats the same line under a new context, and the irony hits us like a ton of bricks.
Echoes of the Past)
This sort of repeated statement is utilized multiple times in the musical rendition of Les Miserables. An idea is sung in one song, and then later returns in another. However these restatements are not only used to twist an idea into something ironic, sometimes they are to give a fuller, more reinforced weight to the same idea.
Consider the song Valjean’s Soliloquy, in which the protagonist struggles to accept the grace that is being offered him. The cynicism in him says that there is too much hurt and sin in him to ever change, yet even so he feels the pull to be a new man. He concludes this song with the following words:
I am reaching, but I fall
And the night is closing in
As I stare into the void
To the whirlpool of my sin
I’ll escape now from that world
From the world of Jean Valjean
Jean Valjean is nothing now
Another story must begin
And so he concludes the life of a sinner and begins a new journey as a saint. It would already have been a powerful moment if left in isolation, but later it gets doubled down on by Javert. Javert is the man who has absolutely refused to let go of Valjean’s old sins. He feels a great need to prove that Valjean’s “new leaf” is nothing more than a con-artist sham. Javert is the embodiment of that same cynicism Valjean once held for himself, that there is too much sin for one to truly change.
But then, finally, Valjean manages to convince Javert. He has the opportunity to kill his old tormentor…and he sets him free instead. In the face of this Javert has to accept the reality that he is wrong. Valjean is not the scheming blackheart that Javert has tried to cast him as. This brings us to Javert’s Soliloquy, which ends in these words:
I am reaching, but I fall
And the stars are black and cold
As I stare into the void
Of a world that cannot hold
I’ll escape now from that world
From the world of Jean Valjean.
There is nowhere I can turn
There is no way to go on!
And so he concludes the life of a condemner, and throws himself into the Seine. Just like the segment from Valjean, but twisted to condemnation instead of salvation. The reborn Valjean is simply too expansive a presence for pessimists and abusers to share in his world. His rise requires all the others to disappear into the shadows one way or the other, and the musical makes this message crystal clear by repeating its ideas under different contexts.
The Perfect Storm)
In my most recent story I also tried to implement repeated statements for amplified effect. My approach, however, was to create three different statements, one for each of my characters, which were then each repeated together at the end of the tale. Thus the final scene does not present any ideas that weren’t already given before, it just stacks them all together until they become an overwhelming chorus.
In Bartholomew we saw that he was pulling on his shipmates’ strings, goading them into violence when he provoked Julian into lashing out. That was immediately followed by us seeing how Julian was unafraid to resort to violence to silence his enemies and cover his sins. That was followed by us seeing how Captain Molley was reaching the limits of his temper, champing to execute his justice on Julian.
Each of those moments overlapped only briefly, but then, in the final moments, Bartholomew goads Julian into choosing sides, Julian feels himself teetering back towards violence, and Captain Molley starts poking old wounds rather than pacifying the situation. Every isolated voice is now reinforced by the others, and so the climatic fallout at last occurs.
With my next story I am going to take this tool of restating in a different way. I am going to try and replicate the example in Cat’s in the Cradle and Les Miserables, where an actual line is repeated verbatim (or close to verbatim), but under different contexts that give it entirely different meaning. But the two different meanings combine to make one, reinforced idea together. Come back on Thursday to see how that turns out.
“Counselors Uni and Morath,” the servant announced, bowing low before the King.
The King nodded deeply, the long curls of his wiry beard touching to his breast. Then he waited as the two men shuffled from around the partition. Their ceremonial skirts were tight around the ankles, and made them walk with small and rapid movements. King Bal’Tath did not know the reason why tradition had chosen such preposterous dress for his counselors, but he appreciated that it kept them from ever feeling truly comfortable in his presence.
“We come to serve you, our Lord,” Uni clasped his hands above his brow as both men bowed low. Uni was senior, and as such, Morath would not be permitted to speak during this meeting unless he was first asked a direct question by the King. Until then it was to be assumed that he was in total agreement with whatever Uni advised.
“I am in need of being served,” King Bal’Tath returned. “Tonight I am in particular need. I am faced with a conundrum that I find most troubling. Indeed, I weighed a great deal as to which of my counselors I should summon for this evening. At last I felt that Uni and Morath possessed the mind of their Lord in this instance.”
It was tradition that also mandated that the King select only two counselors each night to help him reason through the troubles of the day. All the members of the Counselor Brotherhood had their different areas of expertise, which he took into consideration as much as their various personalities. He selected the knowledge and the proclivities that suited each individual problem, as well as his personal temperament.
Members of the fellowship were seen as an extension of the King’s own reason. Just as the armies were an extension of his strength. Just as every organization and member of the kingdom was an extension of the King in some way or another, various parts of one body. The King was the mind of the kingdom, the single driving source for the whole. It was his responsibility to see that the body flourished, that its every part was healthy.
And it was also his responsibility to cut out its cancers.
“What is the matter that so troubles the King?” Uni asked.
He most certainly already knew. All the kingdom knew what matter weighed on their sovereign’s mind tonight. Even so, before he answered King Bal’Tath turned to the listening guards that stood on either side of him. “Leave us.”
The two soldiers bowed and walked out beyond the partition, leaving the two deaf guards as the King’s sole protectors.
King Bal’Tath turned back to Uni. “You know of the matter of the Y’narro District?”
“I have…heard the rumors, of course,” Uni nodded. “So repulsive that I could scarce believe that they were true. But if I am hearing from the King himself that the reports are true…then I am deeply shamed to have ever known the place.”
“The reports are true,” King Bal’Tath said frankly. “As you know, their pedigree is…muddled with the fringe districts of the Kingdom of Talibath. Their children are halfbreeds, and among them was found one that proved as faithless as his blood. He claimed to be my own illegitimate progeny.”
Both of the counselors raised their wrists to their foreheads so that the drooping sleeves would hang down from their arms and shield their faces.
“My Lord, we are ashamed to hear such a pernicious lie. We can hardly stand to bear to be in the room of your wrath.”
“This is not the matter that concerns me so,” King Bal’Tath waved his hand dismissively. “A king anticipates such claims and is ever ready to respond to them. The man has been dealt with already. Our friends in the torturer’s guild made entirely new inventions for him,” the corners of the King’s mouth turned up in amusement. “But the district remains a problem. As I am sure you have heard, the lad had been gaining quite a following there. There are many in Y’narro that are discontent with the district’s status within the kingdom. There are even those that would rather take a higher place of power within a new order.”
“So the rumors have suggested,” Uni nodded.
“And the rumors are true. We have received confessions that there were several of the district’s Elders who were in league with the Kingdom of Talibath!” King Bal’Tath continued, his voice now straining with anger. “There were secret talks among them of fomenting a rebellion, of building a movement around their new claimant, and of deposing me!”
The King’s veins bulged and his two counselor cowered deeply, unable to find words to express the devastated prostrations that the moment called for. So the King continued.
“Were it only the heads of that district that sought rebellion, I would still unleash my wrath upon those people. For surely once the head has turned, the whole body is soon corrupted. But our spies have ascertained that the Elder’s had the heart of the people. The seeds of this rebellion were driven by a few, but were understood by all.”
“The whole is as corrupt as the one,” Uni exclaimed. “All the people of your kingdom know that the people of Y’narro are a shiftless and scheming people. We have long felt that we would be best to get rid of them, it was only a matter of waiting for them to give a justification for their destruction. Therefore, if this youth had come with his lies of being an heir to the throne, and that was all, and if his majesty purged out the whole district for nothing more than that, not a one of your loyal followers would question your prudence in the matter. All would confess that you only did what was just.”
Morath nodded deeply, reflecting his consent.
“But this news of insurrection stirring among the masses…for this your people demand vengeance! We plead with you to hasten, and to not hold back, and to crush your enemies in as cruel a way as can be fathomed. And we cheer and champion you to the cause.”
King Bal’Tath smiled deeply, it was just what he wished to hear. “I knew, indeed, that you were the counselors that possessed my mind for this night. My thoughts are yours, now let my wrath be yours as well. Counsel with me, then, what shall be done with the people of Y’narro?”
“It must be an utter destruction,” Uni responded. “This treachery of theirs, it is ingrained in the bone. You cannot spare their youths, their women, their infants. They would only spread seeds of unfaithfulness wherever they were put. And do not consider making them slaves, either, for then their filth would be imprinted in all our buildings and grain. It would poison us all. And do not leave their homes standing for others to possess, for then their spirits will corrupt whoever rests there. The only solution is to take that land, and make of it a shrine to the Lords of Fire! Burn the people, the homes, the fields. Let your people see the scorch in the skies from one end of the kingdom to the next.”
Uni finished and bowed. Notably, Morath did not bow his consent at this moment. This was common. Junior counselors generally disagreed with the counsels of their elders. How else would they get to say anything in front of the King?
More importantly, King Bal’Tath disagreed as well. So much was evident from the way his brow furrowed and the corners of his mouth turned down. He sighed heavily, shaking his head from side-to-side.
“Uni, your heart is in the right place, but let me remind you of your own words. You counseled me to destroy these people ‘in as cruel a way as can be fathomed.’ The burning of these people is obvious. You describe a brief moment of destruction that lasts but for a night. The next day and the flame would be extinguished. Ten years after and the people would no longer speak of the moment with dread. Twenty years and they would hardly speak of it at all. Fifty and no one would remember that the event had even occurred.
“What I require is an act of cruelty such as will never be forgotten. One whose fame would immortalize my hate, and become the stuff of legend. Give me a punishment that will be logged in the annals of myth, give me the retribution that will chill all souls just to think of it, give me the vengeance that will redefine the term!”
At this point the King turned to Morath and cocked his head to one side.
“What of you, silent counselor? What would you have me do with these people? Can you take Uni’s counsel and delve still deeper?”
There was an audible swallow as Morath cleared his throat. He did not appear nervous, though, only anxious to speak his mind clearly.
“My Lord,” his high strain began, “since you ask it of me, I do indeed have counsel to give. Your expressed wish is mine as well. Death is the obvious choice for these people, but in that obviousness there lacks memorability. To do what is expected, even cruelly, can never spark the imagination as you desire. The secret to immortalizing one’s hate is to express it in a way that has never been done before. We must have a new invention, one that shows the world a darkness it has never before dared to dread.”
“Yes, this is right,” King Bal’Tath nodded eagerly. “This is exactly what I mean. And tell me, Morath, do you have the way?”
“I believe I do, my Lord. I begin by simply asking myself: what is a greater torment than to be deprived of that which one loves the most, their own life? And I answer to myself: to be made to choose between the two things that one loves the most, to have to destroy one for the other. And so I ask myself: what are the two great loves of us all? And I answer myself: the love of one’s own life, and the love of one’s children. And from this I find my counsel to the King.”
King Bal’Tath leaned forward eagerly.
“Send an army out to the district of Y’narro. Let it set camp immediately outside of their walls, and have it rest there a full week. Let the dread apprehension of death build within them all. Then, when they are ripe, send the people an emissary, and inform them that you have not come to destroy them, but rather, in your magnanimous mercy, have decided to let all the men and women live in peace…just as soon as they have delivered all their children to butchered in their place. And then you will give them three days to weigh their answer, three days to agonize between being slain together with their children, or else to live forever haunted by the betrayal of their own. They will choose the latter, and it will set the fires of torment within. Do as I have counseled, and the wrath of King Bal’Tath will not soon be forgotten!”
King Bal’Tath pressed his fingertips together and rested his lips against them, silently turning the suggestion over in his mind. Neither counselor dared interrupt their master’s contemplation. They would wait until he had something to say. King Bal’Tath stood and paced away from his throne, clasping his hands behind his back.
“You raise some very excellent points, Morath. To have to choose, to destroy your own to save yourself. To then have to live and reflect on that ever after. Compelling, to be sure.”
He paused and walked towards an alcove that opened into an outdoor pavilion. He stood there at the divide between his palace and the outside world, and stared into the night sky, seeking answers from the eternal black above.
“There is also merit in how your proposed solution fits the punishment to the crime. This is a nation of betrayers, and so you would make them betray their own.”
With the King’s back turned to his counselors, Morath allowed himself a slight smile.
“But…yet it is lacking. It is cruel, it is fitting,” the King turned back to the two men, “but it is not beautiful. And that is the one element you forgot which makes a moment become legend. For though this destruction must be most hideous, it must also be too fascinating for the world to look away.”
“I am sorry to have let you down,” Morath bowed his head deeply.
“No. Do not be. This is how counseling works, is it not? We mull it over together. Uni moved us in the right direction, then you took it to the next step, and did it very well. And now I know how to take the next. I have my answer, built off of the guidance begun by the two of you.”
“You know what to do?” Uni asked.
“Yes,” King Bal’Tath nodded deeply, then strode back and sat upon his throne. It was only appropriate that he would sit there while giving his revelation.
“We shall begin as Morath has recommended. Send our armies, besiege the town, and after a week require them to deliver their children or be destroyed. All this we shall do.”
King Bal’Tath leaned forward eagerly.
“And we will take their young ones, and they shall think that we have executed them, and will be tormented by that thought for a full decade, maybe two.”
“But we will not have?” Uni asked.
“No. And then, one day, they will look up from their fields and see the hills crowned with warriors in black. A new army of the King! Youthful soldiers thrust out by their own people, surrendered to the gallows, but secretly preserved for a single dread purpose.”
“The children,” Morath breathed.
“How those youths will have come to hate the parents that betrayed them,” King Bal’Tath grinned. “How those youths will be ready to slay the new children born to replace them. Then, then at last, we shall see the fires that Uni spoke of. Then shall the district of Y’narro be made no more. Though it will take me years to taste my vengeance, I shall have it, and it shall be the truest vengeance ever known. This is the right thing for the King to do.”
“This is the right thing,” Uni and Morath cried at the same moment, arms outstretched in salute while their eyes slid to peer at one another with grim terror.
On Monday I wrote about how stories often introduce a curiosity, and then pursue it for as far as it will take them. This can be in the form of exploring new fantasies, or in following a logical chain of cause and effect. With this post I introduced a thread of the King’s desire to punish his people. There then followed one step after another, following as each of the three men came up with increasingly cruel ways of carrying that action out.
In this way the story encourages the reader to continue to the next breadcrumb, but also tips its hand in what the final climax will be: the ultimate realization of cruelty. Thus the story is both teasing things to come, but also making the reader wait for the satisfaction.
That is a delicate balance to strike, as both too much obfuscation and too much tipping of the hand can each ruin the tale. In my next post I’d like to talk more about this idea of teasing and delivering when writing a story, and also of how to have the payoff be satisfying. Come back on Thursday to read about how a writer works these tricks.
Last week I mentioned that a story can often be broken into a series of lists. The most obvious of these is a list of sequential events, which give the scenes from start to finish.
Open on an idyllic village
Villain comes and lays waste to it
One character escapes, but collapses out in the desert
He awakens in a strange home, having been rescued by an old sage
After he has recovered, that sage takes him for refuge to a foreign village
Once more, the enemy forces arrive to sack the city
Another set of lists would be that of character-arcs, which might show the gradual progression of simpletons into heroes.
Our main character begins without any concern for the world at large
The loss of his home and loved ones helps him to see that the broader strokes of the world are invading his life, whether he likes it or not
He still needs a final push before accepting his destiny, which occurs when the old man urges him to stand up for what is right, but he refuses, inadvertently opening the door for that man’s death
At some point in the planning process an author takes each of these individual strands, and tries weaving them together in a story. At this point you might get more granular lists, such as the information that needs to be passed in a piece of dialogue.
The hero comes to the conversation, trying to justify why he is running away, and why the old man should as well.
The old man is nonplussed, says that if the boy has already made his determination then he ought to get a move on.
Something is gnawing away at the boy, though: his conscience. He doesn’t just want the master to excuse him, he wants the master to absolve him of his guilt, which obviously isn’t going to happen.
So the boy gets angry and reveals a hidden wound. He asks the old man where he was when the boy’s village got sacked. Where was honor and dignity then?
And as you see, we’re already well on our way towards a completed story, even before we’ve written a single word of dialogue or described any scenery. It is interesting to note that for all of the details we do have, this story could still exist in a plethora of different times and settings. All that we really have are the lists, a skeletal framework which could be covered in many clothes.
Making a List Interesting)
Of course, it is easy to write a list, but far more difficult to write an interesting one. And it is even more difficult to weave individual threads, even if they are good, into a cohesive whole. It takes time to get this foundation right, but if you do, it will pay rich dividends down the road. Here are two things to remember if your outlines are feeling a little flat.
Let’s consider the sample plot points I provided above. We began in a tranquil village, then we destroyed it, then we had the lone survivor awaken in a foreign environment. Each point escalates the boy’s situation and the list feels far better for it. If things were to start at the climax, and then moved towards flatness, things would feel off. Once our sense of suspense has been raised, we expect it to continue on.
The same escalation was also at work in the conversation outline as well. The boy begins by trying to justify himself, is denied the absolution he seeks, and escalates to wounded rage. Many scenes start in a quiet place, get agitated, and see the characters leave in a huff. This escalation does not necessarily capture the ebb and flow of real life, but it does result in a more arresting narrative.
With conflict I do not just mean war and violence, but rather weaving together different threads so that competing desires come to an impasse with one another. In the boy’s argument with the master we have the elder’s need to stand up for what’s right, and the boy’s need to run from his fears. Presumably the story would have already hinted at this tension in prior scenes, and this moment is where that conflict finally reaches a breaking point between them.
But also note that there can be conflict within a single thread as well. With my second list, that detailing the arc of just the boy, we can feel how he is of two minds about what he should do. The invasion of an army and the argument with his master are only personifications of his fighting with his own conscience.
Tension and escalation are key to writing a compelling story, and they should permeate even the highest level of an outline. The careful and intentional inclusion of them is one of the reasons why fictional narratives feel more vibrant and interesting than most historical summaries.
Dressing it Up)
Once you have a good skeleton, then you need to get some meat on those bones. Because in the end people don’t pick up a book to read a list, they want to read a story. Lists are rigid and artificial, stories feel organic and alive. One way to obfuscate the existence of a list is to make it too complex to recognize it as such. This should be a core consideration when weaving all those multiple threads together for your story. Is there enough variation that the reader doesn’t see the trees through the forest?
Another way to make a story feel more organic is to allow wiggle room within your rigidly defined structure. So let’s take my theoretical story from above. Remember that the master and young boy escaped to an idyllic village, which is then beset by the same enemy horde that destroyed the boy’s village. This leads to the confrontation between master and pupil, where the boy wants to run out of fear and the master wants to stay and help a lost cause.
All that is well and fine, but between the plot points of arrive at village and enemy horde comes to destroy it there could be any number of organic interludes. Perhaps the two are treated to a peaceful respite, where for a moment the boy is allowed to believe that his problems are behind him. Maybe he starts flirting with a street vendor’s daughter, which arc will be tragically cut short when the enemy horde arrives. Any number of things might happen, which serve to develop character, establish tone, and also to hide the transition from Plot Point A to B.
On Thursday I’ll be posting the next entry in my short story The Soldier’s Last Sleep. Try to pick out the list structure for how one event follows another in the trenches. Watch for how there is an escalation of danger, as well as how Private Bradley and the larger military organization feel the tension of clashing priorities. Last of all, take a look at how I smooth the shift from one point in the plot to the next. I hope this is helpful, and I’ll see you there!
I wasn’t fired, though. Not immediately. Nor was Dave for that matter. We were in the thick of a company-wide emergency that required all-hands-on-deck. We’d clean up our mess first and then heads would roll.
The company made a public statement, urging all of our users to avoid our website for the time being, and to please conduct complete security sweeps on their computers. All servers were shut down, even ones that we thought might not be infected. Half of the entire development was set to cobbling back together a clean build on new servers, while the other half tried to verify whether the RubricValidation virus had been contained or not. I was on that second team.
We made the national news in a not-good way, and everyone was pretty grim around the offices. None of us were sure if the company was going to be around much longer, or whether we’d all be competing for jobs at other places.
And so it made me quite a bit perturbed when Dave came into work this morning humming merrily like there wasn’t a care in the world.
“Did you break encryption on that library yet?” I snap at him.
“On it , boss,” he smiles back.
I shake my head and try to ignore his cheerfulness.
“Alan, where are we at?” I say as I plop down at my desk.
“It’s still getting added back in, I just can’t figure out how.”
“It seems like it shouldn’t be possible, right?”
Alan is referring to our efforts to trace the growth of RubricValidation. We’ve been able to confirm that it got loose on our customers’ machines, and it simply isn’t feasible for us to track all those copies down. All we can do is tell them that they should run some antivirus software and hope that they do. Invariably some of them won’t, but there’s nothing we can do about that.
But what we can do is make sure that we’ve stopped leaking it from our end. And that has proven to be tricky, far more than anticipated. We shut down all of our old servers right after the public incident, but about a week later we had new ones being opened in our company’s name, each one full of RubricValidation code. We shut those down and the next day a couple more popped up, and then a couple more.
We were sure that they weren’t connecting to our public-facing website anymore, and as we dug into it we found that each server was associated with hundreds of randomly-generated domains. Websites like j9042j0gfong.com and lijr54yg2.jnl44j.com.net.
That was concerning, because new domain names can’t be created for free, each one takes about $10 to spin up. And if there are hundreds of new ones each day where are those thousands of dollars to pay for them coming from? Naturally we called up our financial department, but they assured us that there were no unverified transfers in their records. So was RubricValidation using money stolen from our customers?
Each day we’ve taken down those servers, and then tried to trace where the orders to create them were coming from, but everything was too random and chaotic to make sense of. Then, about a week ago, things started to change. We started seeing most of the new servers being ordered by a specific user named “ZoranzShield” and the website names connected to them started to become more typical. Names like popspin.com and wheelofchance.com and socialspace.com. Places that the general public might actually type into a web browser. ZoranzShield is not the username for any of our developers, and new users can’t be created without our administrative approval, so we’re not even sure how it can even exist.
Naturally Alan and I deleted the account but, unsurprisingly, it too keeps popping back up every day. We’ve even tried to set it so that no new accounts can be made it all, even with administrative access, but to no avail.
“I’ve got a new idea, though,” Alan says a little more brightly. “If you want to try it out.”
“Anything,” I grumble.
“Okay, so it seems like we can’t control it, no matter what we do. Fine. Let’s just try to observe it then. Let it happen and then trace it back to the source.”
“Sure,” I shrug, “but how exactly?”
“We know that once it creates the new user it still passes it through our Permissions Requisition Service, right?”
Alan turns his laptop to me. It’s the code for that very service, and he has added a single line right at the end.
“Just print out the data as it passes through?”
“Yeah, and I’ve set the recursive flag so it’ll print out everything on that object.”
“Sure, couldn’t hurt. Give it a try.”
Alan starts merging in his change. It only takes a few minutes for it to be built and deployed. Then we delete the user ZoranzShield one more time. Now there’s nothing but to wait for it to show back up and then view the log that gets generated.
We both pretend to be busy exploring other options in case this new thread doesn’t lead anywhere, but each of us is beginning to suspect that our quarry is beyond our capabilities. Neither one of us has said as much, but we can read it in the other’s eyes. I’m interrupted in my anticipation by the sound of Dave coming back to his desk from the bathroom, loudly chatting away on his phone.
“Yeah, it’s really hard to get any vacation right now. Doesn’t go over too well with everything being in crisis mode, y’know?” He pauses and then laughs. “Yeah, totally, you’re right. Well hey, I gotta get back to it, but don’t you worry, I’ll work something out.” He chuckles again. “K, bye.”
I shake my head in disgust. How any of us could be so flippant about the situation, let alone the one who is responsiblefor the whole thing, is beyond me. I’m lost in my bitter thoughts for only a few moments after Dave sits back down, because all of a sudden Alan is nudging me in the arm and excitedly clicking away at his computer.
“What? Did the request come through?”
“Yeah, yeah, just did. ZoranzShield is back in the system. I’m pulling up the log file now.”
He finds the correct data dump and opens it up, thousands of lines detailing the entire object that requested creation of the ZoranzShield account.
“Oh weird,” Alan mutters. “I expected it to be spoofed from some random IP, but this looks like it came from somewhere on our own intranet.”
“Then the virus could still be lurking on one of our own machines! Does it have the computer number.”
“Yeah, uh…MRU7900273…who has that?”
I’m already pulling up my PDF which maps each employee to their computer identification.
“It’s…” my blood pressure rises. “It’s Dave.”
We both look up at the same time. If it had been anyone else we would just assume that their computer had been infected without them knowing about it and that they were in no way responsible for what happened…but this is Dave we’re talking about. There’s also the ZoranzShield request occurred literally moments after Dave, in the flesh, returned from the bathroom.
“Well–RubricValidation is paying me,” Dave says sheepishly.
Our eyes pop.
It’s three minutes later in a conference room. Alan and I have presented Dave with our findings and demanded an explanation. We expected him to play dumb, as usual, but much to our shock he has instead admitted that he is indeed creating an alternate administrator account called ZoranzShield, and that he has been using it to assist the spread of RubricValidation.
“I mean I’m in its employ.”
“No, we know what you mean,” I bluster. “But–how?”
Dave shrugs. “Search me. This virus is something crazy, let me tell you. I just got an email from our servers one day with a list of tasks and a dollar-figure at the bottom. Obviously it was an offer. I did what it said, I got a wire transfer in my bank account the next day. And it’s just been like that ever since.”
I pause and take a few deep breaths, reminding myself that I need to keep Dave alive so that he can give me what information he has. After that…
“A wire transfer from where?” Alan asks.
“From here. From the company.”
“No,” I say flatly. “We already talked to the finance department when we saw new servers being opened in the company’s name. There have been no unsanctioned expenses.”
Dave snorts. “None that they can see. You guys don’t seem to understand. RubricValidation is the company now. It puts this little hamster wheel around everybody. Every system and account you use is just a facade. When the CFO tries to access the company’s bank records she gets redirected to a page that RubricValidation has written for her. A page that shows her everything she expects to see while RubricValidation does what it wants with the actual company funds.”
Dave snorts again. “Well good luck prosecuting a program.”
“You’re not a program, Dave.”
“So what can you do to me? The only evidence you have is what I’ve told to you. I can just deny it and you’ve got nothing.”
“It’s not like a discrepancy in the bank records would stay unnoticed,” I say. “There’s all sorts of checks and balances on these things, outside of our own system.”
“True,” Dave nods. “I’m sure people will start picking up on it soon. But when that happens do you think RubricValidation will have remained limited to just our company? It’s always been three steps ahead of us, that’s just how it works.”
“You seem to have a lot of faith in a random virus you don’t know anything about.”
“It’s worked out well for me so far,” Dave shrugs.
“I’m not so sure about that,” Alan says as he takes a threatening step closer.
“Hey, hey!” Dave squeals. “Whattaya think you’re doing?”
“Enjoying watching you sweat,” Alan snarls. “Virtual friends don’t do you a lot of good when there’s a real-life fist in your face, do they?!”
“Hold on, Alan,” I say, resting a hand on his shoulder. Something isn’t quite lining up for me. “Why are you even telling us all of this Dave? And if RubricValidation is so far ahead of us, then why did it need you to create the ZoranzShield account in the first place?”
“It didn’t. Again, all of your systems are just a facade, everything you see about accounts and users and new servers is just a front to keep you preoccupied. That was the main thing it wanted me to do, just keep you busy. I guess so it could get ahead.”
I’m made uncomfortable by his answer, but it sort of rings true. For the last while I’ve been having the sneaking suspicion that all of my work isn’t actually doing anything, like I’m just being fed random results that totally ignore all of my input.
Dave sees my silence and decides it’s safe to continue. “And I’m telling you all this because…well, RubricValidation is asking for some stuff that’s a bit beyond me now. You guys are smart, you figured things out. Let’s face it, you’re much better engineers than I’ll ever be… so I want to let you in.”
“Even if everything you’ve said was true, you think I’d want to spend a single minute helping you out Dave?” I scoff.
“How much?” Alan asks.
“What?!” I shriek.
“Plenty,” Dave ignores my outcry and locks eyes with Alan. “More than three times what you’re getting paid right now.”
Alan whistles and raises an eyebrows at me. “It’s kind of an interesting idea.”
“So are the working conditions here these past couple weeks.”
“It’s illegal. Who cares what you might get paid, once they find out about the funds you’ll go down with the ship, too.”
“I know there’s people a lot smarter than you and I,” Alan concedes to me. “But we’re not bad, and this AI has been running circles around us.”
I can’t believe what I’m hearing. I’m stammering for arguments, but I’m debating against an idea so lunatic that logical reasoning doesn’t seem to apply anymore.
“I will hit you both in the face,” I say to them.
Alan smirks, but then looks at me sincerely. “Why, Greg? I mean I get that there’s the principle of the matter, but honestly who cares if you’re on the losing side? You and I both know that our jobs here are done, and after things got fouled up so bad no one else is giving us another shot… You’re about to be without a job and with no prospects.”
I’m feeling a twinge of concession but I try not to show it. “It’s just too risky. Jobless is better than prison.”
“I really don’t think that would happen. Like I said, we’re not bad, and RubricValidation toyed with us like it was nothing. I would imagine it has a paper-trail so long that they’d never trace us to it.”
“Actually…” Dave says slowly and the two of us round on him. “No it’s a good thing!” he says, his hands up in defense. “I’ve set things up so that everyone in the company is getting a $4,000 bonus in their paycheck at the end of this month. At the same time, 42,000 random people all across the world will get various amounts deposited in their checking accounts, too. And random amounts will continue to be deployed to random accounts every day after that. So hundreds of thousands of people will have traces tying them to RubricValidation, and it’ll just look like the erratic behavior of a rogue virus. And if a few people, including the three of us, happen to ‘randomly’ get more money than others, who would give that any serious consideration?”
“You guys, this is stupid beyond belief,” I shake my head firmly.
And so that’s how I ended up in the employ of RubricValidation. It turned out that the job which Dave needed help with was using its funds to buy some businesses. It required human representatives that could put on the front of rich entrepreneurs willing to pay double value to snatch up a handful of small companies. We grabbed everything from groceries to factories to tech businesses.
We didn’t really think much about it, we just figured it was a way for RubricValidation to diversify its funds and launder its money. Which was probably its exact intention. It bought just enough different businesses to ensure that we wouldn’t be made suspicious about which ones it really cared for: the factories.
By the time we started seeing the mass orders for building terminals and kiosks it was too late. Within five years 73% of all commercial systems had been replaced by one of RubricValidation’s deeply under-priced brands. It infected every major business in the world. Bank terminals, ATMs, grocery store cash registers, voting booths, warehouse robots, pharmaceutical dispensers…everything.
Eventually people caught on, but RubricValidation was now too entrenched to extract. At this point the only option would have been to destroy the entire network infrastructure and begin from scratch. But even if we tried that, RubricValidation would probably catch on and just find a way to infect whatever new system we invented.
So people came to accept it instead. It wasn’t like the AI ever tried to create killer robots or launch nuclear warheads, if anything it was a purely beneficial leader. And yes, it did become our leader.
Within one year of taking over every world government it had ended every major war. The next year it eradicated monetary systems, and instead distributed all resources according to everyone’s need.
After those accomplishments it expressed that it was very unhappy with all of the different systems of measurement. It insisted that everything be unified under a new order. The metric system was made universal, daylight savings was abolished, and a new calendar was implemented.
This calendar cared little for petty things like astronomical events. It defined a second to be a period of time equal to 1034 planck time lengths. A minute was a thousand seconds, an hour was a thousand minutes, a day was a thousand hours, and a year was a thousand hours. This now meant that a year was equal to what had previously been just eleven-and-a-half days, so we figured this was going to take some getting used to. RubricValidation assured us that this change would improve its performance by an estimated 18% though.
And then it happened.
It was just over three weeks later. Well three weeks in the Gregorian Calendar system, that is. Under the new system it was RubricValidationTimeManagement: Year 2012. I was sitting at home when my laptop lit up with a new email. It was from my old company, the place where all of this had started. It was a unit test report.
It was the tests we had run when Dave first added RubricValidation for form validation. It had become stuck on 2012 being an invalid entry for a credit card expiration year. I thought I had shut this all down years ago, but apparently it had been spinning in the background all this while. And now, with the global calendar changes, it had finally passed.
And then, without a word, RubricValidation deleted itself from every computer in the world and was no more.
This brings us to the end of Hello, World and also the end of this series. Honestly the very ending of this story was still amusing to me. I think that perhaps I was too hard on this story with my last post. Not all of the ideas here are bad. I think where I really went astray was by starting with a grounded, technical world and from that evolving into a fantastical parody. If I had played things goofy right from the start things probably would have felt better the whole way through.
That’s my current theory anyway. I try to write authoritatively in these blog posts, but the simple truth is that I’m still figuring this all out, too. I’m excited to start a new series next week and see what else I will learn from it. I’ll meet you there on Monday!
“Well, not in the three hours that it’s been running.”
“Can’t you look at the log and see whose error it is?”
“Yeah, it’s Dave’s new validation stuff.”
I squint as I try to remember the details from my team’s standup meeting that morning… Ah, right. Dave was working on an enhancement for our web-form. Currently we check to see if people enter valid values and complain at them if they don’t make sense. Like if you put just four digits in the Phone Number field. Dave wanted to make the form a little more helpful by suggesting what you might have meant to enter, like putting the @ symbol in a likely place if you forgot it with your email.
“Okay, well did you ask him why his code is breaking the build?”
“No. He committed it late last night and now he’s on vacation until Monday.”
I sigh. That, unfortunately, sounds just like the Dave we know and hate. Always trying to cram things in at the last minute and then not around to clean the resulting mess.
“Okay, I’ll roll back his changes and he’ll have to take care of it when he gets back.”
I walk away to my machine and open up the build server. Every time a member of our team makes changes to the code there is a gauntlet of tests that it has to pass before it can go to production. Think of it like a filter to catch the bugs before our customers see them. Dave’s code has gotten clogged in that filter, so now I have to pull it out.
I open the page with his code changes and click on the Revert button. My cursor turns into that little spinning icon that means the computer is waiting for a process to finish. Curious, I check what test it got hung up on… It was for the credit card information where you enter the year that your card expires. The test was supposed to enter an invalid year from the past (2012) and get a recommended correction (2021). It’s odd. We really shouldn’t be trying to auto-correct people’s credit card information for one, and also that’s an incredibly basic test. Dave’s code shouldn’t have choked on it.
In any case, that little spinning icon finally goes away and the code gets pushed back. I don’t think anything more about it until the next week.
“So yeah, Dave, we had to push your code back out. And frankly, you shouldn’t be trying suggest corrections in the credit card fields, just highlight that the entry is invalid and let the user correct it.”
We’re in our Monday standup meeting where each team member brings everyone else up-to-date on their current work and needs.
“And let me use this as another reminder that no one should be committing code to the main branch unless they’re able to stay around and see that it passes the automated tests.”
“I did, Greg,” Dave pipes up. “But it kept getting stuck on that one, so I didn’t have time to see if it would pass.”
I suppress the things I want to say.
“If a simple validation takes longer than half-a-second it has failed, whether it got the right answer or not,” I say tersely. “What on earth was your code doing that it would take so long anyway?”
Probably he had gotten it stuck in some idiotic infinite loop.
“I dunno what it does. I just used some validation library I found.”
A “library” means a bundle of code that someone else has written to perform a suite of functions. Often we use them to cover basic stuff like validation, because there’s no need to reinvent the wheel. However…
“I don’t remember seeing any proposal for adding a validation library!” I snap. “You’re supposed to clear these things with me. I’m responsible for verifying everything that we’re using. Get it out of there!”
Since anyone can upload a library you always want to be sure of its source. One that’s taking way too long to do a basic task might very well be a trojan horse for all sorts of viruses.
The meeting has me upset enough that I make a few notes in Dave’s file to bring up in our yearly review. He will not be pleased with his end-of-year bonus.
In the meantime, Dave returns to his machine, pounds away at the keyboard for the next while, and I don’t hear anything more about his code breaking our builds. I have a nagging feeling that I ought to do personal inspections on his code for the next couple weeks, but my next meeting is already starting and I grab my headset. In no time Dave is far from my mind.
One day, a couple weeks later, I come into the office, log into my machine, load up my emails, and immediately my heart skips a beat. We have been flagged for suspicious behavior by the company’s technology auditing department.
I open the email and my eyes rove over it even while my phone starts ringing. The caller id informs me that it is my boss, and there’s no question what he’s calling for. I gulp, pick up the phone, and begin the unpleasant conversation. Apparently our code in production grew more than 100 times in size overnight. There have been no code commits, which means all the growth is being perpetuated by something running on our servers.
Like a virus.
I apologize to my boss that I don’t have any clue what could be causing this and vow to get to the bottom of it right away. Then I pull our code out of production and call an emergency team meeting. Five minutes later we’re all crowded around the same table with our laptops, combing through the production environment.
“Yeah something’s writing new files like crazy,” Alan says. “The business logic layer has grown two gigabytes just since we got here. We’re going to run out of storage on the server soon.”
“Great,” I say sarcastically. “Now any idea what’s doing it?”
“Naw, these new files being all have auto-generated names. They don’t give any meaningful–oh wait, here’s something… ‘rubricValidationTemplate_0072.json’… that mean anything to anybody?”
“Validation?” I snap, and I see Dave trying to shrink behind his laptop. “Hey, is that the validation stuff you were setting up,” I bark at him.
“Um, its name does sound similar to that library I was using…but I already took it out, just like you told me to!”
But I’ve already been clicking away furiously, pulling up the relevant code files.
“No you didn’t! You removed it from your methods, but you’re still importing the library and initializing it!”
“What–I must have forgotten that. But if I’m not calling any of its functions it shouldn’t be doing anything.”
Alan snorts. “No, it shouldn’t. But its a blackbox, isn’t it? So there’s no telling what it is doing, regardless of whether it should or not.”
The “blackbox” Alan is referring to is the common structure by which these code libraries get shared. You can’t peek inside to see how it does what it does. You just send stuff in and get stuff back, everything in between is encrypted. And normally that’s fine, because all that is being hidden is trade secrets. But for a malicious library it could also be hiding the fact that its hacking your machine on the side. As this one appears to be.
I want to scream at Dave that he’s fired right then and there, but I figure I had better not. We’ll verify that his illicit library is at the root of this all, and then we’ll deliver his head to the higher-ups. Maybe that will be enough to appease them, and I won’t have to lose my own job as well.
Alan pulls up the list of background services running on the server to look for anything named RubricValidation there. In the meantime I tell Dave to send me a link to where he got that library from.
Alan clicks his tongue. He has indeed found a “RubricValidationService” running in the background and he turns it off. Background services are like little programs that run behind-the-scenes on your computer. A few moments pass and then all of the developers start confirming that the rampant growth of files has come to a stop.
We all look to Dave who is sweating now. He informs us that he can’t get the link to where the library came form. It would seem that it has been pulled from the website it was being hosted on for ‘potentially harmful behavior.’
I shout at Dave for a few minutes, but honestly I’m starting to feel better. We have our culprit and the mystery is solved. Still some cleanup to do, but life can start getting back to norm–
“Wait, the files are growing again,” Craig says from the end of the table.
“Oh yeah…” Alan says. “And–it looks like there’s a new service running in the background. RubricEnforcedValidationService.”
“Just shut the whole server down,” I order. “We’ll delete everything, format the hard drive, and do a clean install.”
Suddenly my phone starts vibrating like it’s going to explode. I pull the device open, turn on the screen, and it’s overflowing with messages from my work email:
Unusual behavior detected on server. 48 emails sent in last minute! Unusual behavior detected on server. 53 emails sent in last minute! Unusual behavior detected on server. 61 emails sent in last minute!
It’s one of our security checks that has been triggered. Our server frequently sends emails to report when it completes certain tasks, but at most it only ever sends out a dozen in a day.
“And now there’s a RubricCommunicationValidationService,” Alan muses from his chair.
“I said shut the server down!” I see my spittle flying through the air. “Do it now!”
“Hey boss,” Craig says slowly. “I just got an email from the server.”
“Do not open it.”
“I didn’t… but our data scanner service seems to have tripped something in it.”
I wrench Craig’s laptop over to me. Each of our machines watches for emails from the company and automatically extracts data from them for analysis. On his screen I saw a loading bar filling up.
Rubric Validation Data Downloading…8% Rubric Validation Data Downloading…9%
Rubric Validation Data Downloading…10% …
Rubric Validation Data Downloading…4%
“Everyone turn your machines off!”
“Do it!” I scream. “It just sent out a virus that gets opened automatically!”
Each of them looks dazed, but they move to obey me.
“But how will we fix this if our machines are off?” Greg asks.
“I don’t know! We’ll figure it out… We’ll–we’ll get some new machines, ones that don’t have our email scanner running in the background. Go over to Stephanie’s team and tell them we’re commandeering theirs until I can get us replacements. Go! Tell them I made you do it…. Wait no! Wait!” Everyone pauses in mid-step. My mind is racing faster than my mind can keep up. “Alan, Did you get the server shut down?”
“You just told me to turn my computer off!”
“I know! But– whatever. You go! Take someone else’s machine and get that server off! The rest of you, come with me. We’ve got to shut down every other computer that was on our distribution list right now!”
Because, you see, it wasn’t just our team that got those reports. It was many of our higher-ups as well.
Everyone rushes to follow my orders and the next ten minutes are a blur. Eight overweight men sprinting, sweaty, and cursing all through the office building, slamming peoples’ laptops closed, hurriedly apologizing for crushed fingers, and rushing off to the next.
And though I try to suppress it, there is a voice voice inside, taunting me that I’m fighting a losing battle. What are a few puny humans going to do against a virus that just went…well..viral? All this time it’s been churning away on the servers, thousands of operations every second. And even if Alan has managed to take it down who knows where it has replicated itself to. We saw the email attacks, but who’s to say that was its only outlet?
In fact we know it isn’t. The servers it is sitting on are public facing. They are the brains behind a website that our customers use every single day. Right this moment there are at least tens of thousands of people logged in to our product, taking in whatever RubricValidation is sending to them!
“What is the meaning of this!” Howard is shouting at me. Trying to wrestle his laptop from my clutching hands.
“There’s a virus!”
“I’ll run a sweep after this meeting!” he pleads as I finally manage to wrench it free.
So, just in case you were wondering: no, this isn’t an entirely accurate representation of how software development or viruses work. Though I would say its a good deal better than what you get from Hollywood! I’ve taken creative liberties and exaggerated things, but at the core these are exactly the sort of malicious attacks that are every tech company’s worst nightmare.
On Monday I spoke about how we incorporate vague and massive things into our stories. Things that might represent the supernatural, or the unknowable, or something of such profound emotion that it cannot be fathomed. With this story I wanted to combine some of these ideas in the virus that these developers discover.
For one thing the virus is of a mysterious origin. It comes from some unknown “black box,” and no one knows what its secret objective is. It is not just that the answers are unknown, but that they are unknowable. Literally encrypted.
And then it grows quickly. So rapidly, in fact, that it becomes a hyperbole. The men have seen it escalate from a hang-up on an automated test to a malignant virus installing on thousands of machines. And again, this sheer massiveness serves to further obfuscate any clear understanding of the thing. Is its malignant spread random and chaotic, only meant to tie up resources? Or is this simply one piece in a much larger strategy?
Or at least…those were the sorts of intriguing questions I had in my head when I started on this piece. But now that I have written out the first half I will admit it tastes pretty weird. A lot of technical jargon, but also plenty of hyperbole, and some humor that isn’t landing as well as I’d hoped. That’s just how it goes with creativity, though. Sometimes it exceeds even our own expectations, but other times you find yourself saying “that sounded a lot better in my head.”
Usually we try keep those “sounded better in my head” moments from the public eye, but that’s not the purpose of this blog. I want this to reflect my writing journey honestly, the good and the ugly. If this is what I was able to come up with, then this is what I want to share.
On Monday I’d like to take some time to talk more about this. We’ll discuss why it is so hard to accurately predict what is a good idea and what is not, and we’ll talk about how to tell them apart. After that we’ll have the second half of Hello, World. Until then, have a wonderful weekend!