Wednesday, 29 October 2014

Living on the Edge of the Night

I went back to the Cool Team and found myself as bored as ever.

ATB continued to grow. They wanted to hire a man called Jacob from interstate.  Jacob was a famous thinker in the domain, and I liked him immediately, but I didn't know why they were hiring him. The company was too focused on rolling software out of the door, and all of the teams were completely siloed. What were they going to do with an R&D department of one? It felt like hubris. It felt like they were hiring him just so they could tell people that he worked for us.

It was November when I got call I was expecting from Elvis. This was it, I thought. Reassigned to the Enterprise team under Irwin.

But I was wrong. He pulled me into a meeting with Vikram, Judd, and the CEO. "We're starting a black operation," Elvis told us. "Rewriting the entire Consumer product from scratch. In C++." The codebase that Ralf and Dennis were working on was Visual Basic.

"You will build the engine," Elvis said to Vikram. "You will build the realtime monitors," he said to me. "We want you to pull out all the stops. Do whatever it takes to get it done in one month. Work night and day. If you can pull that off there's a five grand bonus for you."

There was that one month deadline again. I didn't know the first thing about the project and  couldn't even begin to estimate how big it was, but I knew there was a piece missing. "What about the databse?"

Elvis dismissed my concern with a wave of his hand. "Vikram already built it."

Vikram already been separated from Irwin's team, I discovered, and replaced by a new hire, Davis. He had been since been tasked with building an ISAM layer specifically for this project. There was no good reason that we had tasked an engineer with building an ISAM from scratch, but it was obviously one of Elvis' pet projects and it was already fait accompli.
"From now on," said Elvis, "You report to Trent."
Vikram spluttered angrily. He has been reporting directly to Elvis for about six months, apparently. "Oh," said Elvis. "Not you, Vikram."

Great. So we had an impossible deadline and Vikram wasn't even on my team. Or on anybody's team. That was gonna work nicely, I could tell.

Elvis relocated both of us to the under-construction area of the building where Enterprise and Consumer had their space. Vikram and I were installed into a small office already occupied by Ralf and Dennis. The mysterious Trent had his office next door; in a windowless room. He liked to keep the lights down low.

The new office was tense from the get go. Vikram, I discovered, would blow his nose and clear his throat all day long with an utter lack of self awareness. Ralf,meanwhile, was becoming more and more irascible. I didn't blame him: having two new engineers dumped in his space and being informed that they are rewriting everything he'd been building for the past year in a single month was surely an insult. Having Elvis boasting that we were going to be working in C++ was another insult: Ralf had been an experienced C programmer when I was in nappies. It was very uncomfortable. I wondered if Trent, my new manager, was going to welcome me to his team, but he barely even poked his face into the see that we were all situated okay. 

At least I wasn't bored anymore.

Day 2, Trent called me into his office and closed the door. After an awkward moment, he got up and switched the lights on. "Sorry," he said. "I'm kind of a cave troll."
"So," he said. "I see that you've worked on every team in the company at one point or another."
"Yeah," I said. "I've been here longer than every other engineer, too." I didn't feel even slightly proud of that achievement.
"Well, you're on my team now, and you're here to stay," he said. "No more team-hopping. You understand?"
"Trent," I said, "It's never been my choice to move around. Not even once. I'd be more than happy to stay on one team and work on one product long enough to make a lasting difference."
He seemed surprised. I don't know what the others had told him about me but I was starting to get an idea that he didn't have the whole story. I also realized that me the 'black operation' project was as much a surprise to him as it was to me... and that Vikram had probably known about it before either of us. 
"Well, this is how it's gonna work," said Trent. "I'm gonna just let you do your job as you see fit. Long as everything goes smoothly I will stay out of your way and let you do what you like. I'm not going to interfere unless you start fucking up."
"Sounds good to me," I said. I meant every word of that. Finally, a chance to do some things my way.

Now all we needed was for Elvis to tell us exactly what it was that I was supposed to be doing.

At the Monday morning staff meeting Elvis announced the 'black operation' to the whole company. I don't know they thought a 'black operation' was, but I was pretty sure that whatever it was we were undertaking, at the very least they had chosen the right colour for it.

Wednesday, 22 October 2014

Seek and Destroy

As per Elvis' instructions, I returned to work at 2am to start work on Irwin's team. Immediately there was a problem: the building was locked up after hours. With some measure of satisfaction I called Elvis at home to get the security codes.

I rode the elevator up to the office and picked my way though the debris of the unfinished side of our floor to where my new team had their space. Irwin was waiting for me.

The situation was dire. They had promised a Proof of Concept for some government tender that was due the next day and the Enterprise just wasn't ready.  Adam and Paul, Irwin's two guys who were responsible for the server side of the product, had been in the process of re-architecting the systemwhen the PoC came up and they had had to roll back to an earlier, flakier version in order to have any chance whatsoever of delivering... anything.

That wasn't really my problem, though.

Irwin's product was an enterprise system that would deliver a version of the Consumer product--the Agent--to all of the computers on the estate. Vikram was responsible for the Agent; Adam and Paul for the server that would convey policy changes to the agents and pull data back.

Adam and Paul had written all the server code in C#, but the agent was all C++. Vikram had gone on vacation (and Paul was to follow the next day), but in the meantime the product didn't work and there were stringent security requirements from the government agency that needed to be met. My job was to ensure that the communications to and from the agent were encrypted accordingly.

I worked this out over the following sixty hours. Nobody was keen to spell out the situation for me.

Irwin showed me to Vikram's desk and and sat down next to me. "Let's pair-program this," he said, smiling. He didn't trust me.

And so we did. I oriented myself in Vikram's code... I was beginning to get a sense of why he was disliked throughout the company...  and we broke open the API documentation and I got to it, with Irwin looking over my shoulder. Occasionally he provided a useful idea. Mostly he just made me uncomfortable.

By 10am most of the office had arrived back at work and I had the encryption stuff done. I was relieved. I pulled it into a DLL that Paul could use from C# to decrypt the data and that, I figured, was pretty much everything that was required of me. Irwin disappeared back to wherever it was that he spent his days. By about midday I was ready to go home and get some sleep. But I decided to wait around and watch Adam and Paul run through an end-to-end test, just to make sure.

It didn't work. The product didn't work was fundamentally broken. They had communications between the console and the server (which of course Adam and Paul had worked together on), but more or less everything that went near Vikram's Agent was broken.

I didn't want to go home until I knew that everything worked, but I wasn't much help on the server end. The language and libraries were unfamiliar and Paul and Adam could barely keep track themselves of which code was current and which had been rolled back. I stayed around and tried to make myself useful, doing testing tasks, eyeballing unfamiliar code, trying my best to figure out what the actual fuck was going on. Irwin stayed away.

Come 5pm, Paul left the office. He had a plane to catch. We had missed the deadline, but Irwin assured us a day late would be fine. Adam and I stayed on, trying to work it through.

We stayed into the night. I slept for a couple of hours under the table in the conference room. I was useless. The product was a mess, hanging halfway between an unviable architecture that Adam and Paul had abandoned and an experimental one that they hadn't finished building.

10am the next morning the office filled up again. Adam and I were still there, and we'd made no real progress. I was practically hallucinating. Irwin said we could have another day to get it right. I had been wearing the same clothes since Monday night.

I took a break for lunch. In the kitchen, a couple of guys from the Cool Team asked me if I was transferring permanently to Irwin's team. "I have no idea," I said. "It's not up to me." I desperately hoped that I would not. I trusted Irwin even less than he trusted me.

When 6pm rolled around Adam and I delivered a cut to Irwin and Elvis... or at least, we tried to. They had gone home for the day.

We had the most basic scenarios working but anything of real value to a customer was completely broken. The encryption stuff I had written under Irwin's scrutiny during those the first eight hours held up fine, but everything I had touched since then was garbage and would soon have to be thrown out.

Adam and I went back to our homes; the last to leave the office again; pissed off and exhausted.

When I got back in the next day neither Irwin nor Elvis nor Judd bothered to thank us for our ridiculous efforts. Wilhelm, on the other hand, was fairly glowing with pride, and complimented me on the work I'd done on the encryption routines. "You are a weapons-grade programmer," he said. He seemed surprised. I doubted that he had actually seen the code, which I was not particularly proud of, and I figured that Irwin must have said something.

Looking back I think Irwin might have made a play to swap me out for Vikram. It didn't work, because Wilhelm and Vikram both had Elvis' favour. He wouldn't have done anything that might have been construed as a sleight to them. I went back to my place on the Cool Team.

Still, Wilhelm was a political force in the company and he was playing the long game. He didn't always get what he wanted immediately, but he was Teflon with the executives above Elvis' level and he knew when to be patient.

I went home and slept, and I didn't bother to go in Friday, either. Nobody said anything. I had worked something like seventy hours at work in the first part of the week.

We didn't win the PoC. I later discovered that the government agency didn't even look at what we sent to them. They didn't really care about encrypted communications. In the end they awarded the contract to a much bigger competitor because they offered 24/7 tech support. 

I didn't feel like I was weapons-grade anything; I felt like nuclear waste. Once again I started making plans to leave.

Friday, 17 October 2014

Chairman of the Bored

Life on the cool team was cruisey.

They were a nice bunch of guys. There was no interpersonal drama on the team. Everybody was friends. Their product was to be the company's flagship product and they were well resourced, well-paid and popular. Management cared about their product. They welcomed me without reservation.

The work that I was given was easy. Really easy. Boring and easy. I built the welcome wizard and whatever other pieces they threw at me. C# was easy, Winforms was easy.

There were minor annoyances. This was .NET 1.5, and there were parts of the framework that hadn't been implemented, but which didn't tell you that until runtime. There were no type safe containers in the language and I often had to resort to Reflection to make sure that everything behaved across our code and the third party libraries. It was both more advanced and more backwards than C++ at once and it frustrated me... but it was all still very easy.

The team had some vague deadlines for the product, which was understood to be a long-term undertaking, but nobody was in a particular hurry to meet them. I had no idea how close to completion the project was from my corner as the new guy but it seemed as if most of the moving parts were there. I didn't know what was holding up shipping but I didn't much care.

The biggest problem the team seemed to face was deciding on where to eat lunch. Every day there was at least thirty minutes of debate on the topic t the start of lunchtime. One of the engineers wrote an application to randomly choose a lunch venue, but nobody was ever willing to accept its choice.

That was life on the cool team.

Twice, Wilhelm would ask us to work on the weekend in order to meet some milestone. I was never clear what the milestone was. On the second of these occasions Wilhelm had friends from out of town visiting and chose to go bird-watching instead of staying in with the team.

That was okay.

The rest of the development group at ATB was not as relaxed. Elvis brought on two new managers: Trent, to manage Ralf's team, and Irwin to manage the Enterprise group.

I knew Irwin: he was the manager who had been rude to me when Vlad had recommended me to him at his previous workplace. I gave him an expectant look when we were introduced, but he gave no sign that he recognized my name. He asked me where I had worked before and when I told him he shrugged. "Never heard of it." It was one of the 10 biggest software companies in the country, and certainly the biggest one to have had an office local to the city. I knew he had offered a job to Vlad and he'd seen my resume. I'd spoken to him on the phone. I shrugged back and went away.

I didn't meet Trent, although I knew who he was. He stayed with his team and kept a low profile, at least as far as the rest of the company was concerned.

Irwin and Trent had their teams on the unfinished side of the office and I knew their guys were hard at it, working to crazy deadlines. One of these guys was Vikram.

Vikram was a C++ programmer like me, and everybody disliked him. I felt sorry for him. When he looked particularly put-upon I'd drag him out of the office and go for a walk. I don't remember what we talked about but he seemed okay to me. I just couldn't understand the stigma.

Months passed. Occasionally a little bit of C++ work would come down to me and I actually felt useful; doing things the rest of the team couldn't. I fixed memory problems in a COM interface that Mark had stolen from a journal. I built a service application to download updates from a third party vendor using SOAP. I felt warm and fuzzy for a couple of days doing those tasks. Mark asked me to build a system that would pump some data into the database, knowing that I had database experience in the murky past, and I was shocked to discover that the only reason we had SQL Server as part of the product was for reporting. None of the data was live.

The most exciting thing that happened was an altercation that I witnessed in the hallway. Ralf's product was about due to ship during that particular week and Judd asked the new QA manager how it was looking. "Looks great," said the QA manager. "It finds all the sample cases, no problem."
"And what kind of coverage are we getting for live occurrences?"
"I don't know. We haven't tested that."
Judd's face turned red. Then purple. "We're shipping on Friday, and the only testing you've done is with the twenty sample cases?"
"Twenty two!"
The number of different scenarios Ralf's product would have to deal with was numbered in the tens of thousands and growing exponentially.
"I see," said Judd, who turned around and went back the way he had come.

That was the last time I ever saw the QA manager. Perhaps he went back to NASA.

Perhaps it was time for me to do the same thing. Blast off into outer space. Get the fuck out of there. Go home. I'd built up some good savings on my new salary and I figured I'd stuck it out in the States long enough now to count the experience a success.

I was on my out of the office a little before six pm Monday when I heard my name mentioned. Elvis and Judd were standing at Wilhelm's cube."I help you with something, fellas?"
"Hey, Pike," said Elvis. "You're familiar with the Crypto API, right?"
"Yeah, we used that on the old product," I said.
"Great," said Elvis. "Enterprise has a POC due and they're in trouble. You're now on Irwin's team until it goes out the door."
"Alright." Irwin himself was nowhere in sight.
"Come in at 2am and Irwin will get you started."
I don't know how long I stood there with my mouth open before I thought up a response.

"Okay," I said.

Monday, 13 October 2014

Down On The Street

With Benjamin gone I suddenly had twice the workload.

First thing I had to do was work out how to publish the monthly updates. Tthere were more than twenty steps that had to be executed correctly and in the correct order to get everything to happen. An engineer had to run the screen-scraper, prepare the database migration, apply digital signatures, update the versions in the source tree, build everything, update two separate install scripts, update third party binaries in two different trees, branch, tag, deliver to QA and the web team... it was easily a half-day's work, if you knew what you were doing and if everything went right the first time.

Benjamin had attempted to write an interface from which you could trigger some of the steps. This was entirely because he wanted to do something in C# so he could put that on his resume, but I was grateful nonetheless. I spent a week cleaning everything up and I managed to rationalize the process down to twelve steps. It still took half a day to execute them all, but it required less fiddling and was more reliable than it had been. I wanted to do more, but to go any deeper would have been a lot more difficult, and Elvis wasn't going to shift the deadline for the next major release and I had to do all of it myself.

Meanwhile the office had started moving across to the new building in waves. I think I was in the second group to move over. All of development first, followed by QA. Admin, sales and tech-support would remain in the old building next door for the time being. My new cubicle was two meters wide and spacious. I had a Window on my right and an aisle on my left, with two or three meters of space separating me from the engineer behind me. Luxury!

I was seated in the same area as the cool team. Ralf and Dennis and the Enterprise team that Benjamin had refused to lead were set up on the far side of the floor, in a suite of offices that had not been fully fitted out yet. They were packed in three or more to a room: for once I was glad to have a cube. 

As I set to work on the scheduled release of my product I found that things were actually moving faster without Benjamin. I wasn't sure when exactly he'd become an obstruction but I think it was about the time I showed myself competent with threading... because, looking at the Threadmaster's vaunted code, I found that it was full of unsecured critical sections, race conditions, wasted threads and unsafe data access. The slowest operation ran in series, despite being interleaved for parallelism. By removing code and by tightening up a few key problem areas I had the new product running faster and more stably than ever. This was in addition to a slate of new features. It might have been an ugly baby, but finally it was starting to walk and talk.

All of this happened fast. It was the first and only time in my career that I delivered a product to QA early. I beat the deadline by two weeks... and was left to twiddle my thumbs. QA were still bringing on a new manager--a florid ex-NASA shitkicker--and there was nobody available to test my product. Worse yet, nobody seemed to care. Nobody thanked me or congratulated me. Nobody even acknowledged that I had come through except for Freddy.

Suddenly I had time on my hands and I decided I would have some fun. I started a prototype of a new version of the app. A multi-tiered client server architecture. Any kind of architecture would have been a novelty. A business layer, data abstraction, object-relational modelling, the works. I had built parts of this for the database administration tools and had been looking for an opportunity to leverage into the main product, but Benjamin was suspicious of any classes that did not derive from Microsoft's hierarchy and there had never been time to do more with it.

I even figured out how to get a Windows Forms GUI written in C# to inter-operate with the rest of the app, which was all written in native code.I was immediately impressed by how easy it was. For UI development, Windows Forms was much easier and faster than the old MFC/ Win32 user interfaces I'd been building. I felt a moment of zen: I had found a justification for the new language I had been taught to despise, and it could coexist alongside everything I thought was good and holy.

I didn't build a full scale prototype of my new project, but I did get to the stage where I could all of the layers working together end-to-end on the server box. I hadn't thought about how to do remote comms... that was another new frontier... but I just wanted to prove that it would work.

I wrote a manifesto outlining my glorious future vision for my craptacular product and sent it to Freddy. I showed him what I had built. He liked it and he passed on the document. I heard Elvis and the CEO chuckling about it. This was mainly because I had actually used the word 'manifesto'.

I knew these plans were overkill for my little product but I had nothing else to do. If nothing else I wanted to show them that I wasn't just Benjamin's schmuck; I was a capable engineer with vision and undemonstrated abilities. I believed they might even care.

The following week Freddy received a communique from the defense contractor who made the engine that the product was based on, requesting a meeting. ATB gave us a car rental voucher and we drove across the state to sit down with them and see what they wanted. We got as far as the carpark before we discovered that we were at a secure campus. I was not a US citizen, or even a permanent resident: they wouldn't let me out of the car.

The team eventually came out of the building and we drove to a nearby Japanese restaurant, where we had lunch. We then drove across town to a less secure campus where there was a spare meeting room. Freddy and I sat down to listen to a shpiel about where the company was planning to take their product and how it would effect our licensing deal with them.

About five minutes into the talk Freddy turned at me with eyes wide. Their new product was very much like the one I had started prototyping--except mine was a skeleton of a prototype, and theirs was almost ready to ship.

I took the new product back to the office to start playing with it. Once I had installed it, they said that I would be able to communicate with their service via SOAP. They provided me with a WSDL file with I shouldould be able to automatically generate all of the code needed to achieve this.

I didn't know what any of that meant so I went off to read about it. Turned out it was a little like CORBA, which I had learned a tiny bit about in my Honours year at university from an exchange professor who was visiting from Italy. Mainly I remembered that he'd held the assessment in one of our normal lectures, not during a formal examination, and he had allowed us to talk amongst ourselves through it "so long as nobody cheats".

I spent a week playing around with the SOAP interface, trying to get my prototype to talk to their service. It just didn't work. There was an open source tool for building web service proxies for C++ called GSOAP, but no matter what I did it failed at runtime every time I called it. I spent most of the week trying to hack it into submission before I thought of trying to talk to it directly from my GUI, which was written in C#, int he hope of finding some new error message that might tell me what the real problem was. 

It just worked. I ran the tool to generate the proxies, added the new modules to my module, and it behaved exactly as documented. Once again, I was shocked. All the time and effort I'd spent trying to make the C++ version work... all the cryptic tools and the ugly generated code and custom build steps...

I complained to my new contact at the defense contractor. "Why do you want to use C++, anyway?" he said. His tone of voice said: "What are you, a savage?"

Because that was my core skill. I had built my career on C++. I believed it was the most powerful and expressive language extant and I was proud of my mastery of it. I was angry that somebody should dismiss it for what I thought of as a fad language. C# Microsoft's sour-grapes alternative to Java. Microsoft's attempt to control software development; to keep every engineer who worked on their operating system existing inside yet another bubble of lard. I didn't care that it removed the difficulties or memory management. What kind of developer couldn't handle a few pointers? And what about performance? .NET would never, could never perform as well! Ha!

I was angry,  but I felt righteous, too. Sooner or later my peers would see through Microsoft's lies and force the giant to restore C++ to its pedestal.

My product went into QA. They found two bugs, which I promptly fixed in a single afternoon, and the product shipped. 

Elvis and Judd called me into a meeting. Wilhelm, the new manager of the the Cool Team, was there as well. My product was mature enough to stand for a while; there was no point continuing development until the new engine was at market. Meanwhile, it was clear from the beta Wilhelm had just shipped that his product was nowhere near where it needed to be.

I was on the Cool Team, effective immediately.

The company took the Cool Team out for coffee to celebrate the Beta, and that was where Wilhelm announced the news. A free cup of coffee and t-shirt commemorating the beta, which I had had no part in developing

So much for my manifesto. So much for being a 'team lead'. So much for C++. I was now one of the Cool Kids, and that meant C# all day, every day.

Friday, 10 October 2014

Dog Food

I returned to ATB after my holiday back in Australia with reluctance.

I didn't know why I was staying. It certainly wasn't the money. I'd done what I set out to do and if I left then it would be on my own terms. I was starting to miss my family and I wasn't happy with the way things were going between me and Donna.

Not much had changed, but there were more plans afoot. Judd's talk about renting new space in the office tower next door were in fact proceeding: we had a lease and time had been scheduled for Judd and his guys to go in there and wire up up the network. Judd was full of plans to set up a microwave transmitter, aimed out of one of our windows and up to our new office space, so we could have internet while we waited for the cable company to set up our permanent link.

More changes started happening soon. Benjamin, ever discontent, was offered a position leading a team who would create an enterprise version of the consumer product that Ralph and Dennis were building.

This promotion lasted maybe one day. Benjamin went to a meeting where Elvis explained that this new enterprise product was to be delivered in about one month and he decided that they were setting him up to fail. He was back with me on the product he'd loudly deemed unworthy of his skills.

He was right: the one month deadline was utterly ludicrous. He was wrong about the conspiracy, though. Florida was and remains a Right To Work state. Nobody needed to 'set him up to fail'. They could have ejected him any time they wanted.

Benjamin's chess competition with Colin was still underway. Benjamin was still becoming increasingly desperate to make the stats favour him. He would declare certain games invalid. He would declare that Colin "had no honour" because, during the tournament, he would no longer allow Benjamin to take back foolish moves as he had when there were no stakes. I let him play the stats however he wanted. I didn't care.

These games generally took place at Benjamin's desk during lunchtime, or around lunchtime, or sometimes whenever Benjamin felt like it.

Finally, Judd decided that the noise was disrupting and that Benjamin was only allowed to polay chess at lunch time, and then not in the cubicle area. This was the final straw.

The next day Benjamin quit, citing the fact that his freedom to play chess had been removed. I'd pretty much made up my mind to leave as well, by then. I was going to wait a month or two to replenish the money I had spent traveling and then be on my way.

The day after Benjamin left Judd summoned me to a meeting with the CEO of the company. "We're giving you a raise," he said. "Because you're now a team leader."
"Oh? Who else is on my team?"
"Uh, just you."
They told me how much. It was still substantially less than all the new engineers were getting.
I might have taken it, but I'd already decided I was going. "It's not enough."
The President spluttered that I was an ungrateful wretch. "I should fire you right here on the spot!"
I shrugged.I was ready to leave. 
"You were always in here, demanding more money... and all the books we bought you... and... "
"That was Benjamin. And you never bought me any books."
"Yes, well..."
"I risked being deported by coming to work before my visa was done, and you guys still screwed me out of the signing bonus that was supposed to make up for my salary for that first month."
"What? Nonsense! Who did such a thing?!"
I shrugged apologetically at Judd. "He did."

The CEO was furious. "Well, how much do you want?"
I knew my product was profitable. It didn't make big money but it more than paid for Benjamin's and my own salary and whatever licensing costs they were paying the defense contractor who wrote the engine. I knew that because Freddy had told me.
I wasn't greedy. I named the same figure all the new guys were getting.
The CEO agreed. He was red with anger by the time I left his office.

I decided I'd stay on a bit longer. Suddenly I was making decent money, and I no longer had to worry about when Benjamin would explode next. At the very least I would wait until I had some pay stubs so I could prove what I was worth to my next prospective employer.

But there were more changes on the way. Our new premises were almost ready and Development was going to be the first group to move across.