tag:blogger.com,1999:blog-46539500919082768562024-03-14T12:19:10.318+11:00Unsugared SyntaxMy ridiculous life as a software engineer. Sugarcoating not included.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.comBlogger44125tag:blogger.com,1999:blog-4653950091908276856.post-73126614789888061422014-10-29T17:21:00.000+11:002014-10-29T17:21:06.446+11:00Living on the Edge of the Night<br />
I went back to the Cool Team and found myself as bored as ever.<br />
<br />
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.<br />
<br />
It was November when I got call I was expecting from Elvis. This was it, I thought. Reassigned to the Enterprise team under Irwin.<br />
<br />
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.<br />
<br />
"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." <br />
<br />
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?"<br />
<br />
Elvis dismissed my concern with a wave of his hand. "Vikram already built it."<br />
<br />
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.<br />
"From now on," said Elvis, "You report to Trent."<br />
Vikram spluttered angrily. He has been reporting directly to Elvis for about six months, apparently. "Oh," said Elvis. "Not you, Vikram."<br />
<br />
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.<br />
<br />
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.<br />
<br />
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 room.to see that we were all situated okay. <br />
<br />
At least I wasn't bored anymore.<br />
<br />
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."<br />
"Okay."<br />
"So," he said. "I see that you've worked on every team in the company at one point or another."<br />
"Yeah," I said. "I've been here longer than every other engineer, too." I didn't feel even slightly proud of that achievement.<br />
"Well, you're on my team now, and you're here to stay," he said. "No more team-hopping. You understand?"<br />
"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."<br />
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. <br />
"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."<br />
"Sounds good to me," I said. I meant every word of that. Finally, a chance to do some things my way.<br />
<br />
Now all we needed was for Elvis to tell us exactly what it was that I was supposed to be doing.<br />
<br />
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.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com1tag:blogger.com,1999:blog-4653950091908276856.post-79583651064812271062014-10-22T17:50:00.002+11:002014-10-22T17:50:39.587+11:00Seek and DestroyAs 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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
That wasn't really my problem, though. <br />
<br />
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.<br />
<br />
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.<br />
<br />
I worked this out over the following sixty hours. Nobody was keen to spell out the situation for me.<br />
<br />
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. <br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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. <br />
<br />
Adam and I went back to our homes; the last to leave the office again; pissed off and exhausted.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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. <br />
<br />
I didn't feel like I was weapons-grade anything; I felt like nuclear waste. Once again I started making plans to leave.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-38085076934493102722014-10-17T15:54:00.000+11:002014-10-21T10:05:41.761+11:00Chairman of the Bored<br />
Life on the cool team was cruisey.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
That was life on the cool team.<br />
<br />
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.<br />
<br />
That was okay.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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. <br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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."<br />
"And what kind of coverage are we getting for live occurrences?"<br />
"I don't know. We haven't tested that."<br />
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?"<br />
"Twenty two!"<br />
The number of different scenarios Ralf's product would have to deal with was numbered in the tens of thousands and growing exponentially.<br />
"I see," said Judd, who turned around and went back the way he had come.<br />
<br />
That was the last time I ever saw the QA manager. Perhaps he went back to NASA.<br />
<br />
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.<br />
<br />
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?"<br />
"Hey, Pike," said Elvis. "You're familiar with the Crypto API, right?"<br />
"Yeah, we used that on the old product," I said.<br />
"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."<br />
"Alright." Irwin himself was nowhere in sight.<br />
"Come in at 2am and Irwin will get you started."<br />
I don't know how long I stood there with my mouth open before I thought up a response.<br />
<br />
"Okay," I said.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-22898522789784660582014-10-13T22:42:00.002+11:002014-10-13T22:42:18.510+11:00Down On The StreetWith Benjamin gone I suddenly had twice the workload.<br />
<br />
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, <i>if </i>you knew what you were doing and <i>if</i> everything went right the first time.<br />
<br />
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. <br />
<br />
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!<br />
<br />
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. <br />
<br />
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. <br />
<br />
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.<br />
<br />
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. <br />
<br />
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.<br />
<br />
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.<br />
<br />
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'.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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. <br />
<br />
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 <a href="http://en.wikipedia.org/wiki/SOAP" target="_blank">SOAP</a>. They provided me with a <a href="http://en.wikipedia.org/wiki/Web_Services_Description_Language" target="_blank">WSDL </a>file with I shouldould be able to automatically generate all of the code needed to achieve this.<br />
<br />
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".<br />
<br />
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. <br />
<br />
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...<br />
<br />
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?"<br />
<br />
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!<br />
<br />
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. <br />
<br />
My product went into QA. They found two bugs, which I promptly fixed in a single afternoon, and the product shipped. <br />
<br />
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.<br />
<br />
I was on the Cool Team, effective immediately.<br />
<br />
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 <br />
<br />
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.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-63024671111966882822014-10-10T23:38:00.000+11:002014-10-10T23:38:15.422+11:00Dog FoodI returned to ATB after my holiday back in Australia with reluctance. <br />
<br />
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.<br />
<br />
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. <br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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. <br />
<br />
These games generally took place at Benjamin's desk during lunchtime, or around lunchtime, or sometimes whenever Benjamin felt like it. <br />
<br />
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.<br />
<br />
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.<br />
<br />
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."<br />
"Oh? Who else is on my team?" <br />
"Uh, just you."<br />
They told me how much. It was still substantially less than all the new engineers were getting. <br />
I might have taken it, but I'd already decided I was going. "It's not enough." <br />
The President spluttered that I was an ungrateful wretch. "I should fire you right here on the spot!"<br />
I shrugged.I was ready to leave. <br />
"You were always in here, demanding more money... and all the books we bought you... and... "<br />
"That was Benjamin. And you never bought me any books."<br />
"Yes, well..."<br />
"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."<br />
"What? Nonsense! Who did such a thing?!"<br />
I shrugged apologetically at Judd. "He did."<br />
<br />
The CEO was furious. "Well, how much do you want?"<br />
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.<br />
I wasn't greedy. I named the same figure all the new guys were getting.<br />
The CEO agreed. He was red with anger by the time I left his office.<br />
<br />
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.<br />
<br />
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.<br />
<br />
<br />
<br />
<br />Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-18105054188321217622014-09-30T14:53:00.004+10:002014-10-12T20:24:04.867+11:00Raw Power<br />
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.<br />
<br />
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. <br />
<br />
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.<br />
<br />
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 <br />
<br />
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. <br />
<br />
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.<br />
<br />
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. <br />
<br />
Benjamin and I didn't speak for days after that. I delivered the feature and the matter was never raised again. <br />
<br />
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.<br />
<br />
Elvis told there were plans to rent a floor in the 12 storey office block next door. I wasn't sure I believed him.<br />
<br />
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.<br />
<br />
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. <br />
<br />
Within the space of about a month my workspace had gone from a tomb to a barn to a sardine can. It was bewildering. <br />
<br />
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.<br />
<br />
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.<br />
<br />
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. <br />
<br />
One Monday morning, when the new hires were announced at the staff meeting, Benjamin turned to me with an expression of shock.<br />
"That guy."<br />
"What?"<br />
"That guy." The guy he indicated was a huge individual with cokebottle glasses and some kind of obvious social disorder. <br />
"I tested him on Friday and he got zero. ZERO. Couldn't answer a single question on the test. Elvis hired him anyway."<br />
<br />
When Benjamin buttonholed Elvis about it he said "The guy was nervous. He sent me some work samples from home and they were good."<br />
<br />
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. <br />
<br />
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."<br />
<br />
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.<br />
"I bet you twenty," I said, hoping to price myself out of the proposition. I knew Benjamin was a cheapskate.<br />
He thought long and hard about it, but in the end he decided to take the bet.<br />
<br />
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. <br />
<br />
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.<br />
<br />
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.<br />
"Thanks, Judd."<br />
"It's to make sure you come back," he said, grinning.<br />
I just looked at him. "You really think I'd just leave like that?"<br />
"Well, not really..."<br />
Without taking the pleasure of slapping a resignation form down on his desk? Did he think I was stupid? <br />
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.<br />
<br />
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.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-48402218981989292692014-09-13T17:42:00.001+10:002014-10-10T23:31:05.943+11:00Skull RingThings at Across the Bay got weird very quickly.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
"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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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?"<br />
"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.<br />
"I think you'll nail it in three days," said Benjamin.<br />
<br />
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.<br />
<br />
The next morning, Judd sidled over and said "So, how's that monster problem going, Pike?"<br />
"Oh, I took care of it."<br />
"Wow, that was quick. What was it, in the end?"<br />
"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.<br />
<br />
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.<br />
<br />
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...<br />
<br />
... 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.<br />
<br />
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.<br />
<br />
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. Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-68130753702319676002014-08-27T16:02:00.000+10:002014-10-12T20:17:29.501+11:00FunhouseThe 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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
When I arrived at work on my first day I found Benjamin frantically checking code into <a href="http://en.wikipedia.org/wiki/Microsoft_Visual_SourceSafe" target="_blank">Source Safe</a>. 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.<br />
<br />
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 <a href="http://www.google.com.au/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB8QFjAA&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCommand-line_interface&ei=wmr9U9XjIpKyuASf1oDoDg&usg=AFQjCNGqP3Aq8voePDjiwcRuTfyRExRwbA&sig2=lburoBzgEBs3afJLkf7N-Q&bvm=bv.74035653,d.c2E" target="_blank">command-line interface</a>. Our only selling point was cheaper licensing terms than the base product, which had its own superior GUI.<br />
<br />
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.<br />
<br />
For this purpose Benjamin had written a <a href="http://en.wikipedia.org/wiki/Data_scraping" target="_blank">screen scraper</a>, 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. <br />
<br />
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.<br />
<br />
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. <br />
<br />
On my first day a guy called Freddy slouched into the office and introduced himself.<br />
"Good to meet you, Freddy."<br />
"I don't feel so good. I only got to be the new guy for about three days before you arrived."<br />
He laughed. I didn't like his smile. "Just kidding."<br />
I smiled and nodded.<br />
"You're going to learn to hate me," said Freddy, still grinning. "I'm the Product Manager."<br />
<br />
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.<br />
<br />
"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."<br />
<br />
Freddy gave me a narrow look. "This one's trouble," he said loudly. "Better keep an eye on him."<br />
<br />
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. <br />
<br />
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.<br />
<br />
Then Judd came to me and said "So, man, this signing bonus is going to be a problem."<br />
"Oh, really?"<br />
"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."<br />
"But you know it's not really a signing bonus. It's my salary."<br />
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."<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
The fun was just beginning.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-67880268210655985442012-11-28T21:10:00.000+11:002012-11-28T21:10:01.015+11:00The Once and Future ProgrammerI must have sent out twenty resumes before I landed in North America.<br />
<br />
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.<br />
<br />
(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.)<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
In Florida I replied to a newspaper ad that explicitly welcomed applications from foreigners. Nothing.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
I wrote this:<br />
<br />
class StackableObject;<br />
<br />
std::stack< std::vector< StackableObject > > stackOfStackableObjects;<br />
<br />
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.<br />
<br />
"Oh," said the Abhiraj, the most senior engineer at the company. "You used a template."<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-20785329901185317462011-12-25T20:12:00.001+11:002012-01-30T20:41:17.954+11:00Dude, Where's My Car?<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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?<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
I would find out for myself just how much blood was in the water.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-35710106865245616542011-11-07T20:03:00.000+11:002011-12-25T20:01:07.047+11:00Riding the TigerAmos left at the start of my second year at Tigerland and Meggs took over his role, as well as continuing with his own duties. The first thing that he needed to do was to replace Amos.<br />
<br />
Meggs decided that he needed someone pretty serious to replace his compadre; somebody both skilled and experienced. And so he set about interviewing candidates for the role of a senior developer.<br />
<br />
I was not present for any of the interviews, but I heard about what had happened from the technical director and from Meggs himself. Meggs reduced at least one candidate to tears during the interview process. For other candidates, if they were not doing well enough in the testing, he would get up and leave the room without saying a word.<br />
<br />
Eventually, Meggs settled on a developer named Ivan. He didn't particularly like Ivan, but he was the only candidate who had actually passed Meggs' testing and soon enough Ivan joined us in the fishbowl. Ivan was very pleased to be in the role, and he expressed to me his delight about how much he was learning from Meggs, about how great a pleasure it was to be exposed to an intellect like that. No matter how badly Meggs treated him, Ivan seemed to be okay with it. I have never seen anything like it before or since.<br />
<br />
Every day, for a solid half an hour just prior to lunchtime, Meggs would stand over Ivan and bellow at him; insulting his work, his integrity, his experience and his intelligence. I remember Ivan's work being clean and tight and clear. He met all of Meggs' style guidelines and everything I ever saw of it looked good. Ivan was the only candidate who passed Meggs' screening; I'm pretty sure the problem was not actually in his court. Meggs liked to be feared, and without his friend Amos to snicker about it with he was probably lonely as well.<br />
<br />
I started having my own problems with Meggs. His desk was abotu a meter and a half from my own and he started watching me over my shoulder. Meggs decided that I was compiling the source code a bit too often, which was costing me a valuable half minute or two each time I pressed F9. "Jared. You only need to recompile the module you're working in. Be more productive." Meggs' own productivity was tailing off, because, for one thing, he was spending so much time watching me when he wasn't yelling at Ivan.<br />
<br />
Meggs assigned me a fairly complicated piece of logic to do involving persistent locking. My first attempt was a failure; I hadn't understood the idea of it properly and it didn't work when there was more than one client connected (which defeated the purpose of the exercise). Barely controlling his impatience, Meggs explained it in more detail, and even drew me a picture on a scrap of paper and told me to build it. This was the first time I'd ever been shown a design drawing for anything at Tigerland... and, let me be honest, through the rest of my career, I've rarely seen a design drawing for anything that I didn't author myself. I any case, it made an impression on me.<br />
<br />
This time I understood what was going on properly. I looked at the design carefully and I noticed what looked like a bad side effect. "No, that's the behaviour I want," said Meggs.<br />
"Well, okay, then," I said.<br />
<br />
I went and set up the locking the way he had asked. When the task was done he code reviewed it and I checked it in... and then I threw away the drawing.<br />
<br />
About two weeks later, I found myself on the receiving end of a tongue-lashing on the same scale as the ones Ivan was subjected to. "Pikeman! This locking system you built is rubbish! Have you seen this side effect?"<br />
"Meggs, I told you that was going to happen."<br />
"I would never have agreed to that!"<br />
"But... it was your design! I built it exactly the way you asked me to! You even drew me a picture!"<br />
"Where's this picture, then?"<br />
I've never thrown away a design drawing since.<br />
<br />
By now Meggs had stopped contributing any code to the product. Ivan was building a special new feature, but it was Guthrie and I doing 80% of the work fixing bugs and migrating across to the new design. But it wasn't just the architecture changing. Meggs was making ad hoc changes to the feature set and functionality as we went.<br />
<br />
Meanwhile, I was becoming more and more interested in the design of the new infrastructure. I suggested to Meggs that it would be really nice if you could tell the framework what the cardinal relationship between different kinds of entities was and have it generate queries based on that. Meggs agreed that it was a good idea and he added some code that did indeed identify the relationships... but it was cosmetic only. None of the smarts I wanted to build were present. In hindsight, I think this actually half-assed attempt at an apology. I didn't criticize it but he could see I was disappointed.<br />
<br />
The technical director could see that things were going badly. We'd barely enough money to cover costs during the year and the software was badly behind schedule. This latter problem was entirely due to the fact that Meggs kept moving the goalposts; making the design more and more elaborate and forcing us to constantly rework what we had done. He hadn't stopped coding himself, but he was coding a hobbyhorse project that had nothing to do with the work we were putting to market. Aware that something was amiss, the technical director instituted weekly development meetings.<br />
<br />
These only made it worse. Meggs began to use the forums to taking credit for other people's ideas. Most usually, those ideas were mine. Sometimes Meggs would get the ideas wrong and miss the point... and if I would pipe up to correct him he would repeat what I said back to me, in front of the whole room, as if I was too dense to understand them.<br />
<br />
Suddenly I was no longer afraid of Meggs anymore. I had learned a lot from him, but I knew that he was no longer this infallible font of technical wisdom. He had taught me that the design was the most important part of an engineer's job and I was going to stand by that principal, regardless of his sensitive ego.<br />
<br />
Meggs' new design ideas were all to do with preventing programmers from making mistakes where his framework became unintuitive or failed to handle errors well, and I was assigned the task of making the little classes that would enforce this... classes that soon be scattered through the codebase like a bucket full or rabbit pellets. I didn't complain, but I became sly about it, and I started making these turd classes more and more elaborate; decorating them with superfluous template parameters and inheritance hierarchies. These exquisitely-polished turds passed through Meggs' formerly-rigorous code reviews without comment. I turned one of these projects (a particularly bad mixed-metaphor turd class) into a three-week-long project which to this day is one of the most conceptually-complicated and difficult pieces of technology I've ever worked on.<br />
<br />
Meggs was even less attentive than ever, and Ivan was copping worse and worse abuse every day. In a bid to get me out of his hair, Meggs assigned me to port one of the biggest modules in the product across to his new framework, with a number or revisions to the functionality that he laid out in an email.<br />
<br />
It was a disaster. If we'd ported the module as it was that would all have been fine, but the functionality changes were going to take a module that was compact and well featured and useful and turn it into something no customer would ever have a use for. Usually I wouldn't have known or cared about the customer's end of the experience, but we used that module internally to manage our development database, so, unlike some other areas of the application, I knew it inside out. The development team used that module on a daily basis in the same way that our customers did.<br />
<br />
I told Meggs it was a bad idea. We argued loudly about it for a full day, but I refused to give ground. We left it over the weekend and took it to the development meeting the following monday morning.<br />
<br />
Words got heated, but there was no yelling. Eventually the technical director threw up his hands and said "Pike, just do it the way Meggs wants it."<br />
<br />
I went back to my desk and went to it like a man possessed. I was determined to get the work done as quickly as possible so that Meggs could see what a disaster it was before he forgot the arguments and blamed me for it. I didn't speak a word, I don't think I took a lunch break. I don't think I have ever produced as much code as I did in the following forty eight hours.<br />
<br />
Once I had written most of the code and fallen once more into the sleepy cycles that followed which involved running the regression test suite and writing new tests... but mostly staring at the screen while the tests executed... once the anger started to fade... I realized that it was a futile exercise.<br />
<br />
I have a vivid memory of going to a camera store with my mother when I was a boy. There had been some problem in developing a roll of holiday snaps and my mother was furious. The man in the camera store was an old Indian man. He stayed calm and my mother settled down. Once they had reached a peaceable agreement, he told her that he was glad. "You came in here riding the tiger," he said. "But don't you feel better now that you have climbed off?"<br />
<br />
That was what I had to do. It was time to climb down from the tiger.<br />
<br />
<br />Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-14119709944215512512011-10-13T20:59:00.002+11:002011-10-13T20:59:45.960+11:00Sugar Fixed... and we're back. Sorry for the disruption, folks.<br />
<br />
I've begun working on the next entry now and it should be up over the weekend or early next week.<br />
<br />
-- PikePikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-13720271064741850012011-09-25T15:54:00.000+10:002011-09-25T15:54:20.836+10:00Sugar FixHey, guys and girls,<br />
<br />
I realize that it's been a couple of weeks since the last sugar fix. I have been moving and it's curtailed the amount of time I've had to write on here. It may be another week or two but, rest assured, the blogging will continue!<br />
<br />
PikePikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-49096062509328537492011-09-07T16:38:00.000+10:002014-08-27T15:05:01.468+10:00Tiger StripesGuthrie and I settled in at Tigerland fairly quickly. We were given a number of small problems to solve, and these would be rigorously code-reviewed by the senior developers before we could check them in. Sometimes they'd send me back two or three times before I solved the problem to their satisfaction.<br />
<br />
I subjected Meggs, who sat nearest to me, with a constant barrage of questions. How should I implement this? What did it mean? What was the best approach? What impact would it have? He answered all of them with patience, and I sucked the information up like a sponge.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Guthrie and I had a few problems when I came to procedure. Neither of us had worked in a commercial coding environment before, and with a home-grown version control system things had to be done a particular way. I actually broke the version control system a couple of times, until Meggs made me fix the holes I found by using it incorrectly. That's right: I had to actually code part of the version control system, which was a horrible mess of batch files and command-line C applications that called into each other recursively.<br />
<br />
Meggs and Amos had more stringent procedures of any place I've worked since. Eventually they set down a formalized work procedure, and Guthrie and I were told that failure to comply was a 'sackable offense'. It went something like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilQ6fXK022EXcCslzoxMcfoKudWs4kGaRDAnLWe7va68meixXZ_qdBfUdC0c2ShsNqWo0TkrrdsZI6VVMSMTaLk77Z7T3snyKfbSoRTe4GfCvPjzUNVcCQMpHlAMFwF4D85Z4pOUde07o/s1600/vcs.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilQ6fXK022EXcCslzoxMcfoKudWs4kGaRDAnLWe7va68meixXZ_qdBfUdC0c2ShsNqWo0TkrrdsZI6VVMSMTaLk77Z7T3snyKfbSoRTe4GfCvPjzUNVcCQMpHlAMFwF4D85Z4pOUde07o/s1600/vcs.png" /></a></div>
<br />
<ul>
<li>Code until the problem is solved.</li>
<li>Execute the automated regression test scripts to make sure that nothing has broken.</li>
<li>Write new scripts to test what you have just written or fixed.</li>
<li>Merge down any changes that other developers have checked in while you completed your task.</li>
<li>Code review.</li>
<li>Adjust solution as per review.</li>
<li>Merge.</li>
<li>Run scripts.</li>
<li>Code Review.</li>
<li>Checkin.</li>
</ul>
<br />
It was a laborious way to work, but it did have certain benefits. We didn't have 100% coverage in the test scripts, but it meant that we could cut a release straight from version control and be assured that the greater portion of the software still ran properly. And we did have Jing writing scripts full time, so the coverage was always improving.<br />
<br />
I learned a lot of things in that first year, particularly from Meggs. Meggs very smart and very volatile guy, but certainly it the best programmer I had ever met at that stage. He had a lot of ideas and techniques that I didn't see put into practice elsewhere for a good five years. He was very quick to leverage advanced features of the language and very keen for me and Guthrie to learn about them. Despite being the rawest of junior coders, I was exposed to the <a href="http://en.wikipedia.org/wiki/Standard_Template_Library">Standard Template Library</a> well in advance of the majority of programmers in the field.<br />
<br />
Meggs also taught me the primacy of design; of keeping the big picture in mind no matter how far down the rabbit hole of implementation went. No design is perfect, but it's better to have a design that's wrong than to have no design at all. You can fix a design that is obsolete, inappropriate or invalid, but if there's no design the chances are that you will have to throw out the codebase and start over. That was the best lesson about software development that I ever learned.<br />
<br />
I'll go further: I learned more about programming from Meggs in that first year than I did from anyone else, at school or in the workplace.<br />
<br />
Senior management decided that they wanted the software to start running on top of a third database engine. Meggs took some meetings with a consultant from the DB vendor and, when the vendor delivered us software, I asked if I could have a copy to play with on my work machine. Meggs ignored my request and assigned me a different task: to upgrade the database connectivity to be in compliance with the <a href="http://en.wikipedia.org/wiki/ODBC">ODBC</a> 3.0 standard. It wasn't an easy task, but it gave me a good look into the guts of the application and I took to it with relish. I didn't realize that it was a test.<br />
<br />
Once I had successfully completed that task, Meggs gave me the CDs for the new database engine. "You asked for it, you got it," he said. "Your new task is to the database port."<br />
<br />
I spent two solid months on it. The new engine was quite unlike the two we already supported and getting it to work sent me chasing all through the codebase. I learned a hell of a lot about how the software really worked, under the covers. Eventually, I cracked it. There was one case where the test scripts didn't report the same information due to an in-built behaviour in the database engine, but the behaviour was still correct (just a little different) and Meggs agreed that everything was honky dory. I modified the test scripts to allow it and checked it in, happy as Larry.<br />
<br />
I'm pretty sure that not even one client ever bought the product for use on the new engine. Certainly, the support documentation was never updated to reflect the third engine and none of the project managers ever came to ask me how to set one up. There was a fourth engine that customers <i>did</i> want to use, and which had long been promised to them, but that was simply not on the schedule. The most important thing, as far as management was concerned, was that we could put the logo of the new database vendor on the packaging. We could boast some kind of a formal partner relationship to them.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRKgAkDG2_by73N7yaLvFQ_eCyALPXzAF58DDvuugXm31LoTxuMD9hgvykMkkdk5XLE5ycXtwd3MYNXxF8WUoG-3xjHiSwEyv1cSaNwzhoKupH-MjVgdsRrL2pi1Kf1EOkpbCVyWyOKME/s1600/corporal.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRKgAkDG2_by73N7yaLvFQ_eCyALPXzAF58DDvuugXm31LoTxuMD9hgvykMkkdk5XLE5ycXtwd3MYNXxF8WUoG-3xjHiSwEyv1cSaNwzhoKupH-MjVgdsRrL2pi1Kf1EOkpbCVyWyOKME/s200/corporal.jpg" height="161" width="200" /></a></div>
<br />
But I didn't give a hoot. I knew I'd earned my stripes. I had about one year of solid experience and for the first time I felt as if I was a competent programmer. I couldn't have asked for much more out of my first year on the job, and I was looking forward to seeing what new challenges would arise.<br />
<br />
I had no idea those challenges would be social, rather than technical.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-89776611859022323182011-08-28T12:26:00.000+10:002011-08-28T12:26:29.438+10:00Enter the Dragon<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8m9adjIAPm6kGkTvT5BLVU-NB9yMdvWLHscI82sCVW3iZG_AVDZ_tmqkxXlnwufURAxNXaeC8mbmM_qLhfjnEk7E6Ssvon4ZtApE5hrvcl7CRL4RPR4oQzHtjhTMOy8eQq9RevMSAfis/s1600/enter_the_dragon.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8m9adjIAPm6kGkTvT5BLVU-NB9yMdvWLHscI82sCVW3iZG_AVDZ_tmqkxXlnwufURAxNXaeC8mbmM_qLhfjnEk7E6Ssvon4ZtApE5hrvcl7CRL4RPR4oQzHtjhTMOy8eQq9RevMSAfis/s320/enter_the_dragon.jpg" width="214" /></a></div>When I rolled up at Tigerland on my first day, wearing my brand new suit, there was another lanky young guy hanging around outside the front doors looking uncomfortable in his office clothes. Being razorminded deductive prodigies fresh from our nations shining institutions of tertiary education, we quickly worked out that they'd hired two graduate programmers, and we were both starting on the same day. My new colleague told me his name was Guthrie.<br />
<br />
We went up to the office. Amos came to meet us at reception. He was wearing jeans stained with battery acid and a t-shirt. "You boys won't be needing those suits around here," he said. I had my tie off before he'd even shown us to our desks.<br />
<br />
Guthrie and I would be sharing an office with Amos and Meggs. There was no door, and the wall facing the corridor was all glass. It was like being in a very small and poorly-lit fishbowl.<br />
<br />
In the office next door was another programmer, Jing, who Meggs told us was also a programmer. "But she only writes test scripts," said Amos, dismissively. There was one other programmer, Robert, who occupied the next office along, but he wrote small applications for clients and was not part of the team. The four of us in the Fishbowl were the team; everybody else was inconsequential. Marketing, we were told, was the Enemy.<br />
<br />
The first task that Guthrie and I were given was to unpack and set up our computers, which were delivered not long after we arrived. Guthrie was quite excited about it. I was less enthusiastic. Before long we had the computers put together, and Amos instructed us to install the latest version of Windows NT Workstation.<br />
<br />
I'd never used NT before and had no real idea of how it was different to Windows 98. I didn't much care either, until we started having problems. Neither Guthrie nor I could get the damn OS to install properly. After a day of stuffing around, Meggs gave us a different set of CDs to use and told us to install NT Server. Server went on with no problems.<br />
<br />
I immediately had another problem. My network card didn't work. I had installed it myself and I was worried that it was my fault, but Amos just gave me a new one. The new one worked fine. Two days had passed and I'd barely managed to get my computer up and running.<br />
<br />
My heart wasn't in it. The Dragon had promised they would call me that week with an offer and I was fretting about how I would be able to break it to them that I was already going to quit.<br />
<br />
I came down with a flu. I hadn't been sick in the five preceding years when I had been at University, but less than a week in the office and I felt as if I'd been run over. Guthrie and I were given access to the source code and instructed as to how the <a href="http://en.wikipedia.org/wiki/Revision_control">version control system</a> worked. Neither of us had used version control software before, but, we were told, even if it had, the experience would have meant little. The version control software in use at Tigerland had been written by Meggs and bore only superficial resemblance to the solutions in use throughout the rest of industry.<br />
<br />
In the mornings, Meggs would give us long show-and-tell lectures about the design of the application, the transformative path he was taking it down, so it could go from being a simple client/server system to a multi-tiered enterprise system, "just like a real one." I was sick that I wasn't taking much of it in; it was all I could do to stay awake. Guthrie claims that one lunchtime he caught me crashed out from exhaustion in an empty office, but I have no recollection of the event.<br />
<br />
Guthrie and I were not allowed to program just yet. We were set exercises in using <a href="http://en.wikipedia.org/wiki/Command-line_interface">command line utilities</a> to search and replace in the code base using <a href="http://en.wikipedia.org/wiki/Grep">grep</a> and a variety of homegrown tools (again, most of them authored by Meggs). The sort of tasks that are probably familiar to any <a href="http://en.wikipedia.org/wiki/Unix">UNIX</a> programmer of the day, hacked and kludged into a windows environment. Amos decided that these exercises would be competitive, although I think we would have both learned faster if we'd been allowed to work through the problems together.<br />
<br />
The cumulative solution to all of these command-line problems was intended to reformat the whitespace in the source code, which Meggs had recently decided had to be absolutely regular. Guthrie and I each reformatted half of the codebase (alphabetically, by file name). After making sure that everything still compiled, this was the first time that Guthrie and I were permitted to check any code into the repository.<br />
<br />
"Congratulations," said Meggs. "You're now officially programmers."<br />
<br />
Neither of us had actually written a line of code, but we had certainly had the importance of procedure and code- cleanliness drummed into us.<br />
<br />
Meanwhile, the Dragon still hadn't contacted me. I didn't have a mobile or private access to a phone in the office, so I wound up sneaking out of the office a couple of times during our morning coffee breaks to use the phone box on the corner. It was a week before I managed to raise my contact there. She couldn't tell me why, but there was no offer in the pike. I needn't have worried about how Tigerland would take such a quick resignation, because it looked as if I would be staying there indefinitely.<br />
<br />
It was less than a year until Y2K and its accompanying crash. In the fallout from that, the Dragon would shut down its Melbourne offices entirely. In later years, I learned that nobody knew exactly why the Dragon had built the Usability Lab that had failed to employ me in the first place. Apparently it never saw a single day's use.<br />
<br />
I was fated for a career in the coding trenches, it seemed. I was disappointed that I wouldn't have the Dragon on my resume, but at the same time, I think I was a bit relieved. I was a programmer with a lot to learn, and it seamed as if that Meggs was going to be a good person to learn from.<br />
<br />
Now, finally, I thought I knew what would happen next.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-1869206116193606562011-08-21T18:32:00.001+10:002011-08-27T21:30:43.067+10:00Lions and Tigers and BearsOut of college with my degree, I had everything going for me except for a job.<br />
<br />
I didn't know what kind of job I wanted, but I did know the kind I didn't.<br />
<br />
Before I had graduated I'd gone to a career information session at one of the big banks. I listened to about an hour of corporate doubletalk before they trotted out a pretty young white girl who'd been in the previous year's graduate program. She told us about her exciting job maintaining legacy software written in an obsolete languages running on on ancient mainframes. She was bright and perky and enthusiastic and I walked out of there ready to slit my wrists.<br />
<br />
I had zero experience, so there wasn't much to look at on my resume besides my education and the time I'd spent stacking boxes in a warehouse. With three majors, two of which were not computer science or engineering related, the most common reaction I got was one of confusion. "Just what do you want to do with all this stuff?" "Uh, the job I applied for is in software development," was never a good enough answer. One place looked at my university career and said "Well, you're obviously not much of a programmer, so we're not even going to let you do the test."<br />
<br />
The most rigorous interview I did was for a position as a tech writer. Half a day on site, four interviews, and a writing sample. It was forty degrees, the air conditioner was broken, and I was stuffed into a suit while the rest of the staff wore shorts and t-shirts.<br />
<br />
I went to an interview in a building that was still under construction, where I had to push through plastic sheeting and climb up scaffolding, when upon arrival they looked at my resume and said "Oh, so, as a graduate, you don't actually have any experience?"<br />
<br />
I was interviewed for a graduate role by a man who put both fists on the table and demanded "What makes you think that you're ready for this job?" He followed this question up with "Do you have a girlfriend?"<br />
<div><br />
</div>I did a couple of interviews with a company that was on its way to becoming one of the country's biggest contracting firms, Lion Consulting. The second of these included an hour of formal testing. The first two sections I was fine with: computing and mathematics. The third section was management-related, and I had no idea what to write. The four section was supposed to assess language skills: in addition to answering the questions, I corrected spelling and grammar errors I had noticed in the questions themselves.<br />
<br />
<div>I applied for a job where they wanted someone with good tech and language skills and required a portfolio showing graphics work. At the interview they asked me chemistry questions. They didn't know exactly what they wanted from the person they were hiring. I lost out to a candidate with a degree in graphic design degree and a portfolio. </div><br />
Lion called me and told me that I was on the shortlist, and they'd be doing a third round of interviews in December. I was going to be overseas in December, so I asked if they could schedule the interview for another time. When they told me they would pencil me in for their next graduate intake, the following December, I decided that I didn't want to work at Lion Consulting after all.<br />
<br />
I did an interview with a medium-sized tech company, Bear Technologies. I didn't really understand what it was that they did at Bear, but it sounded high tech and interesting. There were three guys in the room: two suits who talked and asked questions, and a bearded guy who sat off to one side listening. The beardy guy would occasionally interrupt, ask me a question, and then nod. I didn't impressed to suits much, but I felt like I had some kind of unspoken rapport with the grumpy old beardy guy.<br />
<br />
I wascontacted by a Dragon-sized overseas corporation who had somehow discovered my combination of different majors and were keen to hire me to work in the new Usability lab that they had just built, and which they had no idea what to do with. The interview went well, and they said "We'll call you. Soon."<br />
<br />
The Dragon didn't, but the Bear did. They were considering me and one other guy and they will be in touch about a second interview... one day.<br />
<div><br />
</div>I did another interview with a small software company called Tigerland. Three guys interviewed me: a manager and two engineers who introduced themselves as Amos and Meggs. Meggs wore a beard and reminded me a lot of the guy at Bear Technologies. The interview went well, until Meggs produced the test.<br />
<br />
The first part of the test was easy. They showed some simple procedural C code to me and I had to work through it, explaining what it was doing. The second showed some object-oriented C++. I worked it through as best I could, but I did not know the answers to Meggs' questions about inheritance, composition, and the stack. I figured I was out of the running, but perhaps I could learn something from the interview, so I relaxed and settled in. It was nice to be talking about programming instead of how confusing my resume was. "I don't know," I said, when faced with a question I couldn't answer. "How <i>does</i> it work?"<br />
<br />
I think that attitude is what got me the offer. Amos called me within a few days and said, "Are you interested in this job? It's a hardcore C++ job; it's not for pussies. If you are interested, it's yours." I told them I would think about it. Amos told me to call him back the next day.<br />
<br />
I called up Bear Technologies, who still had me shortlisted. They told me that they couldn't make a decision for another month. There might not be a job going there, after all. I told them I had another offer on the table, and they advised me to take it. So I called Tigerland back and accepted their offer. I would start work in two weeks' time.<br />
<br />
The following week, the Dragon called me. Things were moving ahead. They liked me, they wanted me to work there. They would be in touch with me again really soon... but they had no paperwork and no actual offer yet. I'd already signed with Tigerland.<br />
<br />
The following Monday was my first day at work. My first day full-time employed, in any capacity.<br />
<br />
I was now a real person.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-70060755905113016312011-08-14T10:42:00.000+10:002011-08-14T10:42:41.362+10:00Robot MonsterI had finished my undergraduate degree and I didn't know what the hell to do. I knew I wasn't ready to join the workforce. So I started looking at post graduate programs.<br />
<br />
One of the universities was offering a postgraduate diploma in Robotics. Anybody with a comp sci or an engineering degree could apply for it. So I collected up my transcripts and sent them in. I received an acceptance letter in fairly short order... followed by a second letter informing me that the course had been cancelled, because there was only one person enrolled in it.<br />
<br />
My dreams of robotic world domination dashed, I went an enrolled in a one year arts program at a different University. It was fantastic. Lots of great subjects, and not a career in sight. I asked if I could overload my course and do some extra units, but the course coordinator adviser refused: these were Arts subjects an it was unthinkable that a student should want extra work. I went from having 28 hours of classes a week to eight, with no big assignments and no exams. It was easy and rewarding. At the end of the year, my supervisor asked me where I was going to have the work I'd done for his class published. It didn't have robots in it, but it did have space ships and quantum physics.<br />
<br />
Once I had graduated, I needed to get a job. This wasn't so easy: most of the companies I talked to were confused by the fact I had qualifications in Computer Science, Psychology and English, and I wasn't getting very far. My old university asked me to show up and enrol in subjects for my deferred honours year, and even though I'd had never intended to go back there I went and did it. I had nothing else to do.<br />
<br />
We had to choose a thesis topic before the year began, but I was so disinterested in it that I did nothing about it. At the last minute I went through the handbook advertising which topics were being offered by the various faculty members, and I found one professor who had five topics I liked. I went to talk to him.<br />
<br />
It turned out that Professor Gupta was the head of the department. I had no idea, even though I'd been in the department for three years already. He looked at my background, raised an eyebrow at the second major in psychology, and agreed to let me do one of the thesis topics I was interested in. He chose the topic. And he told me to write a much more general topic heading on the form than the one we discussed. I should have known that something was awry.<br />
<br />
At the start of the year we were told that honours level subjects would be much more difficult than undergraduate subjects, but I found the opposite to be true. The classes were easy, the assignments were easy, the exams were easy. I wondered what I was supposed to be learning. How was this preparing me for the real world?<br />
<br />
My thesis was another matter altogether.<br />
<br />
The first thing that Professor Gupta did was tell me that I would be co-supervised by another lecturer, Dr Victoria Wong. This, I was later informed, meant that Gupta wanted me out of his hair unless I produced something worth publishing, so that he could take the credit. Vicky was kind and supportive, so I didn't care. I did care that Gupta had decided to change my topic. He had some students building a piece of software for him that would measure certain aspects of human behaviour and he needed somebody with a psychology background to develop an experiment around that. I was unhappy, but it was easier than the thesis I had planned. I was given an alpha of the software to play with and told to begin my literature review.<br />
<br />
The lit. review was easy. I read all of the research and found it patchy, unscientific and generally a load of hot air. Being the angry young man that I was, I proceeded to tear it apart. This actually impressed both Gupta and Vicky: they were unused to seeing students who were a/ critical, and b/ able to frame a coherent argument. They rewarded me with good marks and told me I was PhD material.<br />
<br />
The alpha software I was supposed to be testing, however, was a problem. It did work... sometimes... but it failed to harvest the data correctly, and it would freeze or crash frequently. There was no way I could use it in the state it was. I was not allowed access to the codebase or the team of students who were developing it for Professor Gupta, but he assured me that it would be ready.<br />
<br />
I went away and designed the experiments I would perform with the software. I framed my argument, developed my hypothesis, worked out the metrics I would use. I got the whole thing ready to go. Eventually Gupta took an interest, and invited me to a few meetings in his office. During those meetings he'd make me sit while he read what I'd written. Then e'd explain my ideas back to me as if they were his own... and I was a turnip. I just nodded my head and agreed with whatever he said. After every meeting I'd ask "How is the software coming, Professor?"<br />
"It will be ready. Don't worry about it."<br />
After a few weeks Vicky called me into her office.<br />
"The software is broken. The students who are writing it have gone on holiday. Professor Gupta says you won't be able to use it."<br />
"But... my whole thesis is about this software." Gupta had forced the topic on me to begin with. It wasn't Vicky's fault. "What does Professor Gupta say?"<br />
"Professor Gupta says that you should just do some manual testing instead."<br />
"My thesis topic is 'automated testing'."<br />
"Not any more."<br />
<br />
Vicky was sympathetic, but she couldn't do anything... or say anything. The faculty, I had discovered, were paranoid about Professor Gupta finding out that they'd said anything bad about him. The ears had walls.<br />
<br />
"I'm going to go and speak to the Professor."<br />
<br />
"Um... Professor Gupta is actually at a conference overseas for the next month."<br />
<div><br />
</div><br />
My thesis was gutted. I performed some manual tests and collected some results, but I had nothing to write about anymore and I had to pad to reach the wordcount. I thought I would bring some of the scientific rigour to my thesis that the studies I had criticized had not: I would perform some statistical analysis on my data to see if it was any good or not. When Professor Gupta returned from his junket and I told him about this, his face darkened. "No statistics," he said.<br />
"But..."<br />
"This is computer science. We don't do statistics."<br />
<br />
I did the analysis anyway. That was as close as I came to expressing my frustration at the way the thesis had turned out. My marks fell from an A to a C, but I didn't care. I was glad to be out of there. I was glad to be leaving this hell of Academia, where everybody was paranoid that their seniors were out to get them; where incompetence was rewarded, innovation was stifled, promises were broken, and ideas were stolen. Out in the Real World, I reasoned, when there was money on the line, none of that would be permitted to happen.<br />
<br />
Yeah, I know. You can stop laughing now.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-72874220617362915782011-08-05T16:51:00.000+10:002011-08-05T16:51:12.525+10:00The End of the World as We Know ItI wasn't concerned about finding a new job after I was done with Fjord Systems. Chucky had been hassling me for a resume; they needed someone like me at his new gig. Two of Fjord Systems' rivals had also approached me. I was pretty sure I could find work without any trouble, and I had my entire three month notice period to do it in.<br />
<br />
About two weeks later, a Global Financial Crisis was declared and suddenly all of those opportunities went away. But it was October, and I was tired, and I still wanted to see the product out the door.<br />
<br />
First thing I did was tell the team that I was no longer available after hours, and I was not working any more overtime. The immediate ramifications of this were that I was not going to conference into development meetings and I would not be returning to Sweden for the company 'conference'. The conference was a marketing gimmick; a holiday party that would last a week and would see customers from all over the globe descend on the offices in Sweden. I also knew, from the previous year, that almost nobody would be doing any work whatsoever for the entire month of December and half of January. I that wanted to leave quietly.<br />
<br />
My work was pretty much done. Chucky had finished the drivers before he left, and I had finished integrating them when I gave my notice. Mostly my job consisted of writing unit tests and fixing bugs that arose because Anders starting messing around with the drivers. His changes were minor and really served only to break the interface or the unit tests. I suspect that this was a way of taking credit for Chucky's work by putting somebody else's name all over the version control system, but I stopped caring. Chucky had agreed to do any urgent maintenance that was needed in his drivers for six months after his resignation (he did not give the required three months' notice), but there weren't any issues beyond the new ones Anders introduced, and then demanded that I fix in the interface. I complained the first time, but after that I gave up. They were minor changes. Many of the changes simply showed that the team had not understood the design as I had laid it out for them, but the software still worked well enough... it just meant that many of the features I had written sat dormant.<br />
<br />
About a month later Martin sent me an email saying that he wanted to talk to me. He said he'd been trying to call me on my office line, but I never answered. I had been turning the phone off after 6pm, and there was no voicemail set up. I had said in my letter of resignation that I would no longer be available after hours. It took Martin six weeks before he thought to email me.<br />
<br />
We arranged a time and I got on the phone with him, but I found that I wasn't really listening to whatever it was he was filling my ear with. I sat there remembering him making fun of my friends behind their backs, and I wondered what he'd said about me. I told him that I was tired of the work. I told him that I'd already done this same project when I had worked at ATB Software, and that the team's refusal to honour their promises meant that this product would not be as good as the one I had worked on two years prior. Even if it had been, it wasn't the work I had signed up to do. That work had departed when Jacob had been let go.<br />
<br />
The product was released in January. It was substantially better than the prior version, since the new design, even compromised as it was, was at least cleanly-written and fairly efficient. The drivers worked and integrated into the software seamlessly. Despite my reservations, the UI team produced a very nice<br />
new front end for the application from scratch and the product looked quite polished. Certainly, it presented a much shinier facade than the product I had built at ATB Software...<br />
<br />
But it just wasn't as good. My product for ATB still rated in the top three of its kind when it came to performance and efficacy, and the new product from Fjord Systems stayed well below it.<br />
<br />
But that wasn't my problem. I had quit my job at the middle of the biggest economic downturn in decades, and I was feeling <i>fine</i>.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-46550760535860682902011-07-27T17:18:00.000+10:002011-07-27T17:18:07.341+10:00Ars MoriendiA couple of days before the end of my vacation I received an email from Andy, the Project Manager at Fjord Systems.<br />
<br />
"Pike, I hate to ruin your holiday, but everything's gone wrong. We're in deep shit."<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoplRfoQgKFPTGkQUrKRu5zuu4Jm0WlHubL-5R7FEgOs2GGpji9hvr6so2-jc2PctZbb7lkA3wNRuN5jZVuysnYx67qGfpmZwfU9G5HFZMeQz39wW6YNVZe_3YJfI3Px4y1fi3Ueqb2nM/s1600/0299.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoplRfoQgKFPTGkQUrKRu5zuu4Jm0WlHubL-5R7FEgOs2GGpji9hvr6so2-jc2PctZbb7lkA3wNRuN5jZVuysnYx67qGfpmZwfU9G5HFZMeQz39wW6YNVZe_3YJfI3Px4y1fi3Ueqb2nM/s320/0299.jpg" width="236" /></a></div><br />
Andy wouldn't tell me anymore. I arrived back in Sweden a couple of days later expecting to find the common area festooned with intestines and severed heads in the fridge. It sounded to me as if the project had died hard, but what I really found was... nothing.<br />
<br />
The team had told me that they were good to go when I had left for my vacation, three weeks prior. They had all agreed to do the work. They knew who was supposed to be doing it, and how. That was what they told me.<br />
<br />
Apparently, once I had left the office, instead of buckling in to do the work they had panicked. As best I could tell, the team had spent three weeks running in circles around the office, screaming and throwing their own faeces at each other. As far as the art of dying went, these kids were a bunch of amateurs.<br />
<br />
Anders had finally asserted himself a little bit. There wasn't enough time to undertake the full scope of the project I had laid out, so they would be cleaning up the old core engine (the part that he'd told me made him feel sick to his stomach) and reusing it more-or-less as it was. The so-called 'core engine' was the piece of the product that actually did the majority of the work of the app, but it was not necessarily a complicated piece of technology. It sprawled a bit, but I did not believe it would have been difficult to rewrite it, or simply to break into chunks in preparation for a rewrite... as per the designs we'd agreed upon. Nonetheless, the team lead had finally made a decision and I decided to go with it. He agreed that the core engine would be integrated as per my designs so that it could later be unplugged, piece-by-piece, when we had finished this initial refit. Fixing foundations and the plumbing was the main thing.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJBpaTouUEX6Aal04XY5g6LzcFdjroS5zNIldWJx1_QgHbLKbNPkYKUuVBVyzEwY8MHg9EhYlwl6tt0aQV9QYEj4WdrAh822tdAntmFxzImaFpnlOEWIBQiBkE0588l1Dy5qVmDo0rSEQ/s1600/250px-Ars.moriendi.pride.a.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJBpaTouUEX6Aal04XY5g6LzcFdjroS5zNIldWJx1_QgHbLKbNPkYKUuVBVyzEwY8MHg9EhYlwl6tt0aQV9QYEj4WdrAh822tdAntmFxzImaFpnlOEWIBQiBkE0588l1Dy5qVmDo0rSEQ/s1600/250px-Ars.moriendi.pride.a.jpg" /></a></div><br />
I left the office with a bad taste in my mouth. Despite the fact that everybody had agreed to stick to the design, I'd heard them muttering. They didn't believe we could make it work. They didn't believe that we could make the deadlines. I was frustrated. I'd done this all before, with less people, and I knew it would work if they'd stop bitching and start coding. But I couldn't say that to them; that was Anders' job.<br />
<br />
I went home and I tried to get to work on the driver integration with Chucky, but it wasn't that easy. My working hours in Australia would end right when the team's would begin, and I would finish a full day's coding with hours of emails, realtime chats and conference calls with the team. Every morning I would get up, sync down the source code, and find that the team had broken what I was working on the day before. Half of the productive part of my day would them be lost fixing it. I don't know what the team was actually doing, but it was clearly not working, since the project wouldn't even compile after their checkins.<br />
<br />
I asked them nicely not to break the build. Weeks went by and I still found myself having to fix it on a daily basis. I tried a sterner approach, but this didn't help matters. I didn't yell down the phone, but once I abandoned politeness, the build breaks became less frequent... and meetings became commensurately more surly. I could hear them muttering at me in Swedish.<br />
<br />
Joseph was granted a patent that he had filed. Nobody seamed to care. "Software patents don't mean anything," I was told.<br />
<br />
Srinith and Sven complained to me that nobody else was working. Anders and the senior guys sat around in their office with the door closed. Tyko was wrapped up in his research. Nobody knew what the UI team was doing. I told that they were the A-team. They were the most productive guys and they were on board with my desire for progress. If we hasd to do this with a team of three, plus Chuck,y then so be it--I'd done it before, back at ATB Software, and this time I didn't have interference from management and marketing to contend with. I had to trust someone, so I trusted them. I asked them to look after the integration with the core engine and the UI team while I pulled my head in and finished the driver interface, and they agreed. This was a mistake.<br />
<br />
My A-team introduced some new code libraries to instrument the source in order to catch memory leaks. This library was incompatible with my test apps, but it was cancerous: once it was in the application it proliferated everywhere and could not be removed. I complained: the new framework did not leak memory and the overhead of the instrumentation was huge. It threw lots of false positives and it made debugging a nightmare. Only the core engine needed to be instrumented, and there needed to be a way to turn the whole thing off. But they were adamant, and I had bigger fish to fry. I wrote new test apps and got on with it.<br />
<br />
My A-team took the very simple structure that I had created to be a unit of currency between all of the subsystems and wrapped it in layers and layers of macros, so that they would act in an object-oriented way without being truly object-oriented... or debuggable.<br />
<br />
My A-team changed all of the error handling routines so that, instead of passing error information up, they would throw assertions that would crash the application.<br />
<br />
At this point I decided that I needed to rein them in, and I think they simply decided that the would instead replace me. They started to pull apart the infrastucture I had written, stripping out the inheritance hierarchy that would permit us to drop in new versions of the core engine. If they needed to make a small change to a class that I had written they would push the entire code module into an 'attic' repository and then create a new one... containing almost exactly the same code, but minus the history of changes and of course with his name on it as the original author.<br />
<br />
I just took it. The design was all that mattered. If we could stick to the design for this release I would be able to steer the team back on course after the release date, I thought. I was up to my eyeballs in the driver interface and I didn't want to fight about it. But I knew that they were gradually stripping away all of my design and replacing it with Special Magic.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh40hArTypvSd0w2rFEXp-qihYwuAQb_RXT6AraqMETxg9ziYDyRZy8FFEUTLq11tq6yFExQQGIC-2xa4D-Q99fmdeFg2CVMHITuKOG4xWN9Ec06zmYsjxpRyZALhVXIBeoyno26YZtIBQ/s1600/medd_01_img0008.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh40hArTypvSd0w2rFEXp-qihYwuAQb_RXT6AraqMETxg9ziYDyRZy8FFEUTLq11tq6yFExQQGIC-2xa4D-Q99fmdeFg2CVMHITuKOG4xWN9Ec06zmYsjxpRyZALhVXIBeoyno26YZtIBQ/s320/medd_01_img0008.jpg" width="320" /></a></div>I start to get bug reports from the communications layer. I'd forgotten about the comms layer, with all of the other nonsense, but I didn't think it was a major issue. I couldn't duplicate the bugs, so I asked for log files. No matter how often I asked, nobody would furnish them to me... but the reports kept coming.<br />
<br />
I did get a number of feature requests. "This comms layer is useless," Srinith would say. "It doesn't do X."<br />
"It was designed so that could be built on top of it. It's easy enough."<br />
"It should be handled inside the comms layer."<br />
<br />
Like an idiot, I would then extend the comms layer to handle that behaviour, rather than insisting that the behaviour should be handled externally. Instead of thanking me, Srinith would then say "This comms layer is useless. It doesn't handle Y."<br />
<br />
I did that three times, until Srinith ran out of new features. The comms layer was still buggy, and still a source of complaint, but by then Chucky had finished the driver and I had finished integrating it. Once I was able to focus my full attention on it, I was able to duplicate the underlying bug in the comms layer... and it was a serious one. Srinith jumped on it.<br />
<br />
"Alright," I told the Andy, Anders and the A-Team. "I found the bug and I can fix it, but I need two weeks. Ten business days."<br />
<br />
I showed them a design document, and they agreed to it. I got on it, and made good progress. Srinith threw some new feature requests at the comms layer for me, which he 'needed urgently', so I build those as well: twice each, once for the old comms layer (so that Srinith could continue programming with it), and once for the new one. On the ninth day I had finished all of the features and I was chasing the last remaining bug when Andy called me up. "We're pulling the plug on your comms layer. Srinith is going to write a new one."<br />
<br />
I was on schedule. I would have the layer ready for them, bug free, on the day I had promised. It had the same interface as the old one; nobody would even notice when the new library went in, except that the bugs would disappear.<br />
<br />
"Sorry. Anders told him to go ahead." In other words, Anders needed me to fail.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV1hE-UETHZ8ifkpuIU8SwiytZnzdeIe596QLjzWWU_o-wbL5luDwHrbRk7U1V4X1HGrPvy-ZshLB4PTE8tszXpBeD7eItWL4GmZUB2pfv3DVOgi6tigLq-gNXnhDTEuoo_F-hOZlDUuA/s1600/1513-Knight-Death-and-the-Devil-q50-969x1257.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV1hE-UETHZ8ifkpuIU8SwiytZnzdeIe596QLjzWWU_o-wbL5luDwHrbRk7U1V4X1HGrPvy-ZshLB4PTE8tszXpBeD7eItWL4GmZUB2pfv3DVOgi6tigLq-gNXnhDTEuoo_F-hOZlDUuA/s320/1513-Knight-Death-and-the-Devil-q50-969x1257.jpg" width="246" /></a></div>"What's he going to build? What's the design? Is there a document?"<br />
<br />
"He's just going to do whatever."<br />
<br />
I could see the death of my baby looming.<br />
<br />
Joseph was laid off. Martin sent me a note to assure me that Chucky and this had nothing to do with Chucky and I, it was just that they didn't think Joseph's research had a place at the company.<br />
<br />
A week later, Chucky quit. The drivers were done and he'd been offered something that paid better and gave him health coverage. Also, he said, he was tired of all the sniveling. I decided that I was, too. I was required to give three months notice, so I held out a few more days before I handed in my notice. My last day would coincide with the release date.<br />
<br />
I wanted to make a graceful exit.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-54469547809171173752011-07-22T14:51:00.000+10:002011-07-22T14:51:42.464+10:00Misfits of ScienceUniversity was a bit of a shock. I had a very heavy courseload in first year... more contact hours than I had in my last year of high school... and it fell to me to make sure that all of the prac classes and tutorials I would have to attend were timetabled correctly. I didn't actually know what a 'tutorial' was, and I wasn't much interested in finding out.<br />
<br />
The other thing was the maths.<br />
<br />
I had never enjoyed maths, but I was good at it. At High School, maths was one of my best subjects, at least in terms of grades. But apparently the university wasn't happy with the standard of maths from incoming students, and we were all subjected to a preliminary test before the first term began to prove our competence. And it was just as well. I scored 12 out of 15 on the test, but all three of the questions I got wrong were all the advanced trigonometry questions. My class at high school had done a different unit when others had done trig, and I hadn't learned any of the advanced stuff. So, on top of the heavy courseload, during first term I had to take extra classes in high school level trigonometry. But it paid off: when I resat the trig test and my marks went from 0 to 100%.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibgmXqJfs3UVKe6Q_kArYjK2dhqEDIfW-pPFQ9l7kSkQoe8kejGuCl1nPxB9A3Lo37LBVEeq7bXWkOa-0_pAHNCYRYHdI-mi2EV9dInz9IIREJp_x6ZKimUPo6DDYsS29OqWj8NPhI_5k/s1600/misfits-of-science-1985-86-tv-series-courtney-cox-1de77.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibgmXqJfs3UVKe6Q_kArYjK2dhqEDIfW-pPFQ9l7kSkQoe8kejGuCl1nPxB9A3Lo37LBVEeq7bXWkOa-0_pAHNCYRYHdI-mi2EV9dInz9IIREJp_x6ZKimUPo6DDYsS29OqWj8NPhI_5k/s320/misfits-of-science-1985-86-tv-series-courtney-cox-1de77.jpg" width="320" /></a></div>But all the classes were dull. They were teaching Pascal, which I was already bored with, and I didn't learn much in the first semester. My most difficult class was Deductive Logic, administered under the philosophy faculty by a lecturer, Hermann, who was no longer teaching any comp sci because he'd failed most of his students in his subject area in prior years.<br />
<br />
Hermann taught us formal reasoning, and it was a lot more difficult than I had expected. They were small classes and I on one occasion fell asleep sitting in the front row, directly in front of him. By then I was starting to perfect the art of only working as hard as I had to, so I got through it with reasonable grades.<br />
<br />
I soon found in the following semesters when we took boolean logic in maths and computer science units that I had already covered the material in much greater depth, and those subjects proved easy. A valuable subject, as much as I had disliked it.<br />
<br />
But then I pretty much hated everything. I had made a few friends, but I wasn't enjoy my subjects. I wanted to drop out every single semester. Later in first year we were taught about <a href="http://en.wikipedia.org/wiki/Dynamic_memory_allocation">dynamic memory</a>... pointers... and this was something at least new to me. I quite distinctly remember the a lecturer telling us that pointer arithmetic should be done on paper; it was too difficult to do it in one's head... which any commercial programmer working in a native language (at that time, the vast majority) will tell you is patent bullshit. But it was true that <a href="http://en.wikipedia.org/wiki/Pointer_(computing)">pointers</a> were something many students couldn't master. Pointers, I think, are the first big conceptual leap you need to make in order to become a real programmer. <br />
<br />
I did not, at that stage, appreciate that most of the people in my classes would never be able to be effective programmers in the real world: even if they could master the technical aspects, the ability to sit down and solve difficult problems all day long is not one that most people are wired for. For my part, I enjoyed the problem solving and I flat out just liked <i>making things</i>, but I felt like I'd already done all of these things before. I wanted to build <a href="http://en.wikipedia.org/wiki/Skynet_(Terminator)">Skynet</a>, but nobody else was interested in that. It was data structures and algorithms I mostly already knew, employed in the service of meaningless tasks that had already been solved a thousand times. At the end of the day I was promised a semi-lucrative career maintaining ancient software on obscure hardware that would likely be used only by banks, for exciting banking purposes.<br />
<br />
I wanted out, but I didn't really know what else to do. I made the Dean's list in first year despite my misery. Second year my courseload was lighter. No more maths, no more deductive logic... but the comp sci classes were less interesting. We did a lot of hardware and operating systems subjects, the only one of which interested me was the brief unit we did in assembly programming. For the third time I found myself studying boolean algebra. I was still bored and I still wanted to drop out.<br />
<br />
In third year we got to choose subjects. I knew I didn't want to take anything to do with networks; I was terrified that it would lead me to a career as a system administrator. Sysadmin, I reasoned, was the most miserable job in the world. If the network is running fine, nobody notices. If the network goes down... which they frequently did, and do... even if it's no fault of your own... everybody hates you. Not for me. I wanted to get out of university with as little work as possible, so I tried to sign up for a bunch of easy subjects... but those all had Databases as a prerequisite. I signed on for Databases and somehow then found there was no room for the easy subjects. Databases proved to be the second-most useful subject I took, although it was a long way from being my favourite.<br />
<br />
I enrolled in <a href="http://www.google.com.au/url?sa=t&source=web&cd=1&ved=0CDIQFjAA&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCOBOL&ei=Nf8oTra7NcHxrQeooaDQBg&usg=AFQjCNHsF3ZIpL16FSUMGUcqsORl0OKCyw">COBOL</a>. I wanted to do <a href="http://www.google.com.au/url?sa=t&source=web&cd=1&ved=0CDEQFjAA&url=http%3A%2F%2Fwww.cplusplus.com%2Fdoc%2Ftutorial%2F&ei=T_8oTvrYNYOdmQW0sbzxCw&usg=AFQjCNHKA2NgyUaGBj833EHXDg4gmOIjsQ">C++</a>, but, owing to the strange degree I had enrolled in, I didn't have the prerequisite year of C programming. Third year had a lot less contac hours than first, so I went to the C++ lectures anyway. Within two weeks I decided that I had to find a way out of COBOL and into C++. If I learned COBOL there was the horrible possibility I would one day have to program it in the real world. By the same token, I knew that C++ was a viable language. COBOL was for retirees; C++ was for powerful young men. Besides: at that time the only language I was any good with was Pascal, and I knew that there were no careers in that.<br />
<br />
I had to get into C++. There was nothing for it but to try it on, and see what I could get away with... but in the end it was no difficulty. The professor had seen me in his lectures and he just signed me into his subject, without even asking if I had the prerequisites. I dropped COBOL as quickly as I could.<br />
<br />
This was the single best thing I ever did in my five years at University.<br />
<br />
I liked C++. I had a bit to learn, but I was able to pick up most of it out of the book. I knew it would be valuable and I paid attention and that, more than anything, is the basis of my career in software. Naked C++.<br />
<br />
The other big challenge of third year was the Software Engineering team project. I wound up on a team with one friend and four strangers. The project itself was dead boring... an inventory management database app... but we divvied up the work and I buried my head in my area, which was the User Interface. I took on board my task and decided to let everybody else get on with their own. This was a bad idea.<br />
<br />
For all the time we spent in documentation, we really had no plan for how to integrate all of the pieces, and ground zero for this was my UI. When the time came, and I saw how inconsistent and flat-out terrible my teammates' work was, I had to get up and leave the lab. I wanted to punch someone. Did they have no pride int heir work? What the hell was I going to do with that mess? The team lead had flown off to China to look for a wife. The programmers who'd made the mess had no idea that they'd done anything wrong. That left me and the 'chief coder', Adrian, whose job it had been to oversee everybody else's work and make sure it would all integrate. I'd done my bit; I decided that it was on him.<br />
<br />
This was very selfish of me, but I had big projects due in other subjects that the rest of the team did not. I went off to work on those and I left Adrian to it. Luckily, he rose to the occasion. Adrian worked long hours, day and night, and he got it done. He made it all work and I think our project scored better than anybody else's. I felt bad about having left Adrian to all the work and resolved to never do that again... and karma has since paid me back many times over.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjibacZs6cWMDJkRGIcoMcitOzvJpCYu07XzyiAWyqrx64SvB_bcaBT8sNNMcBbC1_s0q9j62w6AzAPSDWRCU_xjiuMMkce_ATtJggFS_inV_Y3Je8SeDaDZwed787i1QLeOhNQ3UmVBAo/s1600/308zg1z.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjibacZs6cWMDJkRGIcoMcitOzvJpCYu07XzyiAWyqrx64SvB_bcaBT8sNNMcBbC1_s0q9j62w6AzAPSDWRCU_xjiuMMkce_ATtJggFS_inV_Y3Je8SeDaDZwed787i1QLeOhNQ3UmVBAo/s320/308zg1z.jpg" width="320" /></a></div>I didn't make the Dean's list in third year, but I didn't go to many classes, either. All the same, I completed my degree with good enough marks that they offered me an honours year, which I accepted... and then deferred. I couldn't handle another year on that campus, with those subjects. Computer Science? What does that even mean? We don't say 'physics science' or 'chemistry science' or 'mathematics science'. A computer is a device, it's not a branch of science.<br />
<br />
And what exactly had been scientific about my degree, really? What sort of research did we do, what new discoveries were we making? I had taken classes in other science disciplines, and even the 'soft' sciences were more research-oriented than CS. What I'd learned was really a kind of engineering, no matter how my degree was named. Since leaving I have never once had the word 'scientist' in my job title (although I would, for a time, hold the title of Advanced Researcher).<br />
<br />
Did I want to be an engineer? Did I want to go and work for a bank? No, I decided.<br />
<br />
I wanted to build killer robots.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-28647597739445437362011-07-13T20:01:00.000+10:002011-07-13T20:01:04.150+10:00PaintballThere were some new faces on the team at Fjord systems: Lars, Srinith and Sven. Lars was quiet and earnest. Sven was a punk rock hacker just out of high school. Srinith was the only one on the entire team who gave any feedback on my documents or my code. The code looked really good, he said, but he asked me to justify some of the most basic assumptions that went into the design. I was pleased that somebody was thinking about it and I was just as pleased that I was able explain them to his obvioussatisfaction: a young, talented coming into the project without any preconceived ideas about how it should work. <br />
<br />
Sven was now in my chair in the office with Tyko (formerly seat of Åke the Genius), so I was shunted to a spare desk in a room with some marketing guys. That was fine; my main business would be conducted in the conference room, which I requested for an hour every day.<br />
<br />
Finding the correct hour was a problem. Not because the room was booked, but because the team took the notion of 'flexible hours' to extremes. We couldn't start before 10:30 because that was the earliest some of the team members would arrive. We had to wrap the meetings up by 1:001, because that was when some members liked to go to the gym. And so on. Nobody was willing to budge.<br />
<br />
I got on with it. I presented the essays I had written, which had been available to everyone for feedback for months. It got the usual cool reception, but everybody was nodding and agreeing and nobody was shaking their head. The main thing that bothered me was that the senior guys... Anders and his crew... were not attending most of the meetings. They were working hard on the current release, they said, which was indeed due out right about then. I remembered Tyko's explanation that they were the only ones who actually did any work, so I left them to it.<br />
<br />
I didn't see or hear much from Tyko at all, but someobody reported to me that he'd had a look at the infrastructure I had written and declared it to be 'quite good'. "That's great," I said. "Pike, you don't understand. That's huge. Tyko never says anything good about anybody's code." I remembered Tyko's admiration for Åke the Genius and decided that I would let the matter drop.<br />
<br />
I started to present the code I had written formally; showing how everything worked and how the pieces would fit together. The version that Anders was working on shipped and they started to join the meetings in time for me to demonstrate how the system would run, end to end. The code was there for anybody who wanted to play with it; I wanted to keep no secrets. <br />
<br />
There was no dissent, so it was time to divvy up work for the functionality build-out; to design the components that would sit inside the framework. I had laid out some guidelines for this, but I wanted Anders to step up and do this part: it was his team and he had the most experience with the existing code, which we would be cannibalizing for this purpose. He'd said he was in, but I wanted to see him put his keyboard where his mouth was. I wanted to let him show that he was indeed the team lead. <br />
<br />
These meetings went as before. Nobody contributed much and I found myself working through fresh designs on the fly, on the whiteboard. Anders would say nothing at all. But once I called an end to the meetings, the room would suddenly fill with discussion in Swedish. I was the only person in the room who could not speak the language, and the Swedes had actively discouraged me from trying to learn any. <br />
<br />
Chucky arrived with his wife, and they were set up in a hotel suite a few doors from mine. I had companions to dine with now, people to hang out with on the weekend. I was excited. Chucky and I conducted extra sessions for the team so that they could learn about how the drivers would work and discuss what they would do. It was decided, as expected, that I would do the integration with the drivers. That was fine by me: it was delicate work and I'd done it before.<br />
<br />
I met with the UI team. They had been building some kind of a fancy framework upon which they were going to build a brand new interface for 'my' version of the product. They'd been working on it for years and did not at that point have a single line of code in production. I asked for a demonstration of what they had been building and they showed me a form with a single, very beautifully-rendered button on it.<br />
<br />
I asked Anders if we could count on them to deliver a full-blown UI and he shrugged. Nobody paid attention to the the UI team and they had no idea as to how capable they were or were not. As far as I could tell, they'd spent years inventing a button that I could have had in 15 seconds using the existing Microsoft framework. I decided that if the worst happened, we could whip up a UI quickly, so long as the team understood my messaging system. So I devoted some time to that.<br />
<br />
Meanwhile, Anders and his cronies began to have closed door meetings. After a few of these they called me into one of these and told me that they wanted to offer me an 'alternative design' to the one I had been working on for six months and had now spent weeks bringing the team up to speed on. They'd put probably three hours of discussion into it, and they had no diagrams or documents.<br />
<br />
This 'alternative design' was a giant black box that looked exactly like the old design, which Anders had earlier told me that he hated. When I asked how he would solve the specific problems I had been trying to address with the redesign he waved his fingers dismissively. "Oh, we'll just do some special magic," he said. Every time I raised a specific problem, he offered Special Magic as a solution.<br />
<br />
What he meant was, he and his trio would hack it all together in way that would lead to exactly the same disaster I was now trying to fix. I argued as politely as I could, and then a bit more savagely when it was clear that they weren't listening. In the end they had to concede that my design offered solutions and theirs did not. I took Anders out for lunch to try to smooth over any hurt feelings and I believed that I managed to do so.<br />
<br />
Chucky got to see all of this firsthand. "I just work on the drivers," he said. "And I'm happy to stay in my box... but I'm glad it's going to be you who integrates them. These guys are idiots."<br />
"They're smart guys, they're just not used to being able to..."<br />
"Pike, they're idiots. This is going to end badly."<br />
<br />
Chucky went back home to the States to work on the drivers. My stress levels were high. I couldn't sleep. I was bored and lonely, shut up in the hotel room by myself, but I found that most nights of the week there was some crew from the office (seldom from the development team and never from Anders' crew) going out for drinks. I went with every chance I had. Suddenly I was drinking as much or more than I had been during my last year at ATB Software.<br />
<br />
We started to nail down some designs for the new components. We assigned some of the work to the humps that Tyko had warned me about and found that they actually delivered some good ideas. Anders and his guys didn't do a damn thing, as far as I could see. Tyko was wrapped up in some research projects of his own that were supposedly far too technical for anybody else to look at. Nobody wanted to talk about Jacob, working by himself in Vegas. <br />
<br />
Sven had become very interested in the infrastructure I'd written. I wanted somebody to help me maintain it as it came under strain from having real components integrated with it, so I spent a bit of time training him up. Then one day he came to work one day with a new haircut. The same haircut that I was wearing. I had an apprentice.<br />
<br />
Sven reported some bugs in the communication system that I had written. I looked into them, knowing that the comms layer needed work, but I found flaws in Sven's code that fixed all of the bugs I could duplicate with my testbed apps. Sven claimed there will still problems, and I was sure he was right... but I was running out of time. I would have to sort them out when I got home.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRTugDzMMqCA7wjIoaYcYqzBkLiNyz-GcWOxLpX88bN6Iz2tJlnwIWNYIxu0lx4msDvE7MSXf-ZnvDPKQs3S3AOtgx54_-r0GQC1IMpqo69IajYisJMaIplfE61xAKovOH3WWVbeahT3U/s1600/paintball-splat-mask.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRTugDzMMqCA7wjIoaYcYqzBkLiNyz-GcWOxLpX88bN6Iz2tJlnwIWNYIxu0lx4msDvE7MSXf-ZnvDPKQs3S3AOtgx54_-r0GQC1IMpqo69IajYisJMaIplfE61xAKovOH3WWVbeahT3U/s320/paintball-splat-mask.jpg" width="320" /></a></div>Somebody organized a paintball session for the final weekend of my trip. I showed up hung over and ragged, but I figured that I had to. Sven demanded to be on my team, but I was finally running out of patience with him. "Sven, you don't have to always be on my team."<br />
"Dude, it's paintball, and you used to be in the Special Forces." <br />
Again with the special forces. Where was this coming from? "Sven, I was never in the Special Forces." "Well, you know. The Marine Corps." <br />
<br />
<br />
"Sven, I'm from Australia. We don't have marines. I was never in the army."<br />
<br />
He went to the other team, but it was clear that he didn't believe me.<br />
<br />
Hangover paintball was absolutely no fun at all. I came out of it exhausted and covered in bruises. In fact, it felt like just another day at the office, chasing people around and dodging pot shots fired from under cover. But that was okay. <br />
<br />
I was done in Sweden for the moment, and I was about to take four weeks of holiday. The team had all agreed to their various tasks and we had the roadmap all sorted out, right up to the release date. The worst was behind me, I thought. Now we just had to put our heads down and work.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-23705034742539220882011-07-07T18:18:00.000+10:002011-07-07T18:18:35.953+10:00The Pit and the PendulumI got straight to work when I got home, jumping right into every programmer's favourite pit: documentation.<br />
<br />
I wrote documents explaining the current system and what was wrong with it. I wrote a document about how to proceed. I wrote design documents for all of the back-end of the application: how the pieces would fit together, physically and logically. Everything was to be data-driven, and based on a really clean interface. I wanted to be able to really break the application into pieces which we could be replaced or re-engineered without risking the entire system. We'd scavenge what we had to from the old app and build as much new as we could.<br />
<br />
The integration of third party software was becoming very important to the business and I wanted to be able to drop these new external pieces into our own product with only the <a href="http://en.wikipedia.org/wiki/Shim_(computing)">thinnest of of shim interfaces</a>. Likewise, I wanted the components to be easy to re-license individually or as a whole: that, too, was of increasing importance. I tried not to get too bogged in detail: I was the architect, not the team lead, and I knew that I would not be able to supervise the whole work effort. I wanted the other people to be able to have their say. As long as they understood the philosophy of it and they built code that conformed to the interfaces I felt that my job was done. If anything broke it would be easy to fix it in isolation.<br />
<br />
It looked great on paper.<br />
<br />
I think Jacob was the only one who responded to the docs, and I'm almost as sure he's the only one who read them. I took that for agreement and I got on with it, so I went of to build the infrastructure the app would hang on. This would the startup and shutdown sequence for the various business components; thread marshalling within and between those components; system maintenance for updates and upgrades; and of course communication with other elements that were outside of the main process or distributed across the network. I was running out of time, so I rushed through this last piece and it was flawed. I would come back and clean it up, I decided: more important that I be able to demonstrate how the system would run, from end-to-end. I wanted to show the pendulum swinging a full arc in both directions.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrPY17nj3OdENR37tO55K78tqN9Kp4uTVXv1SjyYO3Lk_kbTS8EU5eWs1ZA6fpxHPqMBbtU61pOHSHqnivFZrtoQhTDNiqsNzNqD1vJVLPR-JdYJ4W5cA-8qKFGnDK1zu4SWv7IOLvcqI/s1600/pit_and_the_pendulum.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrPY17nj3OdENR37tO55K78tqN9Kp4uTVXv1SjyYO3Lk_kbTS8EU5eWs1ZA6fpxHPqMBbtU61pOHSHqnivFZrtoQhTDNiqsNzNqD1vJVLPR-JdYJ4W5cA-8qKFGnDK1zu4SWv7IOLvcqI/s1600/pit_and_the_pendulum.jpg" /></a></div><br />
<br />
While this was going on, Chucky was beginning to design the new drivers and we consulted with each other about how that element would be integrated into the system. We'd both worked in these roles before and we knew what was needed. I didn't feel like I was part of the team in Sweden, but it definitely felt as if Chucky and were working together on something cool.<br />
<br />
I built dummy components to plug into the infrastructure I'd been working on and I found that all the pieces fit exactly as planned. I was as proud of that effort as I have been of anything in my career in my career.<br />
<br />
I got ready to fly to Sweden to present what I'd done. The plan was that I would clean up the comms system and supervise integration while team built out the actual components, shoehorning as much as they could scavenge out of the old system into the new architecture. I would additionally built the component that connected to Chucky's work. All of the conceptual stuff was done.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgPpxXQ57G0PglrNNvZYcEoKIPbeNleucFIf191Q16jCw11BW3K1hQlNMwtV_IyMSajEoy7POAtKy7wdT8beROctTKqeN66wbWfjVDaMryUaqvg0d6wpEDNzN54JA6u9QRKTs-btwqBMk/s1600/The-Pit-and-the-Pendulum-vincent-price-833278_580_400.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgPpxXQ57G0PglrNNvZYcEoKIPbeNleucFIf191Q16jCw11BW3K1hQlNMwtV_IyMSajEoy7POAtKy7wdT8beROctTKqeN66wbWfjVDaMryUaqvg0d6wpEDNzN54JA6u9QRKTs-btwqBMk/s320/The-Pit-and-the-Pendulum-vincent-price-833278_580_400.jpg" width="320" /></a></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Jacob was not coming this time. He wasn't really part of the refit, and he had now officially been relegated to individual research by Martin. Jacob would stay home and work on the matrix project we'd worked on in Vegas, as well as some other ideas he'd had backburnered at the time. Nobody was much interested in talking about Jacob or his work and I was worried for him, but I had my own problems to deal with.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">I arrived in Sweden after thirty-six hours, odd, went tot he hotel, caugth a shower, and showed up at work right before lunchtime. The desire to get things done, I think, was the beginning and the end of my troubles at Fjord Systems.</div><br />
<div class="separator" style="clear: both; text-align: center;"></div>Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-11156939956625922902011-06-28T22:42:00.002+10:002011-07-09T17:42:33.988+10:00BrazilAfter Vegas I returned to Australia with not much to work on. I proofread some of Jacob's patent apps, I went through his new matrix idea, I started building some of the stuff that we'd talked about back at ATB Software... but I didn't have anything formal to work on. I was still waiting for network access, but the company more or less shut down in the first week of December and most of my queries went unanswered. Occasionally I'd get a chirpy reply from someone in the IT department saying: "Done! There you go!" but no passwords or network details were forthcoming.<br />
<br />
New Year passed, and so did the first couple of week of January. A full month since I had returned. Very slowly the logistics guy, Wils, organized me some flights out to Sweden to meet the team, to coincide with Jacob's next visit. The first itinerary he sent me was mental: the numbers on the flight times didn't add up and he had me routed through Atlanta. Once I got back in I had to look at it twice to discover that the flights he had booked originated in Melbourne, Florida.<br />
<br />
Eventually, after I started to get a bit shirty about my network access, somebody in IT realized what had happened. They had indeed set me up with VPN access to the network and an internal email account, and then they sent all the information about it to that internal email. Several times. Once they put the information where I could find it I found that I could log into the network, no problem, but I had no access to anything beyond the intranet newsletter.<br />
<br />
I flew to Sweden. Wils met me at the airport and took me back to the apartment that Jacob and I would be sharing for my stay. I showered off my 35 hours of airports and aeroplanes and went straight to work. I was in the office by about lunchtime.<br />
<br />
I was given the seat vacated by Åke, sharing an office with Tyko. Tyko was no problem; I knew him already, and I discovered that I had a greater tolerance for the techno music that pumped out of his computer all day long than I had expected. Åke, however, was another story, even though he was gone.<br />
<br />
Åke's desk told a lot about the man and his work. It was filthy; covered with derelict CRT monitors, cables, mouldy coffee mugs, wastepaper, dust, and a layer of grease that I still cannot explain. I spent ninety minutes cleaning before I was satisfied that I wouldn't contract tetanus from sitting there. Åke's computer was on and unlocked, so I turned my attention to that next. He had left a thousand windows open, each one of them showing a gorgon's nest of ugly code. I carefully saved the contents of each window and closed them until I could again see the desktop of the PC. Then I shut the machine down, wrapped it in plastic, and buried it in a 12 foot hole. If we ever found a sudden need for whatever Åke had been working, on we were beyond hope.<br />
<br />
(Alright, I lied about the hole. I put the machine in a corner of the room in case I might one day need something to accidentally-on-purpose put my foot through.)<br />
<br />
I met the team. They seemed like a nice, if reserved bunch of guys. No overt social problems, although a couple of them were definitely capital-P Programmers. The guys Tyko said were good shared one office, the guys he said did not were in another. There was a third team, the UI guys, who lived in their own world and nobody was sure what they did... but it involved lots of code churn and without any visible results. Which is odd, you might think, for a team whose business is entirely wrapped in the visual element of the product. But they were not my problem.<br />
<br />
I was finally granted access to the source code repository. I checked the code out of CVS, but I couldn't work out how to build it. When I asked where the <a href="http://en.wikipedia.org/wiki/Make_(software)">main solution was... the build scripts, the make files</a>... I was told that there was none: everybody just did whatever they had to in order to make it build on their local machine.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilkefneEm_UtYwbhgpT6aS9ePANOcMA-wvuwW7by_Wy_QAMeZo45HrFdE6cSxSfNqj7YIbo-x0wT_q7XElyifbUe9_uLjDC2w9jCpOsF0uIbb970eewf0ZK89_ABnTMoWJ6uAtRkEAXY0/s1600/brazil-poster-art-2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilkefneEm_UtYwbhgpT6aS9ePANOcMA-wvuwW7by_Wy_QAMeZo45HrFdE6cSxSfNqj7YIbo-x0wT_q7XElyifbUe9_uLjDC2w9jCpOsF0uIbb970eewf0ZK89_ABnTMoWJ6uAtRkEAXY0/s320/brazil-poster-art-2.jpg" width="241" /></a></div>Which is to say, nobody knew what the fuck was happening, and if they did, they were keeping that information to themselves. It was like being in Terry Gilliam's <a href="http://www.imdb.com/title/tt0088846/">Brazil</a>.<br />
<br />
I spent a day making the code I had build as best I could, but there were pieces missing. When I enquired after them I learned that they were in a different repository. I had to stand over the IT guys in order to get them to give me access. This happened three before I had all of the source code. I was shocked.<br />
<br />
A source code repository is EVERYTHING to a team. If the code constitutes the raw ingredients of your product, the repository is the refrigerator. Even if the raw produce is low quality, you at least try to keep the fridge clean... because if the fridge goes you've got nothing. At Fjord systems, it was like they were keeping the ingredients in a series of buckets,w hich they'd stashed in the outhouse. I'd seen poor code and CM before, but this was <i>rancid</i>.<br />
<br />
I spent most of the week getting it all to build in one place. Harder than it seemed: each of the four repositories had some overlap with the others, but they were not kept properly in sync. Once I was done I got IT to set up a new repository, I checked everything in and I said "Okay boys, this is the one place where you will get your code from, and the one place you will put it back." They seemed pleased with it, but it was hard to tell. In hindisght, I should have added "Try not to break it."<br />
<br />
The code was horrible. Spaghetti and shitballs. It couldn't be saved. I said as much to Tyko, who gloomily agreed. I told Jacob, who took it pretty well. But our biggest immediate problem was the drivers. It was dangerous, letting our customers use those half-finished, barely functional drivers and we needed to fix them, stat.<br />
<br />
I told Jacob that I thought Chucky was free... or at least he had been a couple of months earlier. Jacob remembered Chucky from ATB Software and so we got in touch with him. With Jacob on hand and in the office to hassle HR, we got Chucky sorted for a contract in days, not months, and we got his network access hooked up properly. We got him access to the new repository and turned him loose on the drivers. He worked sixteen straight hours from the minute his access was hooked up. The drivers, he said, were rubbish, but he could at least make them stable. Which he did. He did us proud.<br />
<br />
Monday morning Jacob called a meeting of the development team. As soon as he had all of us in there (excluding those who came to work after 11am) he surprised me by saying "Aaaaand.... take it away Pike."<br />
"Uh, what do you want me to say, Jacob?"<br />
"Whatever needs to be said."<br />
<br />
I took it by the horns. The product needed an overhaul and a redesign. I went through what was wrong with it, and how to fix it. I roughed out new designs on the whiteboard. I estimated about a year's work.<br />
<br />
The team took it coolly. I was a stranger, the only non-Swedish speaker in the room, telling them that what they had been working for all of these years was wrong and needed to be done over. I worried that I was offending them. I worried that I was stepping on Anders, the new team leader... but something had to be done, and nobody else was prepared to step up. Nobody said much of anything when I asked for feedback beyond a noncommital "That looks okay." After each meeting I made an effort to talk to the other developers one-on-one, and the feedback they gave me was invariably good: "This seems like the sort of thing we need," said one of the better devs. Anders told me "We need to start over. I get a bad feeling when I look at the old code."<br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">I started feeling good about it. I figured if this was Brazil, I was Harry Tuttle: renegade air conditioning specialist, suspected terrorist and all-round bad ass. When the going gets tough, Harry swings in through the window and fixes the problem, permit or not. He's played by Robert De Niro, so you know he is not-to-be-fucked-with.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"></div><div><div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4Fie2B5Z8TSePKUdUmItPopwyW1ZtMqcsKnabZ2tZhd-3VHvZTemEL3xu1Vi3P9g_EK2iClU3JBhTEzQ2nlu78Oy_WhlJrOcHt2cndP3LxxSAiUAFDP2A7JwcLe1FQeqTY8ii6M-KWjU/s1600/DeNiroBrazil.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4Fie2B5Z8TSePKUdUmItPopwyW1ZtMqcsKnabZ2tZhd-3VHvZTemEL3xu1Vi3P9g_EK2iClU3JBhTEzQ2nlu78Oy_WhlJrOcHt2cndP3LxxSAiUAFDP2A7JwcLe1FQeqTY8ii6M-KWjU/s400/DeNiroBrazil.jpg" width="400" /></a></div><div style="text-align: left;">So we made a plan. I would go back to Australia and start documenting up the new system and building prototype infrastructure while the team finished off the new release. Chucky would begin work on a new set of drivers. Once the release was out and the infrastructure was ready we would reconvene in Sweden and bring the whole team onto the new project for build out. </div><div style="text-align: left;"><br />
</div><div style="text-align: left;">It was going to be a lot of work, and there was and obvious pessimism about whether we could accomplish any of this, but I was confident: I'd managed it before with a team a third of the size and a quarter as experienced, and this time I was going in knowing exactly what I was doing. In the eight or so years I had been a professional developer I'd yet to encounter a technical issue that I couldn't solve. It might take time or study or a shitload of pestering questions to somebody more experienced, but we'd solved every problem that came our way, every place I'd been. What I failed to realize was that it wasn't the technical problems that had proven to be insurmountable int he past; it was the people problems. And we already had people problems.</div><div style="text-align: left;"><br />
</div></div>It was clear that Jacob wasn't going to be able to move to Sweden. Although I was sharing the apartment with him, I didn't know exactly what was going on until later in the week. I didn know that Jacob had been suffering from terrible migraines and that they were clearly work-related. This wasn't the easy-going, goofy Jacob I knew.<br />
<br />
Anders and I were invited to a dinner with the CEO, the COO and another guest, Martin, who Jacob old me would be the new CTO. Since he couldn't make the move Jacob was stepping back into a similar role to the one he'd held at ATBSoft: that of a chief research consultant.<br />
<br />
Martin was a charismatic, likeable guy from Sydney who impressed me as somebody who knew nothing at all about software development and who lacked even the barest interest in it. When they'd been recruiting a new CTO the executive staff had originally chosen Jacob over him. Now he was coming on board and Jacob would be working under him. That did not seem like a healthy position for Jacob to be in, and, with me as his chief henchman stirring up shit inside the development team, that didn't seem like a good place for me to be, either. It was clear that if shit went down... and it always does... Martin wasn't going to be much of an advocate for anything.<br />
<br />
It was just like Brazil. The irrelevant and incompetent machinations of people way beyond my pay grade were going to be a problem for me in ways I didn't understand. It was just like Brazil, but I wasn't Harry Tuttle, the A/C fixit terrorist... I was Sam Lowry, the bureaucrat who, while trying to fix an administrative screwup, becomes an enemy of the state.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpPFNqF7SKFgjkod0rzv4rF8unYGh6GL5Qk9ohoraHeC0X3YjO7riUW11F9-3NhtWJDmaFodALupH8xUaxlkXffvP3q9SK2T4ETBrrSfpBCPjS4yZqPhaPgN3wEaZGTr0uu92A2zKipaw/s1600/brazil48.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpPFNqF7SKFgjkod0rzv4rF8unYGh6GL5Qk9ohoraHeC0X3YjO7riUW11F9-3NhtWJDmaFodALupH8xUaxlkXffvP3q9SK2T4ETBrrSfpBCPjS4yZqPhaPgN3wEaZGTr0uu92A2zKipaw/s1600/brazil48.jpg" /></a></div>Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-11239339692639993752011-06-26T16:18:00.001+10:002011-06-28T18:43:10.968+10:00Storm LordI didn't think I was going to make it to Vegas.<br />
<br />
Even getting the new laptop proved to be an ordeal. I bought it online from a Sydney retailer and, in order to expedite the process, I said I would pick it up from the depot at the airport as soon as it arrived. The individual who designed the traffic infrastructure around Melbourne Airport was surely a Genius Programmer in a previous life: the only way to get to the airport is via the Tullamarine Freeway, and if there's an accident on the road you're shit out of luck.<br />
<br />
There was an accident Laptop Day; a jack-knifed semi trailer. I sat in traffic for three hours until I finally reached an exit, whereupon I turned around and went home.<br />
<br />
I went again the next day and picked up the laptop. I spent the entire following day setting it up, and then I got on the plane and flew to Vegas. Amount of code I had to demonstrate to my new boss: zero. I did have plenty of reading for the flight, though: two expensive textbooks.<br />
<br />
Jacob collected me at Vegas airport and dropped me at my hotel. I had a shower an we copped some lunch, and then we got to work.<br />
<br />
Jacob was--and is--an ideas man. I don't mean that in a derogatory way: he has a list of patents as long as my arm and he has a genuine talent for finding new angles on the problems of the sector. Jacob can write code and will often built proof-of-concept prototypes or small routines to speed up difficult tasks, but he is not an engineer or an architect, and he'll tell you so. That was what he needed me for.<br />
<br />
It didn't matter that I couldn't demo anything yet, because Jacob had a new idea of his own. If it worked, it would massively reduce the memory footprint and increase the speed of the software in a particular process that has always been an industry bugbear. We spent most of the first week working through the maths of it. Could it work? What were the limitations? The concept was great, but would it scale?<br />
<br />
While I was there I also got to sit in on Jacob's daily phonecalls from HQ in Sweden. Management told him that the development team was in chaos. They had a deadline in March (this was just prior to Christmas) and nobody even knew what work was going into it. The team leader stepped down. Blood was raining from the sky and the Frost Giants were waking from their sleep beneath the ice.<br />
<br />
I suggested to Jacob that, if nobody knew what needed to go into the release, there shouldn't be a release. He himself was still coming to grips with the organization and it spoke volumes about his predecessor that the team had no idea what they were supposed to be working on. There had to be a release; but management didn't know or care what was going to be in it. Jacob very sensibly set the bar low: some cleanup and a couple of small features.<br />
<br />
As for the supposed 'chaos'... well, the team leader had, indeed, stepped down, but the rest of it was hysteria. Jacob told me that the team had been fine when he'd seen them, two weeks ago. He appointed a new team lead and set them to work. It would take ma about a year to fully understand how the team could seem calm and organized to Jacob while the rest of management saw them as a pack of insane chimpanzees flinging faeces around the office. Both views were correct.<br />
<br />
The second week I was in Vegas, an engineer named Tyko flew in to join us. Tyko was young, although it wasn't obvious due to the ZZ Top beard he wore (in retrospect he was probably going more for a Storm Lord kind of a look). He was quiet and thoughtful and clearly very smart. Tyko was a dyed-in-the-wool hacker, but, judging by the books he was reading, he was building an excellent engineer's skillset as well. Jacob had selected Tyko to join us for a good reason.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLjicv1iccD46XxIfHyhQqOvIEVd-Cw8WXslwnWo6hyphenhyphengAMimW5dz4jh9P7pSqNEmpKAUVZHfgoobx9NubYYwXdmNX413g3M-vCiVoNEOOnf56Mm4jcF3dPncctELyeQ-ZNadZqsFsYt0Q/s1600/stormlord_cover.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLjicv1iccD46XxIfHyhQqOvIEVd-Cw8WXslwnWo6hyphenhyphengAMimW5dz4jh9P7pSqNEmpKAUVZHfgoobx9NubYYwXdmNX413g3M-vCiVoNEOOnf56Mm4jcF3dPncctELyeQ-ZNadZqsFsYt0Q/s320/stormlord_cover.jpg" width="264" /></a></div><br />
Tyko wasn't much interested in Jacob's new idea, but we were all interested in improving the product. I grilled Tyko on the codebase and I got more than I bargained for.<br />
<br />
The drivers didn't work, and hadn't been maintained in years. The main application service was a resource hog, and nobody quite understood how it worked. The core of the product was a nightmare kluged together out of seaweed and snot. The database was a set of flat files that were loaded up into STL containers without any concern for paging or caching, and these themselves were copied all over memory over and over again.<br />
<br />
Into the bargain, Tyko didn't think much of the team. He named three good developers, but he claimed that the rest of the group were humps. The smartest guy on the team, in Tyko's opinion, was Åke--who had just turned in his notice and was going across to work for the competition. Tyko said that Åke was not a good engineer, but he was apparently a genius hacker who was brilliant at solving tough but discrete problems. The 'g' word again: without having met him or seen his code, I was glad that Åke was leaving.<br />
<br />
Tyko's words boiled down to this: the product was a pile of shit, and the team didn't know what to do about it.<br />
<br />
I said I would take a look at it if somebody would give me access to the source code. The competing product I'd built at ATBSoft was reviewing really well, usually ranking in the top 3 products of its kind, so I was confident that I knew what I was doing.<br />
<br />
My hope then was that I could suggest some quick fixes that the team could then refine into a plan to fix the product. My job was to be Jacob's research adjutant; I wasn't really a part of the team and I didn't want to overstep myself... but if the product was as bad as it sounded, the brilliant and fancy ideas that Jacob and I was supposed to be building for Jacob were worthless.<br />
<br />
At the end of the week Jacob took me and Tyko back to the airport to catch our respective flights. Jacob wasn't sure exactly what would happen next: he was trying to sell his family home so he could pick up his things and relocate to Sweden, but the US housing bubble had burst and there were dozens of brand new, unoccupied places in his town going cheap. We'd meet again in Sweden the following January and really get things moving.<br />
<br />
Once Jacob was gone, I walked Tyko to his departure gate. My flight wasn't for a couple of hours yet. Tyko looked at me and said: "It's not going to work out."<br />
<br />
Tyko and I had been staying in the same hotel, and we'd gone drinking in the casinos a few times after dinner. Tyko, I think, was trying to set a new benchmark for Scandinavian impassivity, but he was a smart guy and I came to trust him. This was not what I had expected to hear from him.<br />
<br />
"You mean Jacob's matrix ideas?"<br />
<br />
"No, I don't think <i>Jacob</i> is going to work out. I think one skilled developer is all he has to bring to the table." I was a bit stunned. Jacob was somebody I admired and trusted him. I knew that he wasn't much of an engineer or a leader, but he was a very sharp predictor of technology and he knew the industry inside out and he was well-respected for it.<br />
<br />
There was a strain of naked pessimism in Tyko's tone that I'd never heard before, but which I would become very familiar with over the coming months.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0tag:blogger.com,1999:blog-4653950091908276856.post-5059115545228890422011-06-20T10:08:00.001+10:002011-06-23T10:49:14.366+10:00Back to the FutureI accepted the job that Jacob offered me at Fjord Systems, but not much happened for a while.<br />
<br />
I didn't tell anybody at Outerlink, I just kept showing up at work while Fjord got their act together. I kept up a lively correspondence with Jacob, but I couldn't start work until human resources had sorted out the paperwork... and they took their time getting to me. They asked me for a 'salary history'; something I'd never had to do before. I figured it would be a good place to start negotiating from, though, so I made one up and sent it to them.<br />
<br />
Time passed and a whole lot more nothing happened. One day at lunch the Butcher grilled me about working in the States. "There's no challenging work left in Australia," he lamented. I couldn't help but agree with him.<br />
<br />
I was sick at home when the phone rang early one morning. Eventually I established that the lady on the line with a thick accent that I couldn't identify was calling from Sweden, and that she wanted to negotiate salary with me. She offered me a lot less than what I was currently making--which she was well aware of, given that I had provided her with a salary history a few weeks prior. I was confused fuddled. Were we talking Euros? Pounds sterling? Swedish kronor? No, Australian dollars.<br />
<br />
Eventually I bargained her back up to the salary I was currently getting and she told me she would send me a contract.<br />
<br />
Time passed and nothing happened. I became more and more concerned about my poor productivity. Surely somebody had noticed how slow I'd gotten? At my job with ATBSoft I would write more code in a day than I was now writing in a week.<br />
<br />
Eventually a contract arrived. I signed it, sent it back, and... nothing. I didn't have a start date and I didn't have a reciprocally-signed copy. I kept working at Outerlink and I wondered if I had hallucinated the whole thing... but no, I kept receiving email from Jacob. He was still based mostly in the US and he didn't know what the holdup was.<br />
<br />
I got on the phone with HR and asked what was going on. "Oh, I have your contract here. It's been sitting on my desk for weeks."<br />
<br />
We agreed on a start date, and I wrote up a letter of resignation for Outerlink. I'd been there for barely six months and I felt bad about it--I liked the people and I knew that it was expensive to recruit and train a new developer. I was the second developer to resign in that timeframe and I knew they'd been having a hell of a time replacing the other guy.<br />
<br />
I couldn't help but remember that the last time I'd been in my manager's office with the door closed it had been for a dressing down about using the flexibile hours I'd been promised a few months prior.<br />
<br />
"I hope that's not what I think it is," said my manager, indicating the envelope in my hand. He looked genuinely unhappy. "I'm afraid it is."<br />
"You can't leave, you're the guy who gets things done!"<br />
I gave him my letter. He read it.<br />
"Would you stay if we offered you more money? I can do that, now that we know what you're capable of, and everything..."<br />
I couldn't quite believe that he thought I was working so hard for him. "Um, no. This isn't about money... this is the work that I want to do."<br />
<br />
I broke it to Sinclair first. He took it personally. "This is about the people, isn't it? This is personal." I felt terrible and I told him that it absolutely wasn't. I think he believed me.<br />
<br />
The rest of the team had mixed reactions. The Butcher approved. Chop was thrilled for me. Chitra quietly wished me luck. Ross sniggered about how long it would take to train up a replacement.<br />
<br />
In my couple of days, Outerlink hired a contractor to pick up some of the slack. He was wild and woolly and bore a fair resemblance to Doc Brown from back to the future, so the team started to refer to him as The Professor.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh075WZ6aI911ftsmay8brUcLSrpNGzLDZN-i_hp4wnszfiDVQ8mZffCHo74u5pQRq4Tj5n0sB_CMX9w0_Cq6EyXCULlNf_VQPShAImBfMOI72L1MoFqJoU-MtKPhltg-tBpjlBO0Q7SPw/s1600/scott.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh075WZ6aI911ftsmay8brUcLSrpNGzLDZN-i_hp4wnszfiDVQ8mZffCHo74u5pQRq4Tj5n0sB_CMX9w0_Cq6EyXCULlNf_VQPShAImBfMOI72L1MoFqJoU-MtKPhltg-tBpjlBO0Q7SPw/s320/scott.jpg" width="320" /></a></div><br />
The Prof would be immediately picking up some of my workload, so I did a hand-off to him. I spent two days locked in a conference room with him, most of which time was spent listening to him describe his exploits at his prior job. I don't know why he felt the need to impress the guy who was leaving, but he failed to. The Prof espoused everything I disliked about the way the software business had been heading: writing inefficient, resource-hungry code with out-of-the-box tools that don't scale. He described to me in excruciating detail how, at the start of the project, his team was told that they could never get their app to perform using that methodology, and when they were done with it it didn't... until they quadrupled the number of CPUs running it. This, he cited as a victory.<br />
<br />
I kept telling myself that I didn't care, it wasn't my problem.When my manager asked me what I thought of the Prof, I could only say "Keep him away from the server." But Doc Brown was a good sign. I was leaving the past; all this old hat stuff and heading for a research gig. I was indeed going BACK TO THE FUTURE.<br />
<br />
I finished up, and Jacob had the logistics manager at Fjord Systems draw up some travel plans for me. "I'm flying you out for two weeks," he said. "So we can get everything rolling."<br />
"Sweden must be cold this time of year, " I said. It was the start of December. "I'll have to buy some long underwear."<br />
"Sweden's cold, but you don't have to worry about that just yet," he replied. "We're going to do the briefing here at my place. In Vegas."<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG5_T7fUcgDHnFCqJEvNHhR48770lFIbi1gfbzcVxgy3BZJab8prxajZMsx66PLexCPYildFx4azGeCiDLz6vpE_n3A0C-IRp_k5NuZvZreo9sFI3iHRj6GKccSG3JcN9sbXPbFB2UKNI/s1600/vegaslightsani.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG5_T7fUcgDHnFCqJEvNHhR48770lFIbi1gfbzcVxgy3BZJab8prxajZMsx66PLexCPYildFx4azGeCiDLz6vpE_n3A0C-IRp_k5NuZvZreo9sFI3iHRj6GKccSG3JcN9sbXPbFB2UKNI/s320/vegaslightsani.gif" width="320" /></a></div><br />
I was the happiest I'd been pretty happy with the way this was shaping up. I ordered some very expensive technical books from amazon, with expedited shipping, so that I could really jump into the research end of things. I wanted to be able to demo some ideas once I got over there.<br />
<br />
Then was when my laptop died.<br />
<br />
Looking back on it, I already had all the information I should have needed about how things were going to turn out.Pikehttp://www.blogger.com/profile/07535014222131151048noreply@blogger.com0