Photo Credit:One Way Stock
Let’s talk about one of the most toxic traits I’ve seen in developers.
When we think of someone with a huge ego, we think of military leaders like Napoleon, sports stars like Deion Sanders, or even leaders like Donald Trump.
But ego is everywhere, and it manifests in our jobs as software developers. It’s sneaky and it appears in people you would never label egomaniacs.
Egocan get you into trouble; I’m living proof of that.
Today I’m not claiming to be egoless, far from it. But, I know I have a smaller ego than when I began my career.
I’d like to think this makes me easier to work with, but my colleagues will have to be the judge of that.
Below are some of the ways I’ve seen ego manifest. I’ll give examples where I was guilty of all of them and the consequences, and then we’ll talk about what to do about it.
Warning: This is a much longer post than I intended, so keep in mind that all the sections are independent, if you want to jump around.
The concept of code ownership is tricky. On the one hand, you want to take responsibility for as much as you can: try to be a good citizen and write stuff that isn’t a pain for other people to maintain.
On the other hand, it’s helpful to stay unattached. If someone suggests a better solution, it’s best to keep an open mind and be willing to discard your work.
I was the opposite at the beginning of my career.
Starting a job at Google is tough. Not because it was tootechnically challenging, it was becauseeveryone has to do code reviews beforecheck in. I think that code reviews and peer programming are still relatively rare in the industry, and they take some getting used to.
You have to be comfortable with other engineers critiquing your work, and you have to be willing to change what you’ve done, sometimes drastically.
You have to make changes with a smile on your face, and you can’t take it personally when someone tells you to start over, even when you’ve spent the last week grindingand you have a piece of working code in front of you.
I took the opposite approach when I started. I took everything personally. When people told me to correct my grammar in comments, I’d seethe. When someone suggested a better solution, I wouldn’t let mine go.
Even if I grudgingly made their suggested changes, I’d surface the issuefor weeks, always in a passive aggressive manner. I’d use sentences like “Oh well, if we had done it MY way….” implying the world would be better, the heavens would part and the doves would sing, and mycode would have spontaneously produced unicorns.
Needless to say, my first year or two at that job were very contentious. I’m sure nobody liked working with me. I was too attached to the way I thought things should be done.
I cared too much.
As time went on I got tired of getting in fights with people overtrivial issues, and I decided I needed to change.
I alsorealized that it was silly to get attached to my code because most code, not just mine, is bad.
I can write what I think is a perfect piece of software, and then come back to it in 3 months to find an almost unintelligible piece of gibberish.
Even ‘good’ codebases like Webkit are unbelievably challenging to understand. These codebases use the best abstractions and they do most things ‘right’, and they still manage to confuse most of the people working on them.
So if everyone, even the best of the best, are guilty of producing hard to understand software, then why should I believe that I’m any different?
Maybe I’m the one guy in the history of computing to finally produce code that isn’t a confusing mess, but it’s highly unlikely.
So why take the stuff I write so seriously? We’re all guilty of producing crap at times, even the best programmers out there, so who am I if I believe I’m the one personto never be guilty of that?
When I held strong opinions in code reviews, I was saying ‘my way is better than all the other ways’, and I was completely closed to outside suggestions. But in retrospect, my way was almost never the best way. I would come back to my solution months later and I would find Total Crap.
So try to let things go. I promise you’re not always right. Your Way is not the best way. And everything is going to be just fine if you let an argument slide.
Nowadays, I try to be as unattached as possible, to the point where when someone removes my name as author of a source file, I rejoice. Now I won’t have to be bothered with maintenance requests for that piece of code anymore, and the person cared enough to replace it with a better solution.
I don’t wantcoding to be a popularity contest. You don’t have to work on something that everybody uses. That’s not what I’m talking about here.
I’m talking about projects that have not gained any traction, or maybe they’ve even gotten negative traction in the form of criticism, and you refuse to stop working on it. Not only do you refuse to stop working on it, you try to force other people to use it.
This is all fine and dandy if you’re doing it on your own time – but when you drag your company and workplace into it, things get hairy.
I’ve been guilty of this several times.
On my first team at Google I was responsible for QA because I was a Software Engineer in Test. Soon after I started, I became obsessed with our bugs dashboard.
It’s not that our bugs dashboard was that bad, it’s just that I knew it could be Better. I spent weeks working on it, on company time. I still got my job done, but I have to admit that work on the dashboard was bleeding into my daily responsibilities.
Other people on the team were questioning the value of what I was doing. I ignored their criticism thinking that I would show them. I was making the best damned bugs dashboard of all time.
When it was done, it was okay. I used it for about a week, and then I realized I didn’t need it nearly as much as I thought I did. I stopped using it for team status updates, and it soon fell into disrepair. 6 months later I removed it from the codebase without any disagreement fromanyone.
So what happened here?
I thought I knew better than the rest of the team, and I ignored them. I hadn’t even been on the team for that long, but I was going to show everyone how awesome I was. I ignored external feedback because the feedback would have been too painful for my ego.
Stopping work on something you’ve invested time in is hard. Admitting you’re wrong is harder.
This is a tricky issue. On the one hand, ignoring negative feedback and doing something other people think is crazy can be great. That’s why we got companies like Google and Facebook, not to mention the Linux operating system. Nobody thought those projects were good ideas when they started.
On the flip side, most software engineers don’t have a clue as to what other people want, myself included. I have several failed startup ideas under my belt to prove that.
Most software engineers turned entrepreneurs buildthings nobody want, and the companies fail, sometimes spectacularly, eating millions of dollars in investor money with them.
Again, if you’re doing it on your own time, then it doesn’t matter. You’re free to do whatever you want when you’re the one paying for it.
Butif you’re on the clock, and you have a team depending on you to do a job, then refusing to let your pet project go can be extremely detrimental. Forcing everyone on the team to use your pet project is even worse.
This is what I’ve seen. Just like me at Google, I’ve seen software engineers who think they know better. They ignore negative feedback, and theytry to force their pet project on their teammates. Of course this never works, and their project is usually doomed to failure. Then they wind up with a bunch of wasted time and a project nobody wants to use.
So my advice would be to take feedback seriously. Put your ego aside and listen to what your users say.
If you’re new to a team, don’tchange anything, at least for awhile. If you really want to write a new tool, and you’re not sure if anybody will want it, then it’s best to do it off the clock. Bring it to the team once it’s finishedand see how people respond. Only after you get stakeholders to buy inshould you start working on the clock.
Going about it any other way just builds resentment, and then it’s that much harder to get people to use your pet project.
With my first job out of college, I was extremely entitled. I wanted to work on Important Stuff,and I thought Google owed me that. They owed me a meaningful job experience.
Wanting to be passionate about your job is good, but thinking that anybody owes you anything is usually a recipe for disaster.
I grew increasingly dissatisfied as my time at Google went on. The Important Stuff failed to materialize, and I blamed the company for that. Eventually I left to do a startup, which left me emotionally drained and broke 2.5 years later.
But did I have any right to blame them for anything?
Google is a giant company, and they have thousands of daily tasks that have to be performed to keep all of their services running smoothly. They need software engineers to perform those tasks, and they’ll pay you handsomely to do them.
In retrospect, blaming them for not providing me with meaningful work doesn’t make any sense. It was my job to find meaning in what I did, not the other way around.
At the end of the day a company is paying you to complete a function, nothing more. If you happen to find meaning on top of that, or if you get to work on something world changing, then good for you, but you shouldn’t expect that to happen.
Again, my ego was at fault here. I was self-important enough to believe that I deserved to change the world. My world changing project was going to be delivered on a silver platter.
Maybe I will change the world someday, at least in some minimal way, but it would never happenfrom a place of entitlement.
In highschool I wasa cocky academic shit. I never had to work to get straight A’s and attend a top university.
But college was different. I had never programmed, and everyone in my classes had been programming for years. Many of them had better math and science backgrounds than I did.
My first couple months of CS 101 were a disaster. I didn’t understand anything. I couldn’t debug my code, and I basically lived in the offices of the T.A.’s. They were forced tospoon feed mesolutions for my first projects.
One night before the midterm I came close to dropping out. Everyone else seemed to understand everything so easily, and I just didn’t get it. How the hell was I going to finish my CS curriculum if I couldn’t understand the basics?
In the end, I didn’t drop out. I had to swallow my pride, and I realized I was going to have to work harder than everyone else toachieve the same results.
I think we constantly compare ourselves to other people, and when you have to put in 5X as much effort to get the same result, it’s embarrassing to say the least.
It’s hard on your ego to realize you’re just not as innately talented assomeone else.
These days, I see this a lot. I see people who won’t work hard, not because they don’t have a work ethic; it’s because their ego won’t let them.
They have this self image of an innately talented person, and if they had to work harder, they’d have to let that self image go. Their ego would be crushed, and they’d have to admit that they need to work to get what they want.
But here’s the thing: humans are dramatically different in terms of innatetalent. Regardless of how good you are at something, there’s almost always someone who’s better. Not just better, but sometimes5-10X better than you are at a given task.
But usually it doesn’t matter. You can still be in the top 10% with a lot of hard work, and the top 10% is good enough to make a living in what you’re doing.
So consider swallowing your pride and be willing to work hard. Accepting yourselfat your current level of ability won’t kill you.
My career in software has been bizarre. When I started at Google I thought I was a rockstar coder.
Now I generally thinkmy coding ability is mediocre.
It’s not that I don’t have confidence in my ability, it’s just that I’ve realized how good some programmers are.
I’ve met coderswho can make my head spin. Theycan pull arbitrary concepts from Calculus and Statistics at a moment’s notice. Things that I’d have to look up, they just know. They can visualize things they learned in school 10 or 15 years ago.
Not only do these coders have perfect recall, they can also apply that knowledge in their day to day jobs. They’ll think of things that 99% of programmers would never consider, and their designs will be that much better because of it.
Now, I have plenty of soft skills and a work ethic that have allowed me to be successful, but realizing those programmers are out there is a humbling experience.
Many coders, especially people coming right out of school, thinkthey’re hot shit and that they know everything, just like I did.Theydon’t know anything about the field, so they automatically assume they’re better than most.
They go into their first jobs and start telling everyone about the way things ‘should’ be. Their coworkerslook at them like they’re crazybecause they don’t really know anything.
As I discussed in Part 1 with my first team, this attitude generatesa toxic environment.
Nobody will enjoy working with you because you’re the person who never listens. You already think you know the answer before the other person opens their mouth. You’re too busy basking in your own greatness to ever seriously consider another person’s opinion.
Fortunately, the solution to thinking you’re better than you are happens naturally. As programmers gain time in the industry, they’ll be exposed to more and more reference experiences.
Unless they’re total egomaniacs, those reference experiences will humble them.
We’ve discussed a bunch of ways that ego can interfere with your career as a software developer. So what do we do about it?
Ego is mischievous and devious, and it manifests differently in everyone, so I’m not going to tell you what to do; I’ll just try to explain what’s seemed to work in my life.
90% of the problems with ego stem from lack of awareness. Everyone has ‘blind spots’, and those blind spots force people to live in reaction to their emotions.
So in our battle against ego, really it’s a battle to gain awareness. Once you have a deep awareness of yourself, you’re free to act however you want.
So how do we gain awareness?
Fortunately, I’ve had some severe bouts of depression, so I’ve probably always been more introspective than average.
I’m also a huge fan of talk therapy, and I think every grown adult could benefit from it, even if it’s still stigmatized.
I think of a therapist as a mental coach. Professional athletes have teams of people working for them – trainers, doctors, coaches, etc. If these people aren’t shy of hiring teams of people to help them, then why should you be any different? You’re a mental professional if you do computer science every day, so why not hire someone to give you insight into why you’re doing what you’re doing.
That being said, I realize that many of you would never seek therapy. It’s difficult to get over the barrier of thinking that ‘something is wrong’ with you.
If you’re looking for something simpler, you could start with journaling exercises. If you notice yourself having an extreme emotional reaction at work, take a step back, take a deep breath, and watch yourself. Watch the emotion boiling inside of yourself. Then take it home, and write about whatwas going on.
Ask: Why did I respond like that? Why was that emotion so strong in me? Why did I have that emotion in the first place? What happened to me in the past that could have planted a seed for this emotion now?Follow the trail as deeply as you can.
Just thinking about why you got so angry or emotional doesn’t work because thinking is repetitive and muddled.
Writing forcesyou to clarify your thoughts, and you’ll be able to derive insights that you wouldn’t otherwise.
This one is not for the faint of heart, and I’m not sureyou could cause it even if you wanted to. It’s more like unexpectedly getting hit by a bus.
That being said, it’s been one of the most useful things that’s happened to me, so I’ll talk about it anyway.
I mentioned in Number 3 about how I was entitled and looking for meaningful work. As a result of those feelings, I eventually left Google to do my own company.
The experience was brutal, and I talked a lot about it here.
Before, parts of my ego had been putting a tremendous amount of pressure on myself to succeed, to change the world, and to do something important.
In contrast, spending 2.5 years feeling like a failure, feeling like nobody wanted to use what we were building, draining my bank account, and being socially isolated were a miserable experience.
The pressure I put on myself eventually made me so unhappythat I had to stop. I realized it wasn’t so much the life situation that was making me miserable, it was justthe voice in my head: the one telling me I was worthless for being unsuccessful andnot making money and not having a social life. Eventually that voice grew so loud and so painful that I had to disassociate from it. I had to stop listening.
Once I disassociated from it, it dissolved. The process of dissolution was painful because that voice was a part of me – it’s something I hadcarried around for my entire life, and it felt like part of myself died.
But the part of myself that remainedrejoiced in the death, and it’s one of the most liberating things I’ve ever experienced. It’s like I had been walking around with this weight forever, for so long that I didn’t even notice it was there. Then suddenly that weight was gone, and I finally realized how much ithad affected me.
Nowadays, coworkersget confused that I’m able to stay optimistic during a lot of work situations. I might verbally complain about something, but deep down it doesn’t affect me. As long as I’m getting paid, I’m pretty happy. Regardless of what happens, anything at my current job is so much better than my startup experience that I can’t even compare the two.
Because I have that perspective, not a whole lot gets to me, and that comes across in my interactions with other people.
I’m able to stay unattached and focus on what really matters.
Do you have experience dealing with ego? Let me know in the comments below.