[samir 485]%> make all cd src; make all CC='gcc' CFLAGS='-g -O ' CPPFLAGS='-D_BSD_SOURCE ' LDFLAGS='' MAKE='make' make: Entering directory `/home/builds/src' cd mm; make all CC='gcc' CFLAGS='-g -O ' CPPFLAGS='-D_BSD_SOURCE ' LDFLAGS='' MAKE='make' make: Entering directory `/home/builds/src/mm' make: ERROR: can't find file tags.c make: ERROR: can't resolve symbol _mmtag make: ERROR: can't resolve symbol _libtag make: ERROR make: ERROR make: ERROR
The build was massively broken. Not just a simple kind of broken, a misplaced semicolon or a misspelled method name, the sort of thing where you can read an error message, make a few fixes in the code and recompile. This was a really bad sort of broken: GCC was howling in pain, there were mangled dependencies everywhere and errors spewing all over the floor — it was the sort of help-me-I’m-melting kind of broken build that no software manager wants to hear about days before a project deadline.
“OK,” Tom said, scratching his four-days-old beard, looking over Samir’s shoulder at the console as errors streamed by. “Look through the CVS logs. Let’s see if someone checked in something funky last night. I need coffee. I’ll be back to help.”
Tom went down to the coffee room at the end of the hall. This was bad. This was really bad. They were so close to being done. The major bugs were worked out, the only bugs left were small and piddly, it was almost ready for prime time. The executives had been really on him to have something to show to the new owners back in Boston. Tom had been reassuring them all along that the project was great, it was fabulous, it was coming along fine. And now this.
The coffee was old and black and sludgy and appeared to be crawling up the sides of the pot. Just the way he and the other engineers liked it: if its not alive, it won’t keep you awake. Tom picked up the pot, tipped it towards his mug, and then paused. Eight o’clock in the morning and the build was all fucked up already. “I need a much bigger cup,” he muttered, putting the pot back down again.
He had a 32-ounce cup in his office, a trinket he had picked up at Comdex a few years back from some graphics company that was probably long dead. Trinkets like cups and pens and T-shirts are the archeological detritus of silicon valley companies; the fossil remains of companies that don’t or can’t evolve. Tom’s company, Oblinx, bought by UniMicro a mere two weeks ago, was in that class, a victim of excellent ideas but too little marketing done too late. Even now the signs on the doors were being changed, the new business cards were set to arrive any day now, and next week’s paycheck would come from the other side of the country. Soon all that would remain of Oblinx would be four boxes of extra-large Hanes beefy T-shirts.
Tom left his mug in the coffee room and went down to his cubicle to retrieve the cup. He hadn’t even been in his cube yet that morning. Samir had called him at home when the build broke and he had come straight in. Now as he pulled down the cup and dumped pennies and paper clips out of it, he had a chance to unlock his computer’s screen saver and glance at his email.
The usual nonsense had arrived overnight; meeting alerts, jokes from friends, much recreational typing from the managers at UniMicro, the HR woman in Boston pestering him about some 401K forms he had to fill out. But then the message from Andrea caught his eye.
To: tom From: andreag Date: Wed May 24 1999 02:32:45 AM PST Subject: FUCK THIS SHIT I QUIT
Uh oh. That was bad. Tom put down the cup and scooted his chair over to his desk. Pop up an Xterm window, log into the server, type a few commands.
[tom 4]%> last | grep andreag andreag ttyp16 fnord Tue May 23 20:45 - 02:46 (6:01)
Andrea had been in overnight, working. That wasn’t that unusual; like many programmers Andrea kept odd hours. And when they were on deadline the hours tended to get particularly odd. Tom typed a few more commands, and there was the smoking gun, there in the CVS logs: Late that night, just before she had sent the email, she had checked out eighteen files, and then checked them in again five minutes later. Right before the nightly build started. The comments when she ran cvs commit on the files were certainly clear enough:
[Wed May 24 02:25:12 andreag] Fuck you UniMicro. Fuck you all to hell.
Shit. Andrea had sabotaged the build.
Samir poked his head into Tom’s cube just as Tom was leaning back in his chair. “Um, Tom, I found the problem,” he said, looking nervous.
“Yeah, I see it too,” Tom replied, still staring at the evidence on his screen. “Its not like she tried to cover her tracks, is it.”
“Not at all,” Samir said. “She checked in garbage. Nonsense. The whole memory manager is gibberish. We *all* use that library. No wonder the build broke so hard.”
“Can’t we just back out her changes?”
“She also overwrote the CVS archives as root. She damaged everything. We’ll need to reconstruct it from backup.”
Tom nodded. OK, that was bad, but it wasn’t that bad. He had backups from just a few days ago. It could be fixed in a few hours, counting the time it would take him to go home and get the tapes. They would make their deadlines.
* * * *
Usually the reasons for Andrea’s occasional angry outbursts had much in common with most other engineers’ angry outbursts: managers were idiots, marketing people were idiots, all the other programmers in the group were idiots, the tools she had to use were written by idiots, and so on. But usually the angry outbursts were confined to a couple emails, maybe a few raised voices in conference rooms. Once there had been a keyboard flung against a wall. She had even quit a couple of times, but Tom always refused her resignation and usually after a day off she calmed down and came back to work. But for as long as Tom had known her (eight years, three companies, six projects, untold numbers of all nighters and deadlines — they worked well together, and tended to follow each other around to each other’s companies), Andrea had never turned her anger on the code. That would be like turning the gun on your own child.
Andrea, like everyone at Oblinx, had been upset when the company was failing, upset when it was shopped around, and upset when it had been sold to UniMicro: big, evil, possibly monopolistic UniMicro. She, like everyone, had been particularly upset that it had been sold so cheaply — but everyone knew UniMicro’s negotiating team were sharks and they knew wounded prey when they saw it. But they had been reassured by Oblinx and UniMicro’s executives that they would all get significant raises, new stock options in UniMicro, and that UniMicro would not interfere in the project. In fact, UniMicro would give the project the sort of marketing and sales support that Oblinx hadn’t had the time or the money to give it. Given the emotional investment most of the programmers had in the project, having worked so hard on it for so long, the chance to see it through to ship was enough to calm most of the anger. Even Andrea’s.
Which was why this particular blowup — and the form which it took — was such a mystery.
* * * *
Tom let himself out into the back parking lot, which was mostly empty. It was still early in the morning; most of the engineering team would not show up for a couple hours at least. This was OK by Tom; as long as they got their work done they could show up any time they wanted to. It was the silicon valley way.
It’d take him an hour or so to get home through rush hour traffic on 101, pick up the backup tapes and come back. If he was lucky he’d make it before too many more engineers came into work and found the build was broken. Samir would run interference while he was gone. Mildly he wondered if being bought by UniMicro meant that they would finally be able to afford an actual systems administrator, someone who could do backups and store them in an actual off-line tape storage facility. Seemed kind of odd for the founder of the company to be doing backups and storing them in a $100 Office Depot safe in his little Sunnyvale apartment. But hey; it was a startup. If the founder and VP of engineering doing backups meant that more engineers could get more work done, so would it be.
Getting to work early had one advantage; first choice of the prime parking spaces over by the grass island under the tree, where it was shady. Except for the tree, the Oblinx building was exactly like most other silicon valley office buildings. Generally when developers build office buildings in the valley, they take a bit of land, bulldoze anything already on it, put up a generic two-story office building with a red tile roof, surround it with parking lot, and plant Generic Drought-Resistant Northern California Landscaping.
The land the Oblinx building was on had this huge old oak tree on it, and for some mysterious reason the developer had let it stay, although he had paved all around it, creating the grass island in the middle of the parking lot. The tree rose up from the island, black and twisted, into the hazy silicon valley sky, towering over the sea of generic Japanese cars like an arthritic hand with far too many fingers. It was wonderful.
What was even more wonderful about it was that it was climbable. When Oblinx had moved in the programmers had acquired, Tom didn’t know from where and knew better than to ask, a whole lot of lumber, and had built a sort of tree house in the big old tree. The treehouse became a sort of refuge, a place to escape to when the stresses inside the office became too much. You went out to the tree to think, you went out to the tree to relax. The beer was served by the tree in the summertime for the traditional Friday afternoon get-togethers. Sometimes programmers slept in the tree if they stayed too late at work and didn’t feel like driving home.
Tom had parked on the far side of the tree, and as he passed underneath its branches he suddenly had a thought. He looked up into the branches of the tree, up at the platform.
“Andrea?” he said, barely raising his voice. “Andrea, are you up there?”
He waited a while, and was about to turn to his car when Andrea’s voice replied. “Yeah, I’m here.”
Tom put his car keys back in his pocket. “Have you been up there all night?”
“Yeah. I had a lot to think about.”
“I can imagine.”
Another long pause. “Can I come up there?” Tom asked.
“Its a company tree,” Andrea replied. “You’re a company man. I can’t stop you.”
Tom wasn’t used to climbing the tree, even with a low branch to start from. It took a few tries to do it, and he scraped his hands and banged up a knee doing it. Finally he worked his way onto the platform and painfully sat cross-legged across from a very tired-looking Andrea.
“That was really pathetic,” she commented.
Tom shrugged. “I spend too much time in front of the computer. Not enough time climbing trees.”
“You need to have better priorities in your life.”
“You’re right,” Tom agreed.
Andrea had her back to one of the larger branches of the tree, and was looking out towards the building. She would have seen him going into the office in the morning — and seen him coming out again. She had to know what was going on inside.
“So,” Tom said. No more small talk. “You checked in some strange stuff last night.”
Andrea half-smiled, and then her face went blank again. “Yeah,” she said, looking down at the floor. “I probably screwed up the build something fierce. I’m sorry about that.” But then she frowned, looked back up at him, and shook her head. “No. No, I’m not sorry.”
Tom took a deep breath. “I’ve known you for a really long time. Usually when you’re mad I have a pretty good idea why. This time, you’re way madder than I’ve ever seen you, and I don’t have a clue. I figure it must be something important. You wanna at least give me a hint, here?”
Andrea looked straight at him, searching his expression for something. Her eyes were ringed with red, but her look was still intense and wary. He held out his hands, a help-me-out-here gesture.
“They haven’t told you yet,” she finally said, as if coming to a decision. “You’re just as fucked as the rest of us.” She closed her eyes and shook her head to herself as if she couldn’t believe it.
“What?” Tom quizzed. “Who’s not told me what yet? What are you–”
“Our illustrious CEO and the guys at UniMicro are shutting us down.” Andrea interrupted, bitterness in her voice. “Today. At noon. They sold us out, and now they’re shutting us down.”
Tom opened his mouth and found he didn’t have a thing to say. He stared at Andrea as if she had grown tentacles out of her ears.
“That was not part of the deal,” he finally said. “I can assure you I have heard nothing –”
“*I* heard them.” Andrea insisted, leaning forward. “They had a meeting last night. They came into the office at midnight. Johnnie, Frank, Ted, all of the exec guys, and the UniMicro guys from Boston. They snuck into the office, and they didn’t know I was in.”
“So how did you get in on this meeting?”
“You know how the wiring closet butts up against the board room?” Andrea grinned. “You know how there’s that space up near the ceiling? If you bring a chair in and stand on it you can hear everything.”
Tom gaped. “You stood on a chair and eavesdropped on our managers from the wiring closet?”
“I was just curious,” Andrea said. “They don’t tell us *anything* since the buyout. Things have totally changed. They’ve cut us off completely. Don’t tell me you don’t hate that, Tom, because I know it bothers you. You started this company, you built it from nothing, you brought in those bozos to turn it into a real business, and now you’re so far outside the loop you can’t even see the inner circle.”
Tom tried to keep his face passive, tried to act the good manager, but she was right. It did bother him that the executives seemed to be off making their own deals. It did bother him that it felt like his company was no longer in his control. And if this news was true, then it was much worse than he had thought. Much, much worse. Tom felt a small knot begin to build just under his breastbone. When the buyout talks were going on he had felt that knot, felt that something was wierd and fishy, and had ignored it as nervousness. Its not every day you get to sell a company. “OK,” he said, carefully. “I didn’t know any of this. What exactly did you hear?”
Andrea frowned again, obviously not enjoying being the bearer of bad news. “UniMicro has no intention of keeping us separate. They’re going to shut us down. They’re going to take our code and give it to a project in Boston to incorporate into another product. They don’t need us. They’re going to lay us all off. Well, you’ll get to stay for the transition.”
The knot got bigger. “Our executives can’t want that. They can’t have agreed to that.”
“Our executives will get paid off,” Andrea insisted, angrily. “They get new jobs in Boston. They get signing bonuses, relocation bonuses, big options in UniMicro. They get plenty enough money and perks to make up for any losses they took in Oblinx. That was part of the deal. That was how UniMicro got us so cheaply. Our executives get everything. What do you get as the company founder, eh?” Andrea asked.
Tom swallowed, and the lump throbbed. He hadn’t gotten a lot. Oblinx had been in trouble, financially. They hadn’t started selling the product early enough and their burn rate was too high. That was Tom’s fault, and he admitted it, but once he had recognized it he had hired a management team to try and save the company. But they had run out of money. When they couldn’t get another round of funding and were facing having to shut down, the CEO had started looking for a buyer. The UniMicro deal had been the best they could find — or so he had been told. By his own executive staff. Two of whom had come from UniMicro. And who, it now seemed, were not negotiating in the best interests of the company. Oblinx had been sold for crumbs. Once Tom was able to sell his shares and pay off all the debts he had incurred in starting the company he might be able to buy a car. A small car. Not even a German car. “Oh, God,” he said, putting his fists against his face. “This is insane.” He said, dully. “They need us. They need the engineers. We’re good engineers, its hard to hire good engineers these days….”
“We’re silicon valley engineers.” Andrea clarified. “We’re expensive. Offices are expensive. California taxes are expensive. Moving the whole thing to Boston saves them big bucks.”
“They’ll kill it. They don’t have the expertise. They can’t understand the internals. They’ll just fuck it up and it’ll die inside the company before it ever ships.”
“Do they care? They’ll learn something from it. I did a kick-ass memory manager. There’s enough parts there to cannibalize. And it sure didn’t cost them much money. Now you’re figuring out why I got so mad.”
Tom nodded, looking out at the parking lot where his CEO, in a brand new silver Porsche, had just pulled up. “Yeah.” Tom replied. “Yeah, I’m beginning to understand that.”
“After they all left last night I was trying to figure out some sort of positive outcome.” Andrea explained. “But I couldn’t see anything. I just sat and got madder and madder. I couldn’t stand to think of handing over all my code to UniMicro to fuck up. I’d rather kill it than let them get their hands on it. Its all in my head, anyway, right?” she tapped her forehead. “I wrote it once, I can write it again.
“So I wrote this Perl script to generate garbage, checked out a bunch of files, garbageified them, and then did a cvs commit.” She laughed. “This is going to sound wierd, but it felt really good.”
“‘Fuck you, UniMicro, Fuck you all to hell,’” Tom quoted. “Not exactly poetry.”
“I’m an engineer, not an english major,” Andrea said.
Tom was quiet for a while. “If I was loyal to UniMicro, as your manager I could fire you for this,” he said.
“I already quit, dude, read your email.” she retorted.
“The company could sue you for destruction of property.” Tom retorted back.
“You have backups.” Andrea replied. “What I did was pointless and we both know it. You were going out to go pick up the tapes just now, weren’t you?”
Involuntarily, Tom smiled. “Yeah, I was going out to pick up the tapes.”
“So you’re fine, butt-covering-wise. Slap me on the wrist if you want.” She held out her hand to him for the slap. He declined. “If I had had any sense and I was calmer I would have just been sneaky about it.”
“How do you mean?”
“I would have just changed things so they were only slightly fucked up, rather than just slashing and burning the whole thing. Change a few files, remove a few important things, you know, make it look real. That would have been the smart way to screw up the system. If I had done it right it would have taken you months to figure out.”
* * * *
Tom never made it back home to get the backups. But he was really wishing he had managed to get some coffee. He came back into the office forty-five minutes after he had left, his hands in his pockets, deep in thought, and went immediately into his cubicle. The message in the CVS logs from Andrea was still there in radiant blue on black for all to see.
“Hey Tom, can I see you in my office a second?” Johnnie, the CEO Tom had hired to run the company not six months earlier, stuck his head over the top of the cubicle. Tom hastily clicked the incriminating evidence away from the screen.
“Can it wait, Johnnie?” he said. “I’m kind of busy right now.”
Johnnie tapped on top of the cubicle with his pen, a habit that really annoyed Tom. “No, actually, it can’t wait. I need to see you in my office right away.”
Tom looked at his watch. It was barely nine o’clock. Obediently he stood up from his desk, turned on the screen saver lock on his computer, and followed his CEO down the hall to the office.
* * * *
It was true. It was all true. Everything Andrea had said. The company would be shut down, the technology and the executives moved to Boston. It would all be announced at noon, at a lunch meeting. They were even having Chinese food brought in for the whole company. Hi, we’re closing down your company and eviscerating your work, have another egg roll?
After the initial blow it would be Tom’s job to clean up the mess; Tom’s job to put the happy face spin on the betrayal, Tom’s job to lay everyone off.
What an incredibly sucky job.
That afternoon Tom was expected to turn over a CD of all the code, of everything in the source tree, ready or not. It would be given to a group in Boston who would take it over, incorporate it into another UniMicro project that was only tangentially related. Tom could stay on with the company to educate the Boston group about how the code worked, get them up to speed on the technology. And then he was welcome to find another job within UniMicro if he could, or to move on with a nice fat severance package.
He could stay on temporarily. If he wanted to. He could help with the transition, if he wanted to. Before he was forced out of his own company.
Anyone who has managed engineers knows it is hard to get them to agree on much of anything. “Managing engineers is like herding cats”, goes the old saw. After talking with Johnnie, Tom had grabbed all the engineers he could find and sent them out to the tree where they could not be overheard. Once they were there he called all the engineers who were still at home in bed on every available cell phone he could find. In light of the news to be announced at the lunch meeting, Tom’s plan went over exceptionally well. Not a single engineer had a single complaint. The impromptu tree meeting adjourned and the staff got to work.
An emacs window was open on Tom’s screen, the cursor flashing gently. He’d spent the last few hours working through code, tracing through old logs and old files, deleting functions, introducing errors into other parts, removing entire files. He had some really old backup tapes around the office, tapes at least a year old, and he restored a lot of files from there (including all of Andrea’s). They were useless to the current project, of course, but they were just what he wanted now. As he worked he modified the logs, changed the archives, covered his tracks. All around him, engineers were making similar changes, carefully erasing months of work. He was, as Andrea had put it, being sneaky about it.
UniMicro had made one major mistake in acquiring Oblinx: they had never done any technical due diligence. They knew what Oblinx was supposed to do, but they didn’t know how much of it Oblinx had actually done. And in colluding with Oblinx’s upper management they had skipped what would normally be a really important step in the process. They would be deeply sorry for that. By the time Tom and his engineers were done, there would not be much left. There would be enough there for plausible deniability. Enough there to claim that was all they had accomplished. Enough there to deflect the blame on Oblinx upper management for pumping up the technology and making it seem like the company had more than it did. But really, all UniMicro would get would be barely workable garbage. Well, that and an upper management team known for its backstabbing. But hey, maybe they’d fit in just fine at UniMicro.
Tom figured he’d start another company. Venture capitalists wouldn’t care that Oblinx had failed; he had built it from nothing and sold it to UniMicro and that would be good enough for them. Andrea had already said that she’d work for him again but only if he didn’t hire any idiots. He promised to try not to. And with the layoffs he suspected he could get at least a couple other engineers to come with him. He didn’t need that new car anyhow.
Just before the daliclock on his screen turned over into noon and he was due in the conference room for the big layoff announcement that everyone already knew about, Tom saved the last file, switched focus to an Xterm, typed a command. His finger paused over the Return key.
“Fuck you, UniMicro,” he muttered under his breath. “Fuck you all to hell.”
And he pressed the key.
[tom 15]%> cvs commit