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.
Monday, 13 October 2014
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.
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.
Tuesday, 30 September 2014
Raw Power
Elvis started to throw his weight around immediately, and since he only had two engineers to look after that meant me and Benjamin. We had a release due in a couple of weeks and Elvis decided he needed to be involved.
Most of the things he wanted were small. "Move that control two pixels to the left. "Change that word from "Edit" to "Modify". My favourite was his request that I make the toolbar show its icons in true colour. I explained that it was an out of the box control and it only supports 16 bit images, but Elvis was adamant. I explained that the images we used weren't in 24 bit colour anyway, and he went and had a designer in the marketing department spruce them up. Int he end it took me most of a week to get the damn icons on the toolbar displaying properly in true colour, at the expense of bug fixes and features that customers might actually benefit from. He didn't care, so I did what I was told. Putting a true colour toolbar on that horrible, hacked-up interface was like putting a ribbon around a turd.
Suddenly ATB was hiring. Elvis immediately started negotiating to bring in the team of contractors working for us from a nearby firm, and there was a procession of candidates through the doors as well. Benjamin was called upon to test all of them. When he was away, I did the testing.
It was my first time on the other side of the table in an interview situation and I didn't like it. The test I had to administer had been written by Benjamin, and it only covered C++ topics. I was asked to test programmers who had responded to job ads for Visual Basic or C#/.NET programming roles--topics I was bone ignorant about. One candidate in particular--a veteran programmer who was probably in his fifties--grew angry and belligerent about it. Elvis had left us alone in the room for the test and I felt like the lowest of weasels. In his place I would have been angry, too. Some punk kid half my age, asking me difficult questions in a language you never claimed to know. But the form of it was all that mattered to Elvis
Money was suddenly a sore point. Elvis had left papers lying around showing the salaries promised to the team we were poaching from the contracting company and their numbers were substantially higher than what what Benjamin and I were getting. (I didn't know Benjamin's salary, but that was what he said when he saw the papers.) The lowest salary on the sheet was almost fifty percent above mine, and these were all programmers with similar levels of experience to my own. Benjamin stormed into off to see the president of the company at least once a week to demand more money. I went with him once, but I just stood by and let Benjamin talk. I could see it was getting him nowhere. My own interest was academic: I didn't plan on staying there long.
Benjamin started pushing me. Doing less work, belittling my work in front of other people. I let him say what he wanted, but I wouldn't stand by and let his poor judgment compromise the quality of the work I was doing. He contested a database schema design that I came up with and his proposed alternative was leaky. It was going to lose crucial data. Benjamin got angrier and angrier as I refused to accept his design. Eventually, he pulled up his college transcripts to show me that he'd scored As in his database subjects. I told him he was still wrong. It was my feature and my responsibility and he could fuck off with his college transcript.
To this day it's the only time I've ever raised my voice in anger at work. When I realized I had shouted I turned and left the room. Elvis and Judd were nowhere to be seen, but afterwards Freddy, who witnessed the whole thing, came up to me with a smirk. "That was new," he said. "Not unexpected, but new." He reported the incident up the chain, as I knew he would. I liked Freddy but I knew he was a born gossip.
Benjamin and I didn't speak for days after that. I delivered the feature and the matter was never raised again.
When the first new engineer started we had an office move. There just wasn't space for one more desk in the dingy basement room Eric, Benjamin and I shared. Instead we moved upstairs, to the area formerly occupied by QA and technical support. It was quite a large area, and with only three desks in there it was a like working in a barn. A barn that dripped from the ceiling.
Elvis told there were plans to rent a floor in the 12 storey office block next door. I wasn't sure I believed him.
The new hires started arriving and before long they had to install partitions. Suddenly I had one square meter of desk space, with engineers on my left and my right. The floor in my spot wasn't level, and I had to lean constantly to prevent my chair from rolling downhill. If I rolled my chair backwards more than a few inches I would run into the back of the guy who sat behind me--a grumpy old veteran named Ralph. I liked Ralph. He told you what he was thinking.
ATB had purchased a branch of the sourcecode for a Visual Basic application written by a couple of local entrepreneurs. The app itself was primitive, and was in fact a direct knockoff of a competitors product, but someone at ATB saw it as a strategic market. Ralph and Dennis, a baby-faced engineer five years my senior, were given the task of cleaning up that code and make it something that ATB could convincingly sell to man-on-the-street-with-laptop consumers.
Within the space of about a month my workspace had gone from a tomb to a barn to a sardine can. It was bewildering.
I rebooked my cancelled holiday home to Australia for July. The lawyers advised me that I needed to go home and get a new visa stamp in my passport. I needed a new passport, too. The consulate in Melbourne would not say me how long that process would take--they advised me not to buy a return flight. I put my head down and decided to wait it out, see what happened. The situation at ATB continued to get weirder all the time.
Benjamin was becoming increasingly agitated. He would pose psychological challenges to everyone who sat within earshot. Unpleasant hypothetical situations. What would you do if...? I don't think even Benjamin enjoyed those conversations, but he kept introducing uncomfortable new topics.
The team of contractors came on as regular employees and suddenly they were the cool kids. They hung out together, they were always laughing, they had a good time despite the dingy work environment. It's rare in the software business that you feel like you're not popular enough to hang out with the pretty people, but suddenly there was a clique of engineers who were better paid and better treated and who were simply having a better time than the rest of us.
One Monday morning, when the new hires were announced at the staff meeting, Benjamin turned to me with an expression of shock.
"That guy."
"What?"
"That guy." The guy he indicated was a huge individual with cokebottle glasses and some kind of obvious social disorder.
"I tested him on Friday and he got zero. ZERO. Couldn't answer a single question on the test. Elvis hired him anyway."
When Benjamin buttonholed Elvis about it he said "The guy was nervous. He sent me some work samples from home and they were good."
That Guy lasted about one week, including the weekend. (Elvis made him work over his first weekend). Every single line of code he submitted had to be rewritten by somebody more competent. I think he quit before Elvis could fire him but I was never certain.
Benjamin decided that his chess game had improved sufficiently that he could take on Colin, and he challenged him to a best of fifteen tournament to see, once and for all, who was the best player in the building. Colin agreed to it in his usual laid back way. Benjamin then turned to me and said "I'll bet you five dollars I'll win."
I wasn't sure how to respond. He was my teammate, and he had had a sensitive ego, and now he wanted me to bet against him? I didn't care about his chess game. I just wanted to be able to get on with my job in peace.
"I bet you twenty," I said, hoping to price myself out of the proposition. I knew Benjamin was a cheapskate.
He thought long and hard about it, but in the end he decided to take the bet.
Benjamin started playing chess. He kept score on the white board; game stats and a whole lot of bullshit analysis that made it look like he was doing better than he was. The truth was that Colin was thrashing him, no matter what he wrote on the board. His mistake had been telling Colin about the bet. Now that there was money on the line - even though it wasn't his own - Colin took a renewed interest in the game and Benjamin just couldn't compete.
Benjamin also started coming up with excuses to rewrite all of the external utilities our product needed in C#, because he wanted to be able to put the cool new language on his resume. I was scornful of the idea--more of Benjamin's paranoia about being left behind or turfed out by the tech business-- but I left him to do it. I was scornful of C#, even though it was clearly becoming more valued at ATB than the C++ we were writing. But I didn't say anything. I didn't want another fight; I just wanted to get my job done and get away on holiday.
July came around finally and I was ready for my holiday. The day before I was to leave, Judd called me into his office. "Here you go, Pike, we're paying you a bonus for all your good work." It was maybe $1000--well short of what was owed to me for the month of salary he'd earlier screwed me out of.
"Thanks, Judd."
"It's to make sure you come back," he said, grinning.
I just looked at him. "You really think I'd just leave like that?"
"Well, not really..."
Without taking the pleasure of slapping a resignation form down on his desk? Did he think I was stupid?
I pocketed the cheque and left it at that. He knew I had good reason to walk, and he knew it was a lame gesture. I don't think it had occurred to him that I would be insulted.
I knew I'd be back, but I had a feeling it wouldn't be for long. I wanted to take my holiday, get my new visa, and get some perspective. I wasn't ready to call it quits with Donna but I wanted to get away from her for a bit, too. I had no real idea what would happen next.
Saturday, 13 September 2014
Skull Ring
Things at Across the Bay got weird very quickly.
Benjamin was the most obvious source of weirdness. Whenever his cellphone rang he would look around guiltily and answer it in an undertone. He would invariably say "I asked you not to call me at work." I tried not to listen in but his chair was less than two meters away from mine. I thought perhaps he was talking to a drug dealer, but he later told me it was his girlfriend.
Benjamin was also a bit on the paranoid side. He was terrified that he would be fired, and he told me that he was worried the black stain of that would prevent him from finding work again and he would end up on the street.
Benjamin had lost a lot of weight, he said, due to a strenuous diet and exercise program and he was also paranoid that he would get fat again. He would very rarely eat anything besides the occasional powerbar. But that never stopped him tagging along when I went in search of lunch. During one such lunch he told me that during the interview process there was only one other candidate who had passed the test. This candidate was more experienced than either of us and Benjamin had somehow vetoed the hire because he did not want Judd to put anyone above him, and the guy was 'management.' I was never clear on exactly how that went down but I suppose int he end they decided that they didn't need a development manager to look after a team of two, and I was definitely cheaper--and they definitely had me and Benjamin cheap. The CEO of the company joked about it in my hearing: "We pay our programmers peanuts." I would later hear him use the phrase "Arbeit Mach Frei" when describing our workload.
One of the tech support engineers, Colin, was a chess enthusiast. Benjamin was convinced that he was the smarter of the two, since Colin was 'only' in support, and that he would prove this by becoming a better chess player. The only problem was that Colin held an Expert ranking and Benjamin was a novice. Benjamin kept a tally of how many games he had won in order to track his progress. He did start to win more and more often, as Colin became less and less interested.
There were only a couple of testers working at Across the Bay, and only one was assigned to the product Benjamin and I were writing. Igor was a huge, soft-spoken Bulgarian guy with a sarcastic smile. On my first day, he indicated the work Benjamin and I were doing, and said "This software is shit. It's the worst software I've ever seen." He smiled his little smile and went away, leaving Benjamin fuming.
Freddy, on the other hand, quickly proved my initial feelings about him wrong. He had a strange, self-deprecating sense of humour but he was a good guy. We were the only two people int he office who drank coffee, so he brought in a little two cup percolator which we both enjoyed.
Benjamin and I were the only programmers ATB employed in house, but they had a team of six or so team they'd outsourced from a nearby contracting house who wrote ATB's flagship product. ATB was primarily a software reseller but I think the outsourced product sold better than any of the tools they were distributing, and the margins were much higher. We heard a lot of talk about the other team, and word was that ATB was going to move into software development in a big way. In the meantime, though, there were some problems... such as the fact that Benjamin and I were the only two employees who had ever worked for a proper software development outfit before.
One Friday at the end of the day, Judd asked us for a development build of the product, saying he wanted to play around with it. We cut him him a build and went home for the weekend. Benjamin and I returned on Monday to a furious email about release procedure from the CEO. Judd had published the build as a release candidate and the denizens of the Beta forums had torn it to shreds.
Judd started to feed us odd technical questions that seemed to be from the outsourced team. For example, he showed us a magazine article about how string parsing in Microsoft's new language, C#, performed just as well as it did in C++ and asked us to assess its accuracy. (We debunked it pretty thoroughly). Something strange was going on. We started to hear the names of the engineers on the other team bandied about. The team lead, Mark, seemed to get a particularly good amount of airtime. They were contracted through the consulting company to which Vlad from my old job had recommended me, where the manager had been so rude to me. I heard his name mentioned a lot, too. Michael.
But we had other things to worry about. Judd asked us to estimate how much time we needed to get the product ready for Beta. Benjamin and I spent a day figuring it out and decided that the bare minimum was four weeks, if every single thing went to plan.
"Well, you've got two," Judd told us. I don't know if he thought we were slacking, or if he thought he could make us work harder, or if there was a reason for that deadline, but whatever the case, Benjamin and I just stared at him slack jawed. Then we went back to our desks and got to work.
Things didn't go perfectly. Igor logged a huge number of defects, which provoked Benjamin into storming upstairs in a rage. I followed him int he hope of talking him down, but he had to have his say. Benjamin screamed for probably five solid minutes. The gist of his argument had nothing to do with the defects: he was convinced that Igor was trying to ruin his career. Igor just sat there and smiled his little smile.
While all of this was going on, I was actually learning some new things about programming. I learned more in my first couple of months at ATB than I had in the two years prior. Specifically, I was learning about threaded programming.
Benjamin called himself the "Thread Master" and he was very proud of his work in that arena. He showed me some online articles on the topic and I devoured them avidly. The skills were necessary for the software we were building and I soon found that I needed to use them. My first asynchronous project was to write a threadpool. I wrote a generic class that would take a queue of jobs, which the threadpool would consume until the queue was empty. Jobs could be safely added to the queue during processing. It worked pretty well and the class proved useful in several places, and Benjamin declared it a success. This is a solution I wound up implementing at a number of different jobs after I left ATB.
Then Igor logged a bug that looked thread-related. Benjamin made a big show of telling Judd that normally this was something that he, the Threadmaster, would handle, but he thought I was ready to step up and take it on. Judd, of course, said "How long will it take?"
"Maybe a week. It looks nasty," I said. I didn't like the way that Benjamin was makign a big deal of this. It looked like he was talking me up, but really the point was to show Judd how much better than me he was.
"I think you'll nail it in three days," said Benjamin.
I had nailed it by lunchtime. Once I had actually looked at the code I found that it wasn't a threading issue; it was an blatantly obvious error that Benjamin had introduced a few days prior. I fixed it quietly and got on with things.
The next morning, Judd sidled over and said "So, how's that monster problem going, Pike?"
"Oh, I took care of it."
"Wow, that was quick. What was it, in the end?"
"Oh, just a bug." Benjamin was still my teammate and I wanted to look out for him, although he was increasingly volatile and he was screwing up more and more often. He was int he CEO's office at least once a week, complaining about conditions and pay.
I figured that Judd and the rest of the office could see what was going on. They could see that I was quietly and competently getting the job done without any big show and without talking myself up. Surely they could see that Benjamin was a little bit unhinged.It wasn't for a couple of years that I realized they didn't know or care.
Benjamin and I continued to work on our product, and it was getting close to being releasable. ATB started hiring again: they brought in an engineer who was a little older than me and had Benjamin test him, as he had earlier tested me. I wasn't in the room, but the new guy, Elvis, did well, and was duly hired...
... into the position of Development Manager. Benjamin was furious. In particular, he was galled that he'd been the one to test Elvis--he thought that meant he would later be singled out for special vengeance.
But whatever his faults, Elvis was a laid-back guy with little concern for such trifling matters. I doubt he gave the test another thought.
Elvis was an entirely new kind of manager, quite different to the ones I'd served under in the past. But his presence signaled something I'd never seen before: rapid expansion. ATB had big plans and they were only just beginning.
Benjamin was the most obvious source of weirdness. Whenever his cellphone rang he would look around guiltily and answer it in an undertone. He would invariably say "I asked you not to call me at work." I tried not to listen in but his chair was less than two meters away from mine. I thought perhaps he was talking to a drug dealer, but he later told me it was his girlfriend.
Benjamin was also a bit on the paranoid side. He was terrified that he would be fired, and he told me that he was worried the black stain of that would prevent him from finding work again and he would end up on the street.
Benjamin had lost a lot of weight, he said, due to a strenuous diet and exercise program and he was also paranoid that he would get fat again. He would very rarely eat anything besides the occasional powerbar. But that never stopped him tagging along when I went in search of lunch. During one such lunch he told me that during the interview process there was only one other candidate who had passed the test. This candidate was more experienced than either of us and Benjamin had somehow vetoed the hire because he did not want Judd to put anyone above him, and the guy was 'management.' I was never clear on exactly how that went down but I suppose int he end they decided that they didn't need a development manager to look after a team of two, and I was definitely cheaper--and they definitely had me and Benjamin cheap. The CEO of the company joked about it in my hearing: "We pay our programmers peanuts." I would later hear him use the phrase "Arbeit Mach Frei" when describing our workload.
One of the tech support engineers, Colin, was a chess enthusiast. Benjamin was convinced that he was the smarter of the two, since Colin was 'only' in support, and that he would prove this by becoming a better chess player. The only problem was that Colin held an Expert ranking and Benjamin was a novice. Benjamin kept a tally of how many games he had won in order to track his progress. He did start to win more and more often, as Colin became less and less interested.
There were only a couple of testers working at Across the Bay, and only one was assigned to the product Benjamin and I were writing. Igor was a huge, soft-spoken Bulgarian guy with a sarcastic smile. On my first day, he indicated the work Benjamin and I were doing, and said "This software is shit. It's the worst software I've ever seen." He smiled his little smile and went away, leaving Benjamin fuming.
Freddy, on the other hand, quickly proved my initial feelings about him wrong. He had a strange, self-deprecating sense of humour but he was a good guy. We were the only two people int he office who drank coffee, so he brought in a little two cup percolator which we both enjoyed.
Benjamin and I were the only programmers ATB employed in house, but they had a team of six or so team they'd outsourced from a nearby contracting house who wrote ATB's flagship product. ATB was primarily a software reseller but I think the outsourced product sold better than any of the tools they were distributing, and the margins were much higher. We heard a lot of talk about the other team, and word was that ATB was going to move into software development in a big way. In the meantime, though, there were some problems... such as the fact that Benjamin and I were the only two employees who had ever worked for a proper software development outfit before.
One Friday at the end of the day, Judd asked us for a development build of the product, saying he wanted to play around with it. We cut him him a build and went home for the weekend. Benjamin and I returned on Monday to a furious email about release procedure from the CEO. Judd had published the build as a release candidate and the denizens of the Beta forums had torn it to shreds.
Judd started to feed us odd technical questions that seemed to be from the outsourced team. For example, he showed us a magazine article about how string parsing in Microsoft's new language, C#, performed just as well as it did in C++ and asked us to assess its accuracy. (We debunked it pretty thoroughly). Something strange was going on. We started to hear the names of the engineers on the other team bandied about. The team lead, Mark, seemed to get a particularly good amount of airtime. They were contracted through the consulting company to which Vlad from my old job had recommended me, where the manager had been so rude to me. I heard his name mentioned a lot, too. Michael.
But we had other things to worry about. Judd asked us to estimate how much time we needed to get the product ready for Beta. Benjamin and I spent a day figuring it out and decided that the bare minimum was four weeks, if every single thing went to plan.
"Well, you've got two," Judd told us. I don't know if he thought we were slacking, or if he thought he could make us work harder, or if there was a reason for that deadline, but whatever the case, Benjamin and I just stared at him slack jawed. Then we went back to our desks and got to work.
Things didn't go perfectly. Igor logged a huge number of defects, which provoked Benjamin into storming upstairs in a rage. I followed him int he hope of talking him down, but he had to have his say. Benjamin screamed for probably five solid minutes. The gist of his argument had nothing to do with the defects: he was convinced that Igor was trying to ruin his career. Igor just sat there and smiled his little smile.
While all of this was going on, I was actually learning some new things about programming. I learned more in my first couple of months at ATB than I had in the two years prior. Specifically, I was learning about threaded programming.
Benjamin called himself the "Thread Master" and he was very proud of his work in that arena. He showed me some online articles on the topic and I devoured them avidly. The skills were necessary for the software we were building and I soon found that I needed to use them. My first asynchronous project was to write a threadpool. I wrote a generic class that would take a queue of jobs, which the threadpool would consume until the queue was empty. Jobs could be safely added to the queue during processing. It worked pretty well and the class proved useful in several places, and Benjamin declared it a success. This is a solution I wound up implementing at a number of different jobs after I left ATB.
Then Igor logged a bug that looked thread-related. Benjamin made a big show of telling Judd that normally this was something that he, the Threadmaster, would handle, but he thought I was ready to step up and take it on. Judd, of course, said "How long will it take?"
"Maybe a week. It looks nasty," I said. I didn't like the way that Benjamin was makign a big deal of this. It looked like he was talking me up, but really the point was to show Judd how much better than me he was.
"I think you'll nail it in three days," said Benjamin.
I had nailed it by lunchtime. Once I had actually looked at the code I found that it wasn't a threading issue; it was an blatantly obvious error that Benjamin had introduced a few days prior. I fixed it quietly and got on with things.
The next morning, Judd sidled over and said "So, how's that monster problem going, Pike?"
"Oh, I took care of it."
"Wow, that was quick. What was it, in the end?"
"Oh, just a bug." Benjamin was still my teammate and I wanted to look out for him, although he was increasingly volatile and he was screwing up more and more often. He was int he CEO's office at least once a week, complaining about conditions and pay.
I figured that Judd and the rest of the office could see what was going on. They could see that I was quietly and competently getting the job done without any big show and without talking myself up. Surely they could see that Benjamin was a little bit unhinged.It wasn't for a couple of years that I realized they didn't know or care.
Benjamin and I continued to work on our product, and it was getting close to being releasable. ATB started hiring again: they brought in an engineer who was a little older than me and had Benjamin test him, as he had earlier tested me. I wasn't in the room, but the new guy, Elvis, did well, and was duly hired...
... into the position of Development Manager. Benjamin was furious. In particular, he was galled that he'd been the one to test Elvis--he thought that meant he would later be singled out for special vengeance.
But whatever his faults, Elvis was a laid-back guy with little concern for such trifling matters. I doubt he gave the test another thought.
Elvis was an entirely new kind of manager, quite different to the ones I'd served under in the past. But his presence signaled something I'd never seen before: rapid expansion. ATB had big plans and they were only just beginning.
Wednesday, 27 August 2014
Funhouse
The company Across the Bay offered wanted me to start immediately, although my visa transfer had not yet gone through. My lawyer told me it was illegal; their lawyer said that it was.
The offer that they made me on paper was for a salary equivalent to the one I had been earning, to be increased by a few grand after a three month trial period. Perhaps they didn't realize that I had seen a copy of the paperwork they provided to the Immigration Department, which listed the higher salary.
They were adamant that I start work for them. They claimed that they would call it 'training', if questioned, and I would be paid my salary for the duration as a signing 'bonus'. I reluctantly agreed.
When I arrived at work on my first day I found Benjamin frantically checking code into Source Safe. He had not been practising any kind of version control before I arrived on the project and my arrival had prompted a sudden massive code cleanup, which went as far as a renaming of the product.
The code was still a mess. The product was halfway functional, but there was no design; no object model. It was built on top of another product, which in fact did all of the work. Our product was intended to be a GUI that would exercise their command-line interface. Our only selling point was cheaper licensing terms than the base product, which had its own superior GUI.
The problem was that the other product came with a database, which was updated every month--and which was partially encrypted. We needed to apply those database updates to our own product and we needed to display some the encrypted information for our product to be of any use to end-users... but the company we had licensed the product from was a military-industrial provider and would not give us an API to decrypt.
For this purpose Benjamin had written a screen scraper, which would open the other product and automatically press buttons in order navigate through its database. It would then scrape the decrypted text out of the other product's GUI and save it into a new table int he database. It was a clever bit of work, but slow and not very robust.
The database in question, I was dismayed to discover, was MS Access. Our product installed its own tables into the same database and read our data out of there willy-nilly.
My first task was to help build out the views through which the GUI would display information present in the database, most of which revolved around jobs the user created and the results of their execution. This on the surface was an easy enough task, but Benjamin had bastardized the MFC Model-View framework and getting it to behave like a proper application required a lot of hacking.
On my first day a guy called Freddy slouched into the office and introduced himself.
"Good to meet you, Freddy."
"I don't feel so good. I only got to be the new guy for about three days before you arrived."
He laughed. I didn't like his smile. "Just kidding."
I smiled and nodded.
"You're going to learn to hate me," said Freddy, still grinning. "I'm the Product Manager."
During my first week Judd let it be known that the pressure was on for a release, although the software was nowhere close to being ready. Benjamin sighed and said we were going to have to work through the weekend.
"No way," I said. "I don't have a visa and right now I'm only here in the office out of the goodness of my heart. No way am I coming in on the weekend."
Freddy gave me a narrow look. "This one's trouble," he said loudly. "Better keep an eye on him."
I shrugged him off and got back to work. He had no idea about my work status and I did not feel like filling him in. Freddy had already advised me that I should hate him and I decided to take him at his word. Rarely have I misjudged anybody as badly as I did Freddy.
About a month into my trial period my visa transfer arrived. Marge came to me to get my bank details and to set up with health insurance.
Then Judd came to me and said "So, man, this signing bonus is going to be a problem."
"Oh, really?"
"Yes, well, the thing is, we've never paid one before, and we don't think it sets a good example to pay one now."
"But you know it's not really a signing bonus. It's my salary."
He looked away. "Well, yes, that's right. Hey, tell you what. I'll make it up to you by paying you the at the rate that you're not supposed to get until after your trial period."
I did some mental calculations. I was out one month's pay and the difference in salary for the remaining two months of my trial period was not even close to covering it. In any case, they were legally obliged to pay me the higher rate.
ATB had decided not to pay me for the month during which I had worked for them illegally, against my lawyer's advice, risking deportation. They were clearly doing it because they knew they could.
They had me over a barrel. I was cheap, the economy was terrible, and I had two options: quit and go home to Australia or suck it up and stay.
I'd worked hard to be there and my self-esteem had taken a beating through the redundancy. Donna put pressure on me and I decided I would stay.
The fun was just beginning.
The offer that they made me on paper was for a salary equivalent to the one I had been earning, to be increased by a few grand after a three month trial period. Perhaps they didn't realize that I had seen a copy of the paperwork they provided to the Immigration Department, which listed the higher salary.
They were adamant that I start work for them. They claimed that they would call it 'training', if questioned, and I would be paid my salary for the duration as a signing 'bonus'. I reluctantly agreed.
When I arrived at work on my first day I found Benjamin frantically checking code into Source Safe. He had not been practising any kind of version control before I arrived on the project and my arrival had prompted a sudden massive code cleanup, which went as far as a renaming of the product.
The code was still a mess. The product was halfway functional, but there was no design; no object model. It was built on top of another product, which in fact did all of the work. Our product was intended to be a GUI that would exercise their command-line interface. Our only selling point was cheaper licensing terms than the base product, which had its own superior GUI.
The problem was that the other product came with a database, which was updated every month--and which was partially encrypted. We needed to apply those database updates to our own product and we needed to display some the encrypted information for our product to be of any use to end-users... but the company we had licensed the product from was a military-industrial provider and would not give us an API to decrypt.
For this purpose Benjamin had written a screen scraper, which would open the other product and automatically press buttons in order navigate through its database. It would then scrape the decrypted text out of the other product's GUI and save it into a new table int he database. It was a clever bit of work, but slow and not very robust.
The database in question, I was dismayed to discover, was MS Access. Our product installed its own tables into the same database and read our data out of there willy-nilly.
My first task was to help build out the views through which the GUI would display information present in the database, most of which revolved around jobs the user created and the results of their execution. This on the surface was an easy enough task, but Benjamin had bastardized the MFC Model-View framework and getting it to behave like a proper application required a lot of hacking.
On my first day a guy called Freddy slouched into the office and introduced himself.
"Good to meet you, Freddy."
"I don't feel so good. I only got to be the new guy for about three days before you arrived."
He laughed. I didn't like his smile. "Just kidding."
I smiled and nodded.
"You're going to learn to hate me," said Freddy, still grinning. "I'm the Product Manager."
During my first week Judd let it be known that the pressure was on for a release, although the software was nowhere close to being ready. Benjamin sighed and said we were going to have to work through the weekend.
"No way," I said. "I don't have a visa and right now I'm only here in the office out of the goodness of my heart. No way am I coming in on the weekend."
Freddy gave me a narrow look. "This one's trouble," he said loudly. "Better keep an eye on him."
I shrugged him off and got back to work. He had no idea about my work status and I did not feel like filling him in. Freddy had already advised me that I should hate him and I decided to take him at his word. Rarely have I misjudged anybody as badly as I did Freddy.
About a month into my trial period my visa transfer arrived. Marge came to me to get my bank details and to set up with health insurance.
Then Judd came to me and said "So, man, this signing bonus is going to be a problem."
"Oh, really?"
"Yes, well, the thing is, we've never paid one before, and we don't think it sets a good example to pay one now."
"But you know it's not really a signing bonus. It's my salary."
He looked away. "Well, yes, that's right. Hey, tell you what. I'll make it up to you by paying you the at the rate that you're not supposed to get until after your trial period."
I did some mental calculations. I was out one month's pay and the difference in salary for the remaining two months of my trial period was not even close to covering it. In any case, they were legally obliged to pay me the higher rate.
ATB had decided not to pay me for the month during which I had worked for them illegally, against my lawyer's advice, risking deportation. They were clearly doing it because they knew they could.
They had me over a barrel. I was cheap, the economy was terrible, and I had two options: quit and go home to Australia or suck it up and stay.
I'd worked hard to be there and my self-esteem had taken a beating through the redundancy. Donna put pressure on me and I decided I would stay.
The fun was just beginning.
Wednesday, 28 November 2012
The Once and Future Programmer
I must have sent out twenty resumes before I landed in North America.
Starting in Ontario I traveled up and down the East Coast, traveling as far south as Florida visiting friends a looking for jobs. I probably sent out sixty or eighty more resumes while I was doing this. I sent one out to the then-struggling Amazon.com in Seattle but that was the only job I looked at on the West Coast. I did not receive a single reply.
(Ten years later, Amazon recruiters would actually contact me and ask if I was interested in moving back to the States. I assume that this was due to a more current resume of mine leaking into their channels.)
It wasn't easy. These were the days when pre-paid mobile phones did not have 'roaming' capabilities. I struggled to acquire a phone that would allow me to roam across the USA without having an address or a local credit card.
I sent resumes ahead of myself to companies at every major destination I was heading to and once I arrived in a city I spent a lot of time combing the local newspapers for ads, although even then most of the jobs I applied for were through online ads.
In Boston I went through the phone book, looking for tech companies to cold call. After getting blasted over the line by one such company ("How can you come here and ask me for a job when I just let twenty engineers go?!") I gave up on that approach. Some friends of mine in introduced me to some of their friends in the industry as 'the once and future programmer' but I left Boston with nothing.
In Florida I replied to a newspaper ad that explicitly welcomed applications from foreigners. Nothing.
I lit out for the Pacific Northwest. This was the end of my trip. Next I was going to head down to LA and them back to Australia. I told myself I was on holiday and I tried to enjoy it. I was in Vancouver when the Florida company called me up for a phone interview.
I did the interview but they didn't invite me to an in-person interview at the end of it, so I went on to Seattle, and then to LA, as planned. I was in the Getty Museum with about two days until my flight home when they called me and invited me to an interview.
I moved my flight home out and got on a plane back to Florida. I was running out of time and funds; it was probably my last and only chance to find employment in America.
The interview went well. There was a coding paper-test, but it was blindingly easy. "Write a stack class," it said. They did not tell me what kind of objects they wanted to stack. They gave me half an hour.
I wrote this:
class StackableObject;
std::stack< std::vector< StackableObject > > stackOfStackableObjects;
After contemplating my handiwork for about twenty seconds I decided that perhaps they would construe that as a smart-arse answer, so I sat down again and wrote out a template-based stack class based on a linked list. If I thought my efforts would impress anybody, I was mistaken.
"Oh," said the Abhiraj, the most senior engineer at the company. "You used a template."
I would later learn that his apathy was due to the fact that Abhiraj himself did not understand templates. But I passed the test, because another thing that I would later learn was that all he had wanted to see in my answer was that I provided a constructor and a destructor. To this day I believe that this was the extent of Abhiraj's knowledge of Object Oriented programming practices.
They offered me a job. The salary was nearly 20% less than the one offered to me by the job I had refused in Silicon Valley. I made a small attempt to negotiate, but they very well knew that I didn't have any other options. I took the job.
The process dragged on. They told me that they had expedited my work visa and that it would be two weeks, but soon four weeks had elapsed. I into a cheap motel where the AC didn't work near the office and lived off the groceries I could keep in the bar fridge.
Eventually the company called me up again. Somebody had stuffed something up and instead of flitting up to Mexico or Canada to get processed I would have to fly home to Australia to get my visa stamp--at my own expense.
So I went home. I duly took all of my paperwork to the American consulate and the visa was granted. I left them my passport they told me that I could collect it on September the 12th. The year was 2001.
Starting in Ontario I traveled up and down the East Coast, traveling as far south as Florida visiting friends a looking for jobs. I probably sent out sixty or eighty more resumes while I was doing this. I sent one out to the then-struggling Amazon.com in Seattle but that was the only job I looked at on the West Coast. I did not receive a single reply.
(Ten years later, Amazon recruiters would actually contact me and ask if I was interested in moving back to the States. I assume that this was due to a more current resume of mine leaking into their channels.)
It wasn't easy. These were the days when pre-paid mobile phones did not have 'roaming' capabilities. I struggled to acquire a phone that would allow me to roam across the USA without having an address or a local credit card.
I sent resumes ahead of myself to companies at every major destination I was heading to and once I arrived in a city I spent a lot of time combing the local newspapers for ads, although even then most of the jobs I applied for were through online ads.
In Boston I went through the phone book, looking for tech companies to cold call. After getting blasted over the line by one such company ("How can you come here and ask me for a job when I just let twenty engineers go?!") I gave up on that approach. Some friends of mine in introduced me to some of their friends in the industry as 'the once and future programmer' but I left Boston with nothing.
In Florida I replied to a newspaper ad that explicitly welcomed applications from foreigners. Nothing.
I lit out for the Pacific Northwest. This was the end of my trip. Next I was going to head down to LA and them back to Australia. I told myself I was on holiday and I tried to enjoy it. I was in Vancouver when the Florida company called me up for a phone interview.
I did the interview but they didn't invite me to an in-person interview at the end of it, so I went on to Seattle, and then to LA, as planned. I was in the Getty Museum with about two days until my flight home when they called me and invited me to an interview.
I moved my flight home out and got on a plane back to Florida. I was running out of time and funds; it was probably my last and only chance to find employment in America.
The interview went well. There was a coding paper-test, but it was blindingly easy. "Write a stack class," it said. They did not tell me what kind of objects they wanted to stack. They gave me half an hour.
I wrote this:
class StackableObject;
std::stack< std::vector< StackableObject > > stackOfStackableObjects;
After contemplating my handiwork for about twenty seconds I decided that perhaps they would construe that as a smart-arse answer, so I sat down again and wrote out a template-based stack class based on a linked list. If I thought my efforts would impress anybody, I was mistaken.
"Oh," said the Abhiraj, the most senior engineer at the company. "You used a template."
I would later learn that his apathy was due to the fact that Abhiraj himself did not understand templates. But I passed the test, because another thing that I would later learn was that all he had wanted to see in my answer was that I provided a constructor and a destructor. To this day I believe that this was the extent of Abhiraj's knowledge of Object Oriented programming practices.
They offered me a job. The salary was nearly 20% less than the one offered to me by the job I had refused in Silicon Valley. I made a small attempt to negotiate, but they very well knew that I didn't have any other options. I took the job.
The process dragged on. They told me that they had expedited my work visa and that it would be two weeks, but soon four weeks had elapsed. I into a cheap motel where the AC didn't work near the office and lived off the groceries I could keep in the bar fridge.
Eventually the company called me up again. Somebody had stuffed something up and instead of flitting up to Mexico or Canada to get processed I would have to fly home to Australia to get my visa stamp--at my own expense.
So I went home. I duly took all of my paperwork to the American consulate and the visa was granted. I left them my passport they told me that I could collect it on September the 12th. The year was 2001.
Sunday, 25 December 2011
Dude, Where's My Car?
I needed a new job. The IT business was booming over in the US and relatives were beginning to ask me when I would be opening my own startup and raking in those easy VC millions. This was December of the year 2000. I didn't want to start up on my own, but I'd been to the US a couple of times and I wanted to go there. The US was the real world.
I was bored with Tigerland. I was bored with database programming; I felt like I'd been there and done that. What I really wanted to do was graphics programming, so I bought an OpenGL textbook and started to teach myself some new tools. 3D was a lot easier with real libraries than it had been at University. I took my 3D projects with me to work and I worked on them at lunch time, much to Meggs' chargrin. It was quite obvious that the code I was playing with had nothing to do with Tigerland's business.
I had also started looking into what it would take to get me over to the US. An H1B skilled worker visa seemed to be the trick. I found an ad in the IT section of the Age newspaper (in a few years' time this section would be discontinued, and IT jobs would vanish almost entirely from Melbourne's biggest broadsheet newspaper). They were looking for programmers who wanted to work in the USA, so I sent in a resume. A couple of days later I received a phonecall inviting me to interview.
I called in sick on the scheduled day, put on my suit, and went in to the temporary office from which the Americans were conducting interviews.
The receptionist gave me a questionnaire to fill out. The only question I remember from it was "What is the minimum salary you are prepared to work for?" I knew roughly what that should be, so I answered it truthfully. Stupidly.
The Americans turned out to be a pair of Indians. The interview turned out to be piss easy. A C++ test that was much easier than the Tigerland test and some verbal long-answer questions about broader topics, like multiple inheritance. I breezed through it.
The company was a big contracting firm based in Silicon Valley. The Americans sold it to me pretty hard--the lifestyle, the location. "Oh, you like SCUBA diving? There's amazing diving in California." They told me all about the benefits: medical, dental, a relocation bonus... I was pleased, but in the back of my mind, there was doubt. There was a used car salesman vibe to the whole thing. I just didn't trust them.
The Americans' offer letter went into the mail the next day. A complete package: contracts, visa paperwork, the whole nine yards. The offer was for that minimum salary I had indicated. There was no relocation bonus in the contract and a few other promises were also missing. The Americans called me and asked me if I would accept it. Salary was not negotiable. They claimed that the missing contract items were in fact there. I told them I was thinking about it.
I rechecked the contract. The missing clauses were definitely not there. I had, meanwhile, been reading about the cost of living in Silicon Valley and I was becoming worried about it. One article spoke of a how the mayor of one of the municipalities there had had to resign because he couldn't afford to live there any longer. A friend of mine who lived in the States who and had some experience with budgeting crunched some numbers for me, and it looked as if I could scrape by on my non-negotiable salary... barely.
I wanted to go, but I didn't trust the company and I really couldn't afford Silicon Valley. I told them no. They tried hard to change my mind, but not so hard that they offered me more money. I walked away from the table... (my willingness to do this has been at various times an asset and a liability, across the intervening span of my career)... but now I had a plan.
It had been ridiculously easy to get that job offer, I reasoned, and I hadn't even left home. How many more opportunities would I find if I actually went over there in person?
I was going to do it, early in the new year. I figured how much money I thought I would need to go over there prospecting and calculated a departure date based on that. I remember doing that quite vividly. I was by myself, walking down the street at lunch time. The sky was blue and I would soon be free.
Amos was back in town and the talk was that he was thinking about coming back, if there was room for him. I went to the technical director and I said told him that I was planning to leave, in case it had any bearing on whether he would hire Amos back or not. He did not seem surprised.
I went back to work. The days passed. I worked hard to close off everything that was assigned to me. Meggs didn't talk to me any more than he had to, and that was fine.
A few weeks later the MD invited me to the pub at lunch time and told me that Meggs had instructed him to dissuade me from leaving. He offered me money. I told him that my decision was made. I was going to the US. I also mentioned that the money he had offered wouldn't have been enough, either. He was shocked when I told him what the going rate for a developer with a couple of years experience was, but I knew what I was talking about and I had statistics to back me up.
We had drinks down the pub on my last day. I got monstrously drunk and Guthrie told me I could crash at his house, which was a lot nearer to the pub than my own. I threw up in the taxi. The following morning Guthrie offered to drive me home... whereupon we discovered that his car had been stolen. The film "Dude, Where's My Car?" was then playing in the cinemas and I thought he was playing a joke on me.
Still, Guthrie told me that despite all of the trouble, it was a very good week for him indeed: the directors had paid attention when I told them what kind of money we were worth and he found himself on the receiving end of a very large payrise once I was out the door.
As for me, I was bound for the United States. By then, of course, there was a new phrase in the air: dotcom bubble. One of our own ministers boasted that we hadn't been wiped out because we'd failed to catch the wave in the first place. But I was already on my way.
I would find out for myself just how much blood was in the water.
Subscribe to:
Posts (Atom)