Ok. So if I'm being honest, it took me forever to come up with the right metaphor to describe the teammate I'm talking about. I needed something that described a person who was perceivably terrible, but when you thought about it, was very necessary. Coincidentally, this terrifically bitter "vegetable" (I use this term loosely) also happens to be a somewhat believable human name. When I was first starting my career as a software engineer, I started by working on a project I was very proud of. I joined the team at an excellent time as they were just beginning the design phase of the new version of their product. From the ground up we got to build the project with the latest greatest technologies, but furthermore, we built it to our own design and specifications. We really took ownership of our work. It felt special.
Damn I loved that project. It was an area of computer science that I was particularly interested in and I think I had a lot of great stuff to offer the project. Now enter a brand new teammate that we had just hired, shall we call them - - rather, dare we call them "Kale"? Not only does calling this person by the pseudonym "Kale" preserve their anonymity, but it also implies they have kale-like qualities (see what I'm getting at here?). Kale was a person who was fresh out of college and had only had one previous job at some horrible Java code shop writing things I can only imagine were terrible.
From the moment Kale joined our team, they missed out on a lot of the team dynamic and rapport we had built up over the previous year of working together. Kale was from a different programming environment and didn't know a lot about the technologies we were working with. I also don't know that Kale had the benefit of working in many industry environments before either. So on top of being unfamiliar from a tech standpoint, Kale also struggled with the software practice part of the job as well. Kale's code felt dirty and different and most aspects of how they performed their tasks at work seemed so wrong.
As time went on, much like the vegetable, I grew to have a small resentment of Kale. Here we had this awesome thing going on, and now I was spending a good amount of my day trying to teach Kale why the things they were doing were incorrect and didn't "fit". I would think to myself, "man, I would be just a little happier if Kale had not been assigned to this team". Once again, like the vegetable, it took me a really long time to realize how unhealthy my outlook was about disliking Kale. In fact, it took me so long, that it wasn't until years later at a new job on a new team when I asked myself a very serious question: "Oh my sweet lord... Am I the Kale of my new team?!?!"
To be dramatic, I was having a bit of an identity crisis (and still am sometimes). Here I was, a very capable, hardworking teammate who was working in a new environment and a new language and yeah, I was struggling a little. But it wasn't just my technical expertise that I was struggling with. I was struggling with integrating myself into the rapport of the team I was working with as well. I started to notice some key points to what was going wrong and keeping me from feeling the sense of security and safety I had known on teams of the past. I had fallen into what I will now define as "The Cycle of Kale".
One enters The Cycle of Kale by joining a well established environment and having slightly shaky footing. The circle proceeds by then attempting to interact with this environment in the only ways one knows how. You try and write code to satisfy the tasks that have been assigned to you. Your code satisfies the tasks, but probably doesn't meet the "feel" or "style" of the codebase. You probably receive a lot of comments on your code and potentially have to go through many rounds of review to get code submitted. All the while you might be asking yourself: "Why do these guys care so much about style and nitpick stuff? The code works and passes the tests after all!". For me, this also led to some feelings of inadequacy. Maybe I'm not the engineer I thought I was? This in turn contributes further to your already shaky footing and you are in The Cycle of Kale.
After a few rounds through the cycle, my old teammate Kale must have been on some very shaky footing. At the time, all I could think of was how Kale was not meeting my expectations. Really though, my expectations were ridiculous. How could I expect them to jump head first into our awesome team and just be another productive person and know everything we knew? The key thing I feel contributed to this scenario was this: When Kale and I both joined our new teams, the engineers we were joining were very proud and protective of the work they had done so far. Though it isn't the fault of the new person joining the team, I think there are key steps one can take to avoid being the Kale of their team.
- Take your time. Study the code you are working in. There are probably a lot of set ways and style that the team has been working in and they are probably pretty protective of those points.
- Ask for help early and often. As the code owner, I was defensive when someone changed my code without first asking about it. But looking back, I was never off-put when Kale asked me things about my code and how they could extend it. In fact, it felt rather good.
- Get your code reviewed by those who matter. If you approach the owners from a humble place of learning, people will be very grateful to be able to give you suggestions before it gets submitted and they come across it later and fume to themselves at their desk and then later at night when they rant to their roommate about how Kale is ruining their codebase.
So if you are about to start on a new team, take time to realize that the people there may have been doing this a long time and are protective and proud of their work. They probably don't remember what it's like to be new. And if you are on a team where you have a new member, try to realize that they probably aren't horrible. Already they are a computer scientist, putting them in an elite group of terrifically smart people relative to the normal world. They probably have a lot to offer. When I think back to that project, Kale probably had a lot of awesome things to offer that we didn't get to take advantage of in those first few months. What a waste. Kale, if you are out there, I'm sorry. I know how it feels now.
(It is important for the reader to note that I am not apologizing to the vegetable, Kale. The vegetable still fucking sucks.)