I had a contract-to-hire position as a software engineer at a consultancy, and I just knew I would get hired. My boss had given me excellent feedback: he only needed to see me work on one more project, so he could feel extra sure that I had what it took.
And soon, my opportunity came — except that it didn’t.
When I was placed on the project, I pair programmed (two people programming together at one computer) for eight hours a day with a guy we’ll call Joe.
Joe became a computer programmer in his mid-teens over twenty years ago, which made him more experienced than almost anyone in the office. My knowledge of programming paled in comparison to Joe’s. Joe also has a habit of complaining about things, often with the expectation of getting a laugh. I’ve seen this personality trait before, while I was performing as a standup comedienne. The prevalence of this personality trait played a major role in my decision to leave standup comedy.
I took Joe’s viewpoint very seriously: I listened to what he said, and I did not question his technical decisions. After all, Joe knew what he was doing: he didn’t seem to want outside interference as he worked, especially from a greenhorn like me. Sometimes he described code or coding tools as “stupid” or “terrible,” and this made me uncomfortable. I never said anything about it, though. I spent all day with Joe with the exception of the lunch hour, during which I ate brussels sprouts and sweet potatoes I brought from home while he went out to lunch. Almost everyone at the company went out to lunch every day, in fact: everyone except for one other programmer named Jared who had previously worked in the company’s Boulder office and had moved to Chicago in January. Jared and I, the lone food-bringers, began to eat together at the office.
Jared didn’t talk very much or very loudly, so I worried that my extroversion might annoy him. I made a conscious effort to speak more softly than usual when I spoke to him. But like me, he lifted weights, and he knew the nutrition stats of a wide array of foods. This gave us plenty of conversation ammo for our quiet joint lunches.
Jared also knew a litany of keyboard shortcuts for IntelliJ, the tool that we use to write code at the company. He navigated through the window almost exclusively with the keyboard, and he could generate and refactor code at high speeds. One day after work, he printed out a table of IntelliJ shortcuts and showed me a few of them. He handed me the table to practice them on my own. That weekend, we met at a coffee shop to go over a few more. I felt slow at them. Jared promised I would get better.
After I had paired with Joe for about a month, my boss took me into his office and informed me that the company would not be hiring me right away. He said my skills “did not seem to be progressing.” He had feedback from Joe that I did not seem to be paying attention. I needed to assert myself more at the pairing station, he said. The conversation made me feel sad and insecure, but I did have a remaining chance: the company would extend my contract for another two months, and we would see if I got up to speed during that time.
So I began attempting to assert myself more at the pairing station. The first time I did so, I made a meek suggestion that Joe blew off. I shut up: after all, he knew better than I did. Later, though, I kicked myself for not trying harder.
Next time, I tried to be more firm. I got blown off upon making my suggestion. So I defended it: I briefly explained why I wanted to do what I wanted to do. I got shut down again. So I zipped it, proud of myself for having tried twice instead of once to make an impact on the code this time.
The third time, Joe referred to my suggestion as “a terrible idea.” That time I didn’t push it. I did ask my boss for advice about the situation. He suggested I take Joe into a room and confront him about the situation myself. And at that time, I couldn’t bring myself to do it. So I remained meek at the pairing station, making technical decisions only when Joe was not at the computer with me. Luckily, this had been happening more and more lately: Joe had begun taking a rash of sick days and showing up to work an hour or more late with increasing frequency. At first the prospect of coding without supervision terrified me: what if I messed it all up? But as I got to place my hands on the keyboard more, to move at my own pace and not a blindingly fast one, I began to feel a strange, unsanctioned relief when I realized Joe would be late again. I liked having the opportunity to code without feeling like an adversary or a burden.
It was a Thursday at about 2 PM. The issue this time had to do with an iOS layout that had given us significant trouble over the past few days. I decided to make a suggestion about the design of the code. My proposed method, while not standard for the type of screen we wanted to construct, would avoid a lot of duplication and workarounds that Joe’s solution would require. Even Joe hated Joe’s solution, so I figured my idea might interest him. Joe, however, reacted negatively to my suggestion with such speed that he practically seemed physically allergic to it.
But dammit, my job depended on me becoming more “assertive,” so I decided that now was the time to shit or get off the pot. I pushed the suggestion back at Joe, with justification. He pushed it away again as “wrong, just wrong.” I asked that we timebox our efforts and at least give it a try.
Then, Joe shouted at me.
I don’t remember exactly what he shouted at me. But I do remember that he stood up out of his chair and shouted down at me, like I was a dog that had shat on the floor. I remember my face burning as I got out of my chair and speedwalked to the office door. I needed a break from the situation, and I needed a break from my pair. I took the elevator to the first floor, ordered a chai latte from Starbucks, and cried silently into my sleeve as I waited for my drink. Then I trudged back upstairs and sat silently, sipping my chai, watching Joe blaze forward on his own proposed path while listening to him lament and insult it with every keystroke.
After work, I had received a text message from Jared. Across the office, he had heard the fight and he wanted to know if I was all right. Another coworker approached me in person after work and offered to bring it up to my boss, if I wouldn’t. I shrugged. She told me to think about it and let her know the next morning.
The next day I decided to tell my boss myself. So I walked into his office and informed him that, if he needed to see Joe view me as a peer before he would be sure he could hire me, then he would be waiting forever, because it would never happen. To my surprise, he nodded and said he knew: evidently, someone had clued him into the tension coming from Joe’s and my corner of the room. I would be rotated off the project immediately, he promised. Instead, I would go back onto the project I came from. If my pair partners on that project had good feedback for me, I would be hired. I felt vindicated, and I walked out of the office smiling.
On Monday, I started back on the other project. My pairs on this project included a guy we’ll call Dave and another guy we’ll call Mike. Dave had led this project for about five months, and Mike had rolled onto it about three months prior. Mike admired and revered Dave: Mike would not commit code without having Dave look at it. This made things difficult two weeks later, when Dave was rolled off of the project to help spin up a new project and Mike was left in charge without Dave.
That period must have been stressful for Mike. Mike could no longer lean on Dave to okay his code. The last thing Mike felt he needed, during this stressful time, was my inexperienced self mucking up the code base. He preferred to solo, so he would stick me on a different computer where I would attempt to pick up tasks on my own. Whenever I finished one of these tasks, I would return to Mike to let him know. I always wanted my contribution to have moved the project forward. Sadly, I rarely managed this. The first few times, Mike looked over what I had written and then would say:
“Okay, let’s throw this on a branch. I’ll start this over later.”
It took all of two days before he stopped looking at it at all. It became his habit to throw my work on a branch and leave it there, like a broken down car relegated to a parking spot to collect dust.
I wondered: was I this bad at code? If so, maybe I shouldn’t be a computer programmer at all. Maybe I had gotten in over my head: maybe I just wasn’t smart enough to become a programmer. I didn’t know enough, and my pairs viewed me as dead weight. I couldn’t do it. My boss confirmed my fears: evidently Mike didn’t have hireworthy things to say about me, either.
Now my boss, too, felt scared: he wondered whether I was just too new to programming to work for a consultancy, and maybe I would be better suited to work at a product company until I became a more seasoned programmer. He had one more project he could try me on: an Android app for an airline company, the project Jared worked on. But this project wasn’t like the other two I had done: it wasn’t internal, and it wasn’t for a non-technical, laid-back client like the one I worked for with Joe. These clients came into the office every day and worked closely with the programmers. Oh, and they demanded a lot.
My boss needed that project to succeed. He had come to Chicago from Colorado just over a year ago to start this office, and the Android project could mean a big contract for the company. That project had generated a lot of excitement high up in the company, and it belonged to his office. Putting me on there represented a big risk. He didn’t think he could put me on it. That would mean that, in ten days, when Mike’s new pair started at the company, my contract would end, and it would not be renewed. I should start looking for another job, he told me.
I contacted friends and mentors who immediately suggested contacts at a few companies around town. By Friday I had arranged an interview with one of them over my lunch hour. I rushed out of the office at 12:01 to jog to their office. One full plate of extremely spicy Ethiopian food later, the company’s director informed me that I could submit my resumé through the website if I wanted to. I jotted some notes and ran back to the office. I made it back through the door at 1:01. Whew. No one would be suspicious…I thought.
I walked into the kitchen at 3 PM to wolf down a yogurt. The work day had proven particularly frustrating so far. Mike continued to undo and ignore my work, but that day it wasn’t even code — it was documentation. Evidently, Mike found my command of the English language substandard. When I look back on this, I realize it was proof that Mike never actually looked at my work before declaring it worthless: he just assumed I couldn’t do it, and he ignored evidence to the contrary regardless of what the task was.
As I rounded the corner that afternoon to whip open the refrigerator door, I walked past Jared eating a bowl of oatmeal.
Jared had missed me at lunch. He wanted to know what had happened.
So I told him about my project and about my conversation with my boss.
“What do you want me to do?” he asked.
I shrugged. “I don’t want you to do anything. You wanted to know. I’m answering the question.”
At about 4:30, close to the end of the work day, I noticed motion out of the corner of my eye. I looked over. Behind the glass wall of my boss’s office, Jared gesticulated at my boss. My boss looked contemplative. The conversation continued past the end of the work day.
Later that night, Jared texted me to ask what was up. I responded somewhat rudely with some reference to my horribleness at coding. He asked if I wanted to come over for dinner and work on some Java programming.
I agreed, and I took an Uber to his apartment. He set me up with a plate of fish, lentils, and broccoli, then sat down and drilled me on basic Java principles for about an hour.
He told me about his conversation with my boss. He was fighting to get me onto the project. “But if I can even get you on, you’ll have to know your stuff,” he warned me. He handed me a book with a tiger on the front and the title Java in a Nutshell. “Read this. Skip the chapter on lambdas: we’re on Java 7, and it doesn’t have those.”
For the next week in our spare time, Jared would code with me after work: sometimes on the client project for a few minutes, but mostly on random Java. He would thumb through the book and drill me on various concepts. I began walking home to his house with him after work; he would make dinner and then we would study. On weekends, we would meet to study some more. I studied as if I already knew I would be on that project, even though I knew my boss had said he would likely not put me on it.
The following Wednesday, my boss pulled me into his office. I walked in to find him and Jared sitting down. My boss informed me that he would, in fact, put me on the project. He had extended my contract by four weeks. But this was it. If I couldn’t demonstrate the requisite progress in these four weeks, he had nowhere else to rotate me. That would be the end of my time at the company.
I said I understood. I walked out of the office. After work, I went right back to studying with Jared. He explained the app’s code base to me — both the client side and the server side — and explained to me how to draw a picture of this structure. I followed the instructions and ended up with a couple of diagrams in a purple notebook, each one a web of circles and rectangles connected by arrows and labels.
The following week, I rotated onto the airline project. I felt, on that first day, as if I were walking to my execution: somehow a total calm had spread over my body, as if I had come to terms with the fact that this was my final chance. I paired with Jared for the first two days. He showed me around the code base, and he forced me to do all the typing. By now, I had become decent at the keyboard shortcuts. I could not drive nearly as fast as he could, but I did not drive slowly, he said.
“Honestly? Be honest. Do I drive slowly?”
He looked at the ceiling, then looked at me. “No.”
For the next two days, I paired with another guy on the project who we’ll call Marcus. Jared warned me that Marcus did not like to be forced to drive the entire session. So I jumped in early and often. I tried to contribute. Marcus had to show me many things about the code base. I still didn’t get it all.
I would express this fear to Jared many times over the next few weeks. “Jared, I don’t think I’m getting it. I don’t think I’m learning it fast enough. I don’t think I can do this.”
Jared would reassure me, but I continued to repeat this worry to him ad infinitum. Finally, he leveled with me: “So you can stop trying, or you can keep trying. That’s all there is.”
The next morning, I woke up an hour earlier than usual and walked into work at 7 AM to look at the app code for an hour before the work day started. I got almost nowhere, but this hour of time before work became my habit. I began to bring in the purple notebook to scrawl on the pages behind my circle-arrow diagrams from a few weeks prior. During that hour, I would choose a completed feature from the previous day, go into the code history, and look at the commit labeled for that feature. Then I would thumb through all the new code written to implement that feature, and I would write down which methods and variables had been added and changed in which files. I would make little notes about why the changes had been made and how the files worked, if I knew.
Slowly, I felt myself learning my way around the app. I could start to drive more. I could start to speak up more. I could even work with the client developer — a developer from the airline company who, despite a decade of programming experience, had never written an Android app before, and who tended to prefer not to drive during pairing sessions. Though I remained quiet compared to the senior developers on the project, I managed to contribute…at least, I thought.
My final week on the project arrived, and I suspected that my boss had forgotten about it. Between a flurry of new projects and new hires, I wondered whether I had fallen through the cracks. I floated this idea to Jared on Wednesday morning of that week.
Two hours later, my boss began asking the other developers on my project to step into his office for a minute, one by one. I suspected immediately that he was collecting feedback on me. I felt, shockingly, not nervous: not because I felt confident in my programming ability, but because I felt confident in my effort. If I did not make the grade, it would be because I genuinely could not have done it — not because I could have and chose not to.
The next day, my boss called me in. He sat in a chair next to his table. On the table sat a piece of paper with the company logo on it. The rest of the text on the paper described a job offer.
That happened on Thursday, April 16. On the morning of Friday, April 17, when I arrived an hour early to take notes on the code base, I first reached into my backpack, fished out the offer letter, and laid it on top of my boss’s keyboard — signed.
I would no longer be the only engineer in the room who wasn’t a real member of the company.
And the whole experience made me think about the allowances I make for myself when “times get stressful.”
Maybe I could come up with a defense for skipping the gym for six weeks in favor of studying programming with someone more experienced. But I can’t defend the fact that I completely broke contact with almost everyone I knew. I can’t defend the fact that I basically ate all the sugar I wanted. And it occurs to me that, if I tell myself I’ll rebuild good habits when I’m more “in control,” I might be waiting forever for a phantom golden opportunity.
See, as I look at the past 3 years of my life, I’m becoming less and less convinced that I ever will be “in control” — at least, not if I continue to define “in control” the way I do now.
Having a job I can count on to still be there tomorrow, etc., may never happen. And if not knowing what might come is my definition of “under stress”, then I’ll always be “under stress.”
I have wondered whether a better definition of “in control” of my life might be “having a plan for what to do if something doesn’t go as I want it to.”
But that doesn’t solve it. Even having a plan for what to do if, say, I got fired, did not solve the issue. And it is because the issue, I think, at the crux of it, is actually something I thought I had beaten a few years back, but evidently had not:
I base my self-worth on external factors, and therefore if the external factors don’t go as planned, it is because I am bad or useless or not valuable.
Had this offer not come through, I’d have been down in the dumps. I’ve made a downright practice of letting other people tell me if I am valuable, and therefore if I should bother to care.
The problem is that, even when I look back on this practice and recognize the risks involved, I see it differently as I am actually doing it. I see it as “observing the evidence.” And no matter how much I worry about the fact that I’ll always worry if I do it this way, I can’t get behind a strategy of just convincing myself that I’m great and awesome and should poo-poo those ninnies if something goes wrong. Those external factors help keep me in check when I misjudge what I can do. Those external factors give me something other than my own ego upon which to base my judgments about my abilities, and I don’t want to become one of these schmucks who will never get out of their own shmuckiness because they refuse to see it, even when the events of their lives point it out to them directly.
So the trick, I guess, is to figure out which events are valid feedback and which are not. Or maybe it’s to not take the feedback from one’s life personally and maintain a sort of grounded state regardless of what happens. Because “not being stressed” isn’t going to happen if stress depends on life events, I think. It can only happen by learning not to be stressed regardless of life events.
I don’t know how one does that. Maybe by meditating. Maybe by having goals and working towards them every day, a little at a time. I’m still working on figuring this one out. I suspect a lot of people are.