Thursday, 28 April 2011

Fear and Circuses

The acquisition went ahead and the owner of our company took his payout. He remained a part of the organization, but I think that basically meant that he continued to draw a salary and occupy the most comfortable corner office--a process that had really begun about the time that Bashir was hired.

The man who had mastermind the acquisition by our new corporate overlords, Lester Gould, was technically in charge of our group, but since he was located off site at our new head office this really mean was that Bashir, who served as the primary interface between our group and the parent company, was in now large and in charge.

While our network was refitted to make us a part of the larger company, we had some downtime and all of our ongoing work came to a stop. "Read the manuals," we were told. "You'll be back online in two or three days." Still smarting from nearly being sacked, I decided that this was the opportunity I had been looking for to show how much I really did bring to the table.

When I was first hired on by the company my skills as a database programmer were a key selling point. Our product was built on a flat file database and, as is usually the case, a decade later it had become apparent that this wasn't going to serve our needs very well. Customers wanted multiple-user access to each project, and that was difficult with a flat file system... and in fact impossible without some kind of client-server architecture. Early in my tenure, at my manager Eric's request, I had drawn up some design documents and some UML pictures for this. After some consideration, Eric had then decided not to include me in the meeting where he presented them to the then-owner of the company and nothing ever came of it. A proper back end was something our customers desperately wanted, but it was a huge job and the company simply didn't trust me, a junior programmer with a bad attitude and a shitty track record, to do it. So they did nothing.

I decided that I would spend the three days of downtime building a prototype. It was hacked together quickly, but I did manage to get it working to the point where I could demonstrate what I still think is a quite compelling picture. I could show data migrating into the database, and an object-oriented middle tier capable of reading that data back. I could then show those middle-tier objects adapted back into our usual data-structures, pushed through the graphics pipeline and displayed on the screen with very similar performance to the old system. It was looking good.

I called Bash and Eric into my office for a demo and ran the prototype side-by-side with the release so that they could compare the results. Then I showed them how easy it was to build out the middle tier objects and how to do the migration. It was rough and I did not have that middle tier running as an external server yet, but it certainly worked. I built the prototype on Access, because I had no access to anything else with the network down, but I made it clear that we'd have to find a real database engine. It wouldn't scale up, but it did the job for a proof of concept. We had already learned the worth of Access with the Development Database, and I actually believed they were listening to me now. Bashir's eyes lit up and he congratulated me on my work. Sincerely, I thought. I was pleased with myself for the first time in a year, and I resolved anew to make the most of this adventure. This lasted for almost an entire week.

Word came down from head office that a part of our application needed to be made to work with an external application, which was code named 'Tarzan'. This, of course, was only partially true, but I had no idea how these games were played at the time. Some engineering heavyweights came down from head office to look at our code, and, Rhaj later admitted to me, they had laughed his face.

In order for our product to become part of Tarzan's workflow, we would have to work with Tarzan's database... although the Heavyweights had not decided which database engine to use. I was not allowed to participate in those meetings, but, when Bashir later reported what had been discussed in those meetings to the rest of us he quite deliberately refused to look at me when he revealed that the Heavyweights had weighed up all of the options... and chosen to use Access.

Let me be clear on that. Access would not scale well enough to be useful for our tiny internal development database, let alone for our actual product... and our product was only a tiny part of Tarzan. The Heavyweight engineers wanted to use it for the entire product. Suddenly I was glad I had been excluded from the meetings.

Bash came to me later in the week with a new task: to create a complete data model for our application. I estimated a week for the task, because our project was huge: in addition to the flat file database we maintained a huge amount of data in other formats including, but not limited to INI files, the registry, various rendering formats, and of course, good old Access. It was, frankly, a disaster, and it was difficult to document because I was always finding new bits of persistent data. At the end of the week, when it wasn't ready, and Bashir was unhappy with me. Apparently he had promised it to the analysts for Tarzan could work out how best to proceed with the integration.

I turned the data model in the following week, and within a couple of days Bashir and Rhaj came to see me--both of them angry.

"We showed this to the Tarzan guys and they're appalled!" said Rhaj. "It's a huge mess!"
"That's right," I said. "It's full of duplicate data, the keys are poorly defined, there's been no attempt to normalize it.."
I could see that none of this meant anything to Rhaj. In reply he spluttered: "So why did you write this garbage?"
"Uh... because Bash asked me to document our data model, and that's what I did. I didn't design it... you did."
Rhaj had no reply to this and they left. I'm quite sure that they went back to the analysts and told them that it was the fault of a junior developer (that bloody Pikeman) and that of course it wasn't the real data model.

That was the last I ever directly heard about the database project, although I did overhear Rhaj and Bashir talking about it in the kitchen. It had been given a codename of its own and a satellite office in another city had been tasked with building the entire back-end for Tarzan. Again. They had already spent two years trying and failed, and now they had been authorized to start over.

The tiny part of the mysterious 'Tarzan' that I had witnessed seemed like a circus, replete with clowns and jugglers and jungle beasts but completely lacking in animal wranglers or a competent ringmaster... and it was 3 years over schedule even before we had started doing our part.

That was about the time that the ringmaster, Lester Gould, decided to put down his whip and quit.

Thursday, 21 April 2011


I was a child in the eighties, when computers started infiltrating the home for the first time, and I think that's probably when my interest in the field first arose.

I was a precocious reader, and I vividly remember the first time my parents took me to a proper bookstore and let me choose a book. I was already reading pretty well, but most of the books I had had been chosen for me or acquired second hand at school fetes. I knew the work of a small handful of authors very well, but I wanted something new and different. Even in the combined Children's/Young Adult  section there was a lot to choose from. What was I most interested in? I asked myself.

Science Fiction, I decided, was the way to go. There was nothing more interesting than the future. The book I chose was Granville Wilson's WAR OF THE COMPUTERS, which was not only science fiction, but it had green gun  toting robots on the cover.

In a dystopian England, a young boy spearheads a revolution against the tyrannical computers than run the government. At least, that's what I think the book was about; I no longer recall it. I'm pretty sure I read the book twice, and I don't remember struggling with it, but I expect that it was a bit  politically complex for a 7 year-old. 

The book did, however teach me a bit about the difference between a computer and a robot, and I left with an abiding fascination for both of these things, and the interface between them. At the time I don't think I ever expected that I would one day have the opportunity to program a robot... and if I had, I certainly had no conception of how unglamorous it would be.

A few more years into the 80s we started to hear the words 'computer whiz kid' applied to children who displayed an aptitude for information technology. Whiz kids seemed to feature in early science fiction movies, some of which I saw, but most of which I absorbed through the novelizations. There was Wargames, in which  teenaged Mathew Broderick hacks into a military simulation computer, and whose subsequent interference almost provokes World War 3 (in seems far fetched that a simulator might have access to a realworld nuclear arsenal, unless you have actually worked in IT). I didn't see TRON until much later (and I was disappointed when I did), but I did own some of the toys.

There were others, but my personal favourite was D.A.R.Y.L., featuring an amnesiac nerdboy with a preternatural gift for hacking (but also for anything else he set his hand to, including baseball). Daryl, it turns out, is actually an artificial life form developed by the US military. He is recaptured, but he escapes by stealing an SR71 Blackbird. This, I think, not only encouraged my interest in computers, but it also kindled my childhood love of fighter aircraft. If you had asked me then what I wanted to be when I grew up, I would have said a fighter pilot. (Or, some days, a SCUBA diver.)

I desperately wanted to be a whiz kid, but I never connected that with an actual occupation. I even knew a whiz kid; a neighbour who lived around the corner from us who happened to share the same first name as me. I liked Jared Jones, and my parents used to take me around to play with him quite often (sometimes he even let me use his computer), but he was not a popular kid in school. In fact, looking back on it, he was an archetypical computer geek, a mama's boy who was constantly tormented by a gang of bullies.

But despite that  I was jealous of JJ, and I suspected, deep in my heart, that the only reason he got to be called a whiz kid and I didn't was that he had a PC and I didn't.

I don't know what happened to JJ because my family moved away a couple of years later and I lost touch with him, but I wouldn't be surprised to learn that he was now in the IT business. Technology being what it is I suppose I could find out, if I really cared to, but that's all a little bit War of the Computers for me.

Monday, 18 April 2011

Two strikes

There were three occasions when Bashir threatened my job, but in the end he was not the one who swung the axe, and mine was not the only head to roll.

In the first two incidents I can claim innocence. The third... not so much.

The first time, the warning came through my manager Eric, no Bashir. "Jared," he told me, "Bashir says I need to warn you that some people have complained about you."
"What did I do?"
"Well... it's the hours you work. You always leave by 5:30, and they stay until 6 or 8."
The other guys would start work at 9:30, 10am, even 11am sometimes. I was working normal business hours, as stated in my contract... not to mention nights and weekends when required, along with everybody else. I was certainly pulling my hours.

I think Eric could tell, from the look on my face, what I thought of this complaint. "I know you start work early," he said (which he did, because there was spyware on every employee's computer, monitoring our every move.).
"Are you asking me to come in to work later and leave when the other guys do?"

I knew that Vlad, who occupied an office close to mine, started work even earlier than I did and left before I did in the afternoon and I was about to bring this up, but Eric said "No, not really. It's okay, but Bashir says I have to tell you there's a complaint."
Which of course meant another black mark in my file, even though it was not something I had actually done wrong or could be disciplined over.

The second time I was threatened, it was over somebody else's mistake.

A device that our customers regularly used with our software had modified their data format, and because it was such a popular device we had no choice but to update our software. I was initially pleased to have had the work assigned to me, since it was the first time I had been given anything real to work on since the debacle of my first assignment. I was given a document written by Kerry which actually resembled proper analysis of the problem, too. It was actually looking good...

... until I actually saw what I was going to have to work with. The existing code for the prior version of the data format was convoluted, riddled with gotos and nested switch statements and bleeding across several dialogs. It was ugly. I gritted my teeth once again and spent a week on it, checked it in, and forgot about it.

A few weeks later, at the end of one of Bashir's quarterly release cycles, I happened to notice that Sam had checked in some code in the same area. Once the data was imported from the device our application would shell out to a Runtime Access app to allow the users to do some postprocessing and at that point it was unclear from the vantage of the C++ team what happened to the data at that point. Sam had tried to clean up that area of code (like I said, it was ugly and unintuitive). I was pretty sure that what he had done wasn't going to work, but there would have been no way he could tell: the problem was buried many layers deeper than the area he had been fixing. I gave it a try and sure enough, the importer was broken.

It was the day before the release and QA had already signed off on the new version. Sam wasn't in his office, so I went directly to Neelam and told her there was a problem. Then I went and got a coffee and moseyed back to my office to get on with my regular workload.

Ten minutes later I heard Bashir come storming down the corridor. "Who broke it?" he demanded. "The release is tomorrow. Who screwed the pooch?"
"Jared said..." said Neelam.
"WHO WAS IT?" he said again, in a voice that suggested that punishment was about to be meted out. "WAS IT PIKEMAN?"
I don't think he realized that I could hear him, despite the fact he speaking loudly in the hallway and my door was open. He certainly seemed surprised when I poked my head out and said "Nope," I said. "I'm just the one who found it. Would you like me to help Sam fix it?"
"Uh... yes, okay," he said. I think the only thing that saved me was the fact that I said that in the corridor where everybody else could hear it.

Sam and I fixed the bug within about fifteen minutes and that was it. The release would have gone out on time, except that on the following day the CD burner broke. I could have cried a river.

The third occasion that my job was threatened came about a year into my tenure at the company. There has been mysterious consultants wandering around the company and we all knew that something was afoot. About 6:30pm the next day I received a phonecall after work from one of my best friends in the building, Connor. "Pike, just want you to know that Bashir was looking for you this afternoon," he said. "He wouldn't say why, but he looked serious." Despite the earlier warning, it appeared that Bashir had forgotten that I worked regular office hours.
Next morning when I got in to the office I spotted Bashir coming out of the kitchen. "You were looking for me, Bash? What can I help you with?"
He looked startled. "No, no, I wasn't, it's nothing."
"Okay great," I said. I went back to my office, and forgot about it.

Late in the afternoon Eric came to my door, looking extremely uncomfortable. "Bashir wants to speak to you," he said. "Come with me." One the way to Bashir's office he ran at the mouth about the next tasks that I was going to be assigned. It was quite out of character for him and I realized that he was trying to reassure me.

Eric followed me in to the office and closed the door. I sat down in the seat Bashir indicated, and Eric stood behind me.

"Jared, you haven't been a very good employee lately," said Bashir. There were complaints in my file. I was recalcitrant about fixing problems where there was no clear resolution. I lacked enthusiasm. I was too critical of the codebase. I wasn't fixing enough bugs. He himself had observed me sleeping at my desk.

This was all true.

I said I was sorry. I didn't quite grovel, but I'm sure I was a pitiful, sitting there in the hot seat, fearing for my job and, more specifically, my work visa. More than anything else that happened to me at that company, the one thing I most regret is that display of contrition.

"I'm going to give you one more chance," he said. "Because you know a lot of stuff and you bring a lot to the table, but this is your only warning."

I was didn't quite believe what I was hearing. Had he actually said that to me? Every time I had tried to improve the quality of our processes and our code my input had been dismissed out of hand, and sometimes it had gone onto my permanent record. This sounded a little bit like validation.

Why the change of heart? My guess is that Eric (who I certainly had my differences with) had come to my defence when he thought I was being victimized. My opinions were unpopular with the senior programmers, but the junior programmers... especially the newest hires... seemed to privately agree with me. What I didn't know at the time was that a sea change was coming and that suddenly the company realized that it was going to need to demonstrate a more, ah... modern... approach to programming.

The following day layoffs were announced. Two programmers (dead weight;  who had been hired because they asked low salaries or they were friends of friends) were let go, as well as a handful of people in other departments.

The day after that, a stranger arrived to explain that our company had been acquired by a much larger one. Any questions?

I asked when we would be given the free t-shirts.

The stranger gave me a disbelieving look and then looked for another question. I think that Bashir was probably angry that he had kept me on. But, right after question time the t-shirts were duly passed out.

Despite my cynicism, I was thrilled and excited. There was a lot of fear in the business when that was announced, but I could not have been more pleased. Not only would this give me exposure to new technologies and new opportunities, but surely our new management would put our house in order. A new broom was exactly what we needed.

I had no idea what I was in for.

Friday, 15 April 2011

Pattern Recognition

We were working nights and weekends, trying to put out a release, when I was assigned a bug in the patterning system.

This was deliberate, of course. Bashir had scheduled quarterly releases for one reason and one reason only: he wanted to show deliverables on his resume. In order to make sure that these were attainable, he deferred all new development work in favour of a less risky and time-consuming approach: working through the bug list. Bash would choose a number of defects and declare that they had to be completed for the release. As the list reduced in size he would top it up to ensure that we worked through through the weekends.

I'm not making this up. Bash was heard to say, in front of the entire team that he liked to burn developers out and then hire new ones for cheap. When this elicited complaints, he arrived at a staff meeting with a three inch stack of documents. "You know what these are?" he asked. "These are all the resumes I've received from people who want your jobs. And that's just this week." He said it with a smile on his face.

During one of these death march releases I was assigned the defect in the patterning system. "An easy one for you, Pike." I didn't like the patronizing tone, but I didn't want to reinforce my growing reputation as a troublemaker, so I took it on without complaint. It was, after all, my job to fix these things.

I spent more than a full day trying to determine what this 'easy' problem actually involved.

Our software allowed users to set a line style with which two dimensional shapes would be drawn. Dashes lines, dotted lines, dash-dot-dash, crosses--there were at least a dozen options.

In addition to that, users were able to provide cel patterns in two different formats, in which case the shapes would be drawn as a continues string of cels.

All of that worked fine, and I couldn't find a problem that needed fixing. Eventually my manager Eric managed to communicate to me that it was possible to have a cel and a line style active at once. In this case, the cels that constituted the objects would themselves be drawn with the selected line styles.

This worked fine for one for the cel formats, but the other yielded results that were... undesirable. At some point it the graphics engine would take a left turn and the shape would unravel into something unrecognizable.

Nobody had analyzed the bug before it was assigned to me and I had to grill the dev manager, Eric; a product manager, Kerry; and the architect, Abhiraj, who had written the code in the first place. Nobody wanted to help me; they were all working weekends as well, and everyone was tired and surly. But, finally, I understood what the issue was and I was ready to plunge into the codebase.

In this user interface was a swiss cheese, riddled with gotos and encrusted with ten years' worth of black mold. The rendering system was a plate of spaghetti, in which data structures were transformed and reconfigured endlessly as they were passed through an finite state machine which would calculate which part of the world to display, transform the data as appropriate, pipeline it and then flush it to the screen by passing it through a succession of abstracting libraries. It was an unstructured mess that had grow beyond the capacity of any single developer to understand. Changes were hacked on, because there was no other way to improve it, so the the longer it remained the worse it got.

The finite state machine had only one comment in its thousands of lines of code:

// state machine.

I changed it to

// 5t4t3 m4ch1ne

and wondered what the fuck I was going to do next.

It was probably the most difficult code I have ever traced through in my life. The cel pattern code for the two different formats diverged and converged in many different places and I had to step through the execution of the program dozens and dozens of times (thank goodness for the debugger!) in order to have any idea of what was going on.

Eventually, after beating my head against the code for three days, I had it narrowed down to a single function. Two dozen lines of inscrutable code. Perhaps, if I wasn't on the verge of collapse, I would have been able to figure out what was wrong, but I just could not work it out. Source control showed me that it had been written by Raj, so I showed it to him and asked what it did.

Raj's eyes bugged out as he regarded the code. Then they narrowed to slits. "I'm far too busy," he said. "Any idiot should be able to work that out."

Eric saw that I was toast, so he let me handball the bug on to Sam, another junior. I showed Sam what I'd found and within an hour or so he nailed it. It was, indeed, somewhere in the twenty four lines I had identified for him.

Once Sam checked the fix in, Bash called everybody together to tell us the good news. "Sam here has, in one day, solved one of the most difficult bugs in the system. It's been in there for nearly ten years, and nobody has come anywhere close until Sam put his brain to it."

Sam wasn't one to grab credit. Any for of attention would turn him scarlet and rob him of his powers of speech, and I'm sure he'd have said something if he was at all capable. Bash, on the other hand, was very keen on performance measurement and metrics, and he knew exactly how much time and effort I'd spent tracing that defect through the worst the codebase had to offer.

Bashir clapped Sam on the back, smiled at me, and went off to his office to write up an Employee of the Month commendation for Sam. I believe that, in conjunction with Sam's other commendations, it actually resulted in cash bonus. Sam certainly deserved it; he was every bit the uncomplaining, efficient and conscientious employee that I was not.

I went back to my desk and spent a half an hour polishing up my resume. It was the weekend, after all.

Monday, 11 April 2011

Eye Spy

I never did work out why, but Bashir became convinced that I was trying to make time with the girls in the Sales department. But it wasn't until he declared that to the entire office that I in did, in fact, start seeing one of them. It all started with the health insurance. 

Our insurance agent came in to explain to everybody how our group policy worked. This was my first introduction to the concept of the HMO. Having come from a country with government health insurance, and having possessed a private health policy on top of that, I was fairly unimpressed with what was on offer, although the agent told us that ours was one of the richest policies available. Being a nerd with typical nerd weaknesses, short sightedness includes, I quickly opted in to the optical extras.

A few weeks later, Donna, one of the sales girls had gone to get some new specs and discovered that an undocumented feature of this new health plan was that there was only one optician in the city that would honour it. A few months later, when I needed new specs myself, I went and asked Donna for information about where this optometrist was.

One peculiarity of the office setup there was that we were all set up with Microsoft Internet Messenger clients, which we were expected to keep open all day so we could converse with other people in the office without having to resort to email, or, worse yet, to get up and see them. This was mandatory, and it was set up for all of us by the IT department. (I would later discover that the owner of the company had  spyware installed alongside it so that he could monitor what we were doing and saying). Donna and I started chatting in what we believed was privacy--firstly about the health insurance, and then on topics like music, movies and 80's fashion. 

I invited Donna to a community theatre production, in which a friend of mine was acting. She agreed, but then at the last minute backed out. Then, over IM, she invited me to go over to her place to watch DVDs. 

I stopped to buy some beer on the way up to her house. I was in my new car Honda Civic, which I had purchased from a neighbour who was leaving the country. I'd owned it for less than a week. Soon as I got onto the highway one of the tires blew out. 

I pulled over beside the guard rail and changed it for the compact spare, then limped off at the first exit in search of a gas station. I was in luck: I found one that was next door to a tire shop. I was also out of luck: the shop had already closed, and the gas station couldn't help me. I parked the car at the tire shop and called up Donna, who was very understanding. She came to collect me and told me that I could stay the night, saying that she'd drop me back at my car on the way to work the following morning.

The tire shop was open when Donna dropped me back there the next morning, but they didn't have an appropriate tire in stock for me. They put some more air back into my compact spare and sent me down the highway to the nearest Honda dealership, in peak hour traffic.

They didn't have a tire for me at the dealership, either, but the were able to order one for me. I called the office and told them I was going to be late. I wondered if Donna would say anything at work. Hours passed, and finally my tire arrived. I rolled into the office around lunchtime.

I had no sooner found my seat at my desk than a neighbour of mine, Reg, came to the door of my office. I waited for him to brace me about Donna.

"Hey, Pike, you remember System of a Down is on this weekend?"
I had forgotten. I had in my possession three tickets: one for me, one for Reg, and one for his girlfriend Miranda. 
"Well, Miranda's sick and we can't go."
"The show's not til tomorrow, Reg."
He shrugged helplessly and I could see what was going on. "We'll pay you for them."
"Ah, let me see if I can't unload them."
Once he left the office I sent an IM to Donna. She didn't know the band, and had in fact never been to see a heavy metal gig, but she sounded keen to come along. It was a date.

It was already starting to seem like a habit.

Monday, 4 April 2011

Bashir's Way

Things didn't go so well once we started to do things Bashir's way. Although his regime was better-organized than the chaos which had preceded it, it quickly became apparent that less was getting done under the new systems than we had seen under the old (in which the owner of the company yelled and screamed and threatened until the work was complete).

There were several reasons for this. Firstly, requiring all developers to keep their working copies of the source code on a single network drive mean that it took more than double the amount of time for us to do anything, just due to disk access.

Secondly, the red tape overhead was huge. In addition to the checkout forms, we had to update a spreadsheet with the work we were doing, we had to track our hours on quickbooks timer, we had to submit an hour-by-hour breakdown every week, and we had to sign in and out of the building every day. Bashir's answer? Add more tape.

Bash and Eric had turned the excel spreadsheet into an access database and then they came and asked me (The database guy) if I would write a front-end for it so that the dev team could use it instead of the excel spreadsheet. "I can, sure," I said, "But it's not going to work on Access."
"Why not, Jared?" asked Bashir, rolling his eyes.
"Access does not support multiple users. If you have fifteen developers on this thing all day it's going to break."
"Fine," said Eric. "I'll get Gavin to do it."
Gavin built it in record time. It took about a week before it blew up, and I heard Eric lamenting to Gavin (whose opposite was directly across the hall from mine) "How were we to know that access didn't support more than one user?"

Bashir's process, as he had explained to us with a great number of drawings and, was the familiar development cycle: Requirements are gathered, features are build, QA tests them, development fixes bugs  until is satisfied, software is released. Wash, rinse and repeat.

Despite everything--and there is a lot more, which I will discuss in future posts--development finished its first release on the scheduled day and the product went to QA for testing. Neelam and her single junior tester (a nineteen-year-old kid named Colin) went to work and a week later--the end of their QA cycle--they came back to Bashir with a list of which defects had failed QA. Bash was furious! The release was supposed to go out the next day, how dare we fail to fix some bugs the first time! How dare QA fail to rubberstamp the release?

I helpfully pointed out that Bashir's chart showed a cycle from QA to development prior to release, but his schedule did not allow for this. A corresponding black mark went into my personnel file. It would be a while yet before Bashir threatened to fire me for the first time. 

Friday, 1 April 2011

Scrimmage with Bashir

Usually, it's a sign of maturity when a software company hiring a development manager, where no manager has trod before. A sign that the business is expanding, that the team is attempting to learn from its mistakes. That was what I thought when they brought Bashir aboard at the firm where I was working as a low-intermediate developer.

Bash was an old friend of the senior elements of the team. He'd been through the same Phd program as they had and he was always the rockstar of the group. Bash could have been a stand up comedian; he could have had his own TV show; if he hadn't been married he could have had any girl he wanted. It was entirely likely that Bash would go out on patrol at nights, wearing his underpants on the outside, to fight crime.

After weeks of build up, Bashir turned out to be a personable, articulate, goateed, youngish dude. Seemed like a nice guy.  I had never worked under a proper dev manager before, so it took me a little bit longer to realize that I was dealing with a full-blooded corporate psychopath.

As soon as he took over the development group, Bashir started to address all of the obvious failings of the group. He staffed up, adding a QA department and another engineer to handle configuration management. then he started instituting procedures and processes. All of this was exactly what we needed, and I was very pleased that, finally, we were starting to act like a real software business. On paper, this was exactly what we needed.

Bashir, of course, was keen to hire either a/ people he knew from elsewhere and who he assumed would be devoutly loyal to him for finding them jobs, regardless of competence, or b/ whoever came cheapest. The new hires were all of them nice people, but quality varied.

Bashir had set up his team and arranged us all behind the line of scrimmage.... but it wasn't until the first kickoff that I realized he had us facing the wrong way.

Bashir called a meeting to discuss new procedures and processes. At least, that was what the invite said. He started by describing the software development lifecycle--waterfall model, of course, familiar to every computer science graduate of the last 25 years. But alarm bells started ringing when he got down into the day-to-day expectations he had of the development team.

Firstly, he wanted us to all keep our working copies of the source code on a network drive. That's right--fifteen developers would all be sharing a single drive, over the network, to work on a codebase of about 1.5 million lines. This was to prevent the danger of data loss, because apparently it was too difficult to back up individual machines on the network.

The next policy he had was that we needed the QA manager's written approval before we were allowed to check out a code module from source control.  Neelam, the holder of that new position, was a lovely woman who had graduated from a Comp. Sci program without any ability to code whatsoever. She was, however, pretty good at filling out forms.

In order to work on existing code, we had to have written approval from somebody non-technical.

I was used to working in an environment where your work was heavily scrutinized. Code reviews were lengthy and painful procedures when you finished any task, so the senior team members could ensure that your work met coding standards and followed the design. But here, under Bashir, somebody who couldn't read code had to give you permission to start work. There was no procedure for the end of a task--you checked your work in willy nilly and forgot about it.

I suggested (since this was supposed to be a discussion) that we were managing the wrong end of the process. No harm can come to the codebase before a programmer starts to work on it. "Checkouts are harmless," I said. "But we do need to manage checkins."

Eventually, Raj, the most senior developer, asked "Why?"

I was dumbfounded. "Because... that's the point where new code gets added to the project and it effects everyone else?"
"Well, obviously," said Raj, in the tones with which a father might address a child who is asking why the sky is up; affectionate and patronizing.
I tried another angle. "Well, how about, two programmers both check in the same file, and their changes are incompatible--or perhaps even in the same area of the code?"  I was pretty sure Raj would have to concede that merge conflicts were a sticky one.
"That' never happened to me int he ten years I've worked here."
"Uh, it happens to me at least one a week."
Raj didn't reply, he just looked around the room and shrugged, as if to say "Kids. They get up to the funniest things."

Bashir smiled at me and said he would take the matter under advisement. He called an end to the meeting and I went back to my office.

In the meantime, Neelam went crying to Bash--"Jared's after my job." Bashir, in turn, told her not to worry: her job (which I guess was pretty much confined to filling out requests, because, as QA manager, testing was beneath her) was safe. Then took out my personnel file and added a note confirming my status as office troublemaker.

Alone in my own office, I made space in a drawer to keep a pile of checkout forms.