Sunday, 21 August 2011

Lions and Tigers and Bears

Out of college with my degree, I had everything going for me except for a job.

I didn't know what kind of job I wanted, but I did know the kind I didn't.

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.

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."

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.

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?"

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?"

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.

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. 

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.

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.

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."

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.

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.

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 does it work?"

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.

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.

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.

The following Monday was my first day at work. My first day full-time employed, in any capacity.

I was now a real person.

Sunday, 14 August 2011

Robot Monster

I 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.

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.

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.

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.

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.

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.

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?

My thesis was another matter altogether.

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.

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.

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.

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?"
"It will be ready. Don't worry about it."
After a few weeks Vicky called me into her office.
"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."
"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?"
"Professor Gupta says that you should just do some manual testing instead."
"My thesis topic is 'automated testing'."
"Not any more."

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.

"I'm going to go and speak to the Professor."

"Um... Professor Gupta is actually at a conference overseas for the next month."


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.
"But..."
"This is computer science. We don't do statistics."

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.

Yeah, I know. You can stop laughing now.

Friday, 5 August 2011

The End of the World as We Know It

I 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.

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.

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.

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.

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.

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.

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
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...

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.

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 fine.

Wednesday, 27 July 2011

Ars Moriendi

A couple of days before the end of my vacation I received an email from Andy, the Project Manager at Fjord Systems.

"Pike, I hate to ruin your holiday, but everything's gone wrong. We're in deep shit."

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.

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.

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.

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.

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.

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.

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.

Joseph was granted a patent that he had filed. Nobody seamed to care. "Software patents don't mean anything," I was told.

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.

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.

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.

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.

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.

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.

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.

I did get a number of feature requests. "This comms layer is useless," Srinith would say. "It doesn't do X."
"It was designed so that could be built on top of it. It's easy enough."
"It should be handled inside the comms layer."

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."

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.

"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."

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."

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.

"Sorry. Anders told him to go ahead." In other words, Anders needed me to fail.

"What's he going to build? What's the design? Is there a document?"

"He's just going to do whatever."

I could see the death of my baby looming.

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.

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.

I wanted to make a graceful exit.

Friday, 22 July 2011

Misfits of Science

University 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.

The other thing was the maths.

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%.

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.

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.

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.

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 dynamic memory... 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 pointers 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.

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 making things, but I felt like I'd already done all of these things before. I wanted to build Skynet, 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.

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.

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.

I enrolled in COBOL. I wanted to do C++, 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.

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.

This was the single best thing I ever did in my five years at University.

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++.

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.

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.

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.

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.

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).

Did I want to be an engineer? Did I want to go and work for a bank? No, I decided.

I wanted to build killer robots.

Wednesday, 13 July 2011

Paintball

There 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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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."
"They're smart guys, they're just not used to being able to..."
"Pike, they're idiots. This is going to end badly."

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.

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.

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.

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.

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."
"Dude, it's paintball, and you used to be in the Special Forces."
Again with the special forces. Where was this coming from? "Sven, I was never in the Special Forces." "Well, you know. The Marine Corps."


"Sven, I'm from Australia. We don't have marines. I was never in the army."

He went to the other team, but it was clear that he didn't believe me.

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.

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.

Thursday, 7 July 2011

The Pit and the Pendulum

I got straight to work when I got home, jumping right into every programmer's favourite pit: documentation.

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.

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 thinnest of of shim interfaces. 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.

It looked great on paper.

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.



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.

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.

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.


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.

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.