Sunday, 25 December 2011
Dude, Where's My Car?
I needed a new job. The IT business was booming over in the US and relatives were beginning to ask me when I would be opening my own startup and raking in those easy VC millions. This was December of the year 2000. I didn't want to start up on my own, but I'd been to the US a couple of times and I wanted to go there. The US was the real world.
I was bored with Tigerland. I was bored with database programming; I felt like I'd been there and done that. What I really wanted to do was graphics programming, so I bought an OpenGL textbook and started to teach myself some new tools. 3D was a lot easier with real libraries than it had been at University. I took my 3D projects with me to work and I worked on them at lunch time, much to Meggs' chargrin. It was quite obvious that the code I was playing with had nothing to do with Tigerland's business.
I had also started looking into what it would take to get me over to the US. An H1B skilled worker visa seemed to be the trick. I found an ad in the IT section of the Age newspaper (in a few years' time this section would be discontinued, and IT jobs would vanish almost entirely from Melbourne's biggest broadsheet newspaper). They were looking for programmers who wanted to work in the USA, so I sent in a resume. A couple of days later I received a phonecall inviting me to interview.
I called in sick on the scheduled day, put on my suit, and went in to the temporary office from which the Americans were conducting interviews.
The receptionist gave me a questionnaire to fill out. The only question I remember from it was "What is the minimum salary you are prepared to work for?" I knew roughly what that should be, so I answered it truthfully. Stupidly.
The Americans turned out to be a pair of Indians. The interview turned out to be piss easy. A C++ test that was much easier than the Tigerland test and some verbal long-answer questions about broader topics, like multiple inheritance. I breezed through it.
The company was a big contracting firm based in Silicon Valley. The Americans sold it to me pretty hard--the lifestyle, the location. "Oh, you like SCUBA diving? There's amazing diving in California." They told me all about the benefits: medical, dental, a relocation bonus... I was pleased, but in the back of my mind, there was doubt. There was a used car salesman vibe to the whole thing. I just didn't trust them.
The Americans' offer letter went into the mail the next day. A complete package: contracts, visa paperwork, the whole nine yards. The offer was for that minimum salary I had indicated. There was no relocation bonus in the contract and a few other promises were also missing. The Americans called me and asked me if I would accept it. Salary was not negotiable. They claimed that the missing contract items were in fact there. I told them I was thinking about it.
I rechecked the contract. The missing clauses were definitely not there. I had, meanwhile, been reading about the cost of living in Silicon Valley and I was becoming worried about it. One article spoke of a how the mayor of one of the municipalities there had had to resign because he couldn't afford to live there any longer. A friend of mine who lived in the States who and had some experience with budgeting crunched some numbers for me, and it looked as if I could scrape by on my non-negotiable salary... barely.
I wanted to go, but I didn't trust the company and I really couldn't afford Silicon Valley. I told them no. They tried hard to change my mind, but not so hard that they offered me more money. I walked away from the table... (my willingness to do this has been at various times an asset and a liability, across the intervening span of my career)... but now I had a plan.
It had been ridiculously easy to get that job offer, I reasoned, and I hadn't even left home. How many more opportunities would I find if I actually went over there in person?
I was going to do it, early in the new year. I figured how much money I thought I would need to go over there prospecting and calculated a departure date based on that. I remember doing that quite vividly. I was by myself, walking down the street at lunch time. The sky was blue and I would soon be free.
Amos was back in town and the talk was that he was thinking about coming back, if there was room for him. I went to the technical director and I said told him that I was planning to leave, in case it had any bearing on whether he would hire Amos back or not. He did not seem surprised.
I went back to work. The days passed. I worked hard to close off everything that was assigned to me. Meggs didn't talk to me any more than he had to, and that was fine.
A few weeks later the MD invited me to the pub at lunch time and told me that Meggs had instructed him to dissuade me from leaving. He offered me money. I told him that my decision was made. I was going to the US. I also mentioned that the money he had offered wouldn't have been enough, either. He was shocked when I told him what the going rate for a developer with a couple of years experience was, but I knew what I was talking about and I had statistics to back me up.
We had drinks down the pub on my last day. I got monstrously drunk and Guthrie told me I could crash at his house, which was a lot nearer to the pub than my own. I threw up in the taxi. The following morning Guthrie offered to drive me home... whereupon we discovered that his car had been stolen. The film "Dude, Where's My Car?" was then playing in the cinemas and I thought he was playing a joke on me.
Still, Guthrie told me that despite all of the trouble, it was a very good week for him indeed: the directors had paid attention when I told them what kind of money we were worth and he found himself on the receiving end of a very large payrise once I was out the door.
As for me, I was bound for the United States. By then, of course, there was a new phrase in the air: dotcom bubble. One of our own ministers boasted that we hadn't been wiped out because we'd failed to catch the wave in the first place. But I was already on my way.
I would find out for myself just how much blood was in the water.
Monday, 7 November 2011
Riding the Tiger
Amos 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.
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.
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.
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.
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.
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.
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.
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.
"Well, okay, then," I said.
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.
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?"
"Meggs, I told you that was going to happen."
"I would never have agreed to that!"
"But... it was your design! I built it exactly the way you asked me to! You even drew me a picture!"
"Where's this picture, then?"
I've never thrown away a design drawing since.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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."
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.
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.
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?"
That was what I had to do. It was time to climb down from the tiger.
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.
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.
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.
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.
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.
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.
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.
"Well, okay, then," I said.
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.
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?"
"Meggs, I told you that was going to happen."
"I would never have agreed to that!"
"But... it was your design! I built it exactly the way you asked me to! You even drew me a picture!"
"Where's this picture, then?"
I've never thrown away a design drawing since.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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."
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.
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.
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?"
That was what I had to do. It was time to climb down from the tiger.
Thursday, 13 October 2011
Sugar Fixed
... and we're back. Sorry for the disruption, folks.
I've begun working on the next entry now and it should be up over the weekend or early next week.
-- Pike
I've begun working on the next entry now and it should be up over the weekend or early next week.
-- Pike
Sunday, 25 September 2011
Sugar Fix
Hey, guys and girls,
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!
Pike
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!
Pike
Wednesday, 7 September 2011
Tiger Stripes
Guthrie 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.
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.
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.
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:
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.
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 Standard Template Library well in advance of the majority of programmers in the field.
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.
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.
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 ODBC 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.
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."
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.
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 did 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.
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.
I had no idea those challenges would be social, rather than technical.
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.
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:
- Code until the problem is solved.
- Execute the automated regression test scripts to make sure that nothing has broken.
- Write new scripts to test what you have just written or fixed.
- Merge down any changes that other developers have checked in while you completed your task.
- Code review.
- Adjust solution as per review.
- Merge.
- Run scripts.
- Code Review.
- Checkin.
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.
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 Standard Template Library well in advance of the majority of programmers in the field.
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.
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.
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 ODBC 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.
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."
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.
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 did 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.
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.
I had no idea those challenges would be social, rather than technical.
Sunday, 28 August 2011
Enter the Dragon
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.
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.
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.
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.
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.
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.
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.
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.
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 version control system 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.
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.
Guthrie and I were not allowed to program just yet. We were set exercises in using command line utilities to search and replace in the code base using grep and a variety of homegrown tools (again, most of them authored by Meggs). The sort of tasks that are probably familiar to any UNIX 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.
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.
"Congratulations," said Meggs. "You're now officially programmers."
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.
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.
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.
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.
Now, finally, I thought I knew what would happen next.
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.
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.
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.
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.
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.
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.
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.
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 version control system 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.
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.
Guthrie and I were not allowed to program just yet. We were set exercises in using command line utilities to search and replace in the code base using grep and a variety of homegrown tools (again, most of them authored by Meggs). The sort of tasks that are probably familiar to any UNIX 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.
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.
"Congratulations," said Meggs. "You're now officially programmers."
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.
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.
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.
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.
Now, finally, I thought I knew what would happen next.
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.
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.
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 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.
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.
Subscribe to:
Posts (Atom)