Three Things You Must Do When Mentoring Software Engineers

Mentoring other software engineers is one of my favorite parts of my job.

Every software engineer ought to have an unbiased mentor to go to for career questions. Early in your career, you’re always the one asking questions. As you gain experience, you’ll be called on by other engineers.

So what do you do? I’ve talked with a few software jedis and padawans in my years as a software developer. Here are three things that mentors must do to ensure their mentees are successful.

Backwards-speak, optional is.

#1 Listen

Talking to a mentee is not a time to show off your knowledge. Before you can help your mentee, you must listen to them.

I remember talking with a highly experienced software engineer. I sat down and he started writing down a detailed a career plan, and went on a long, random tangent about how “buying a house is the best investment” that involved the engineer begging the bank to not take his house away. All the while, I didn’t say a single word.

He never asked me what I wanted out of my career. Suffice to say, I did not go to him for career advice again.

If you want to be good mentor, you have to listen. You have to understand what the mentee is looking for. Sometimes they want advice. Sometimes they need help making a decision. Sometimes they know what they must do, and they just want to feel sure about their direction.

Maybe not like Kylo Ren, considering what happened to his mentors…

#2 Don’t directly tell the mentee the answer

Your first instinct might be to directly answer your mentee’s questions. Don’t immediately tell them an answer. The goal here is to lead the mentee to an answer by teaching them how to solve problems on their own.

One pitfall is that the first answer you think is often not the answer that solves their problem. Or even worse, the problem that the mentee thinks they have is not the problem they actually have.

Some time ago, a mentee (let’s call her Leia) came to me for productivity tips. Leia thought she was slacking off in the past month and needed to compensate. When I asked her more, she admitted she was afraid she wasn’t making enough progress at her new job. When we drilled deeper, I discovered Leia was making sufficient progress, but she felt she had nothing to show her manager yet. Therefore, Leia felt she wasn’t living up to her self-imposed, unreasonable expectations, and she felt she was a bad person. Once Leia said this out loud, she realized what was wrong.

At the start of our conversation, Leia didn’t realize that she didn’t need productivity tips. Talking through her thought process was what she needed to get to the answer–to see she was not a bad person, and she was already making good progress at her new job.

#3 Ask Questions

Usually, younger folks come to a more experienced engineer with a question. Sometimes, the questioner must become the questionee.

Asking good questions is interesting art. Each query should let the mentee answer in their own words and talk through their thought process, step by step. It’s a conversation, not an interrogation.

One time, a mentee (let’s call him Anakin) had a tricky situation with his manager. I had an idea about what I would do in that situation, but I wanted to ask for some more details first.

“What should I do?” Anakin asked.

“What have you tried so far?” I replied.

“Well… nothing,” Anakin whined. “I don’t know what to do.”

“What are some things you could try?” I asked.

Eventually, Anakin came up with a number of options for resolving the situation. He picked one and improved his relationship with his manager. I didn’t tell Anakin a single thing. As we met over the next 6 months, Anakin had fewer and fewer questions for me, and he didn’t have to wait for our next conversation to solve his career problems.

In other words, the best mentors teach you how to solve problems without consulting an mentor at all.

If you want to become a mentor, just wait. When the teacher is ready, the student appears.

Posted in Software | Tagged , , , | Leave a comment

Your Name is Chad, and You are a Brogrammer at Big Tech Co. (Humor)

Your name is Chad, and you are a brogrammer at Big Tech Co.

You start the day by slamming a protein shake. You throw on your usual uniform: a company t-shirt, shorts, sandals, and dark sunglasses. Your biceps bulge under your short sleeves.

Your Tesla pulls into the office outside San Jose at 11am. You hand your keys to the valet and head towards the nearest coffee bar.

As soon as you step inside, your co-worker, Jimmy, sees you.

“Oh, umm, excuse me, Chad,” says Jimmy without making eye contact. “If you could just approve–“

“My dude!” you say cheerfully. “I’m so sorry about your design doc. I’ve been working from Bali the last two weeks.”

“Umm, I didn’t realize that,” says Jimmy, meekly. “Sorry.”

“I’ll get to it as soon as possible,” you say, as you stand in line for a fair trade medium roast from Guatemala. Jimmy nods sheepishly and sips a tasteless latte from the automatic coffee machine down the hallway.

You take your cappuccino and casually stroll over to team standup. Everyone glares at you for being late. Your manager assigns you a difficult task for the week. You chuckle. He thinks it’s difficult, but you have an idea.

You get back to your desk and adjust it to the highest setting so everyone can see who’s the real boss. You code up the solution in an hour.

Jimmy taps you on the shoulder.

“Hey bro,” you smile. “What’s shaking?”

Jimmy takes a breath. “Uhh, can you review my design doc now?”

“Sure,” you say. Then you phone chimes. “Hold up. The cafes just opened for lunch. Want to head over to Charlotte’s? They’re serving filet mignon today.”

The two of you walk over to Charlotte’s Cafe, a 10 minute journey each way. You overhear two other engineers passionately debating an esoteric algorithm at the next table. You do not know anything about algorithms, nor do you need to.

You get back to your desk with Jimmy.

“Thanks for lunch, bro,” you fist bump him.

“So…” says Jimmy, avoiding eye contact. “My design doc…?” His voice inflects upwards.

“Oh right my dude!” You exclaim slowly. You pull up Jimmy’s design doc. Then your phone chimes.

“Right after this meeting,” you remark. Jimmy nods. He understands. You grab your laptop and head over to the meeting room.

It’s your weekly 1:1 with your manager. You have a routine check-in. Then you ask about performance reviews, and what your expecting rating is.

“I can’t guarantee anything,” your manager says. “but I think you could get the second-higest rating in the rubric.”

“Bro, I deserve the highest rating,” you assert. You open a doc of all your achievements that map specifically to Big Tech Co’s performance review rubric.

Your manager looks it over and nods. “Chad, you deserve the top rating. I’ll bring this to calibration.”

“Don’t mention it,” you grin. “By the way, I’m going to reduce latency by 10% next week.”

“I understand. I won’t give you any extra bugs next week. Our new director is really big on engineering excellence.”

“I know,” you say. Your phone chimes. “I gotta run.”

“Meeting with our intern?” your manager asks.

“Nope. The director,” you say, and stroll over to the next building.

The rest of your afternoon passes by in a blur.

Your solution to the difficult problem causes tests to fail, so you quietly disable the tests and submit the commit. The tests were flaky anyways. Your change goes out to 100 million users later that afternoon.

You read an e-mail from the product owner. They have a dumb feature request. You shoot it down. They understand.

You crack open a cold one. Someone from HR walks by but they know who you are.

Someone sends you a commit written in C++. You refuse to review it because you only know JavaScript. They understand.

You take a break to go to the gym. You do 100 squats, 100 bench presses, and 100 sit ups. Then you start your workout.

You review another commit. You push back on the author because you suspect it will increase compile time. The author actually agrees with you. They understand.

You send an e-mail to the team proposing to use a new dependency injection system. Everyone agrees. The migration begins immediately and will finish in three days.

Then you remember Jimmy’s design doc. You pull it up on your fourth monitor. Then, your phone chimes. Another meeting.

“Right after this,” you think to yourself.

It’s time to meet the new intern.

You find the intern at her desk. She’s a pretty, young blonde from Stanford. You’re her mentor. You take a pleasant walk outside together and tell her about Big Tech Co. You give the intern some of the tips that make you a successful brogrammer. She’s a good co-worker. You think of yourself as her big brother.

Your phone chimes again. This time, it’s an urgent, ominous sound.

“Elevated error rate in cell yj” the alert reads. Surprised, you cut your meeting short and rush back into the office.

Your manager is frantic. “Can you fix this?” he asks.

“Of course, bro,” you calmly wave him off. “Go do some sprint planning and I’ll tell you when it’s fixed.”

You open your computer. The red line on the dashboard is going up. Sweat rolls down your forehead. Your mind forms an idea about what to do, but you’re not entirely sure. Your fingers dance across the keyboard in a mad whirl. You built this system. You know it better than anyone. And yet, you wonder if you can actually fix it this time. This bug is different from anything you’ve ever seen before.

Finally, you find the root cause. You roll back your commit from earlier. The error rate swiftly returns to normal.

“Chad, you’re our hero!” everyone cheers. They uncork a bottle of champagne and serve cake meant for someone else’s birthday. You spend the last hour of work celebrating your big win. Even the director swings by to congratulate you, and she’s the most impressed of all.

At 3pm, your phone chimes.

“Sorry guys, I gotta go,” you say. Everyone gives you one last high five on your way back to the parking lot.

Jimmy catches up to you on your way out.

“Hey Chad, uhh, about my design doc…” he mumbles.

“Oh dude, sorry. I’ve had a hectic day. I’ll get to it tomorrow,” you reply.

Jimmy nods quickly, understandingly. The valet pulls up with your Tesla, whose battery has been fully charged.

“Chad?” Asks the valet. You nod. You get into your car.

“See ya next week,” you say to Jimmy.

“Next week?” Asks Jimmy incredulously.

“Yeah, my girlfriend and I are going to Costa Rica. I’ll be reachable by e-mail.”

Jimmy nods. “I understand.”

You wave goodbye and drive to the airport in the gentle California sun.

You feel good because your name is Chad and you are a brogrammer at Big Tech Co.

Posted in Other | Tagged , , | Leave a comment

Five Myths About Software Engineers that Hollywood Gets Wrong

Software engineers are weirdos in the media. On screen, we’re either eccentric geniuses or socially awkward losers.

In the movies, programmers have magic powers, like they can hack the CIA in an instant. Or people see the stereotypes and think, “That’s not me, I can’t be a software engineer.”

But that’s simply not true.

Let’s debunk some common myths about software engineers we see in movies and TV shows. It’s okay to laugh about them–a lot of tropes have a kernel of truth.

#1 Software engineers use a lot of math

I honestly haven’t used calculus since freshman year of college…

The first myth is that software engineers use a lot of math. People think that programming takes trigonometry or calculus.

Programmers use logic, yes, but we rarely do advanced math.

Some domains like graphics or machine learning might use advanced equations. But if you’re just building a webpage, you want to make it as simple as possible. There’s no need to use calculus to measure the position of the “send” button on the user’s screen.

In reality, most software engineers use very little math.

#2 Software engineers are all nerdy loners who live in the basement

Ok, I’ll admit: this guy was hilarious!

Hollywood has created his trope of the solo hacker who wears a dark hoodie, plays World of Warcraft for 12 hours a day, and drinks copious amounts of mountain dew.

Nothing could be further from the truth.

Real software engineers are ordinary people. Moms and dads. Charismatic people, outdoorsy people, social people. They come from every continent and connect through terminals and whiteboard meetings.

Some programmers are the stereotypical white male loner type who can’t get a girlfriend. But that’s a fraction of every profession. You don’t have to be a dork to be a programmer (to be fair, I’m a pretty dorky guy myself).

#3 Software engineers never need to talk to people

“Why would I need friends when I have a digital waifu?”

There’s this idea that software engineers stare at computer screens all day and do nothing else. They never talk to other people, and if they tried, they wouldn’t know how.

Unfortunately, developers do have to talk with other people.

At the start of your career, it’s mostly your manager, teammates, and product owner. You write emails and design docs. You ask for advice choosing between solutions A and B.

Later, you talk with people on other teams, users, and customers. Junior engineers come to you for advice. Maybe you become a people manager.

Eventually, you’re not limited by your technical knowledge. Instead, you have to learn how to communicate better to coordinate with other engineers. After all, communication is a superpower.

#4 A single software engineer can build an app in a day

The movie got a lot of details wrong, but they still captured the spirit of Google in the 2010s.

I remember watching The Internship and one of the characters got an idea for a mobile app. Another one of the interns said “I’ll code it up on the bus ride back”.

Hold up. You’re telling me you can code the model, the view, the view controller, the networking classes, and add in the system API calls, all in 1 hour? I’m guessing you’re going to skip UX design, architecture, the settings page, accessibility, color blind mode, privacy, security, authentication, error messages, low-connectivity edge cases, on-device storage, cloud storage, and bugfixes. And don’t even think about unit tests.

Oh, and if you want it for both Android and iOS, double the time commitment.

So, no, it’s not possible to build a full app on the bus ride between San Francisco and Mountain View. Once the app gets big enough, it’ll take one hour just to compile. (I wish I was joking.)

It is possible to program a simple app in a weekend. But it has to be simple. Building a high quality piece of code takes effort. If you rush, you’ll end up with the a buggy product that no one wants to use. To build something more complex, you’ll need more people or more time.

#5 All software engineers know how to hack the government

All CS students are given a mandatory hoodie and Guy Fawkes mask upon graduation /s

In every movie with a hacker, there’s a scene where the action hero tells a programmer to “hack” the government. It happens instantly and flawlessly.

Pardon my language, but that’s a load of baloney.

First, you have to be specific about what you’re trying to do. Are you trying to modify some rows in a database table? Are you trying to read from a file you don’t have permission to? Are you trying to take down a website?

Additionally, if you really want to hack a well-defended system, the job would take weeks. Governments and corporations spend billions of dollars securing their data with professional engineers who know the tricks of the trade. The hack might take longer than expected, or it might not succeed at all.

Being a real hacker is hard. But if you want to pretend like you’re in a movie, there’s always hackertyper.net.

Posted in Software | Tagged , , | Leave a comment

Stop Having Sucky 1:1s with Your Manager

One-on-ones… Everyone has them. Sometimes they feel like a waste of time. But it doesn’t have to be that way.

What if 1:1s could be a tool to further your career? What if they could be more enjoyable to both you and your manager?

1:1s are more important than most people realize. Your manager is not responsible for your career, so you need to take the initiative.

A manager is like a raid leader trying to shepherd a party through a dungeon. They are trying to communicate to a lot of people under pressure. Their attention is divided. They have many party members with distinct talents and personalities.

Yet if you want to get promoted, your manager is the most important person in the world to get on your side.

No one really teaches you how to have good 1:1s, so this is where I come in. I’ve been in plenty of meetings, both good and bad. I want to share my secrets of how I have awesome 1:1s, and how I used these golden meetings to get promoted faster and easier than my peers.

Let’s get started.

What do you want?

The place to begin is the end. What do you want?

  • Do you want to get a raise?
  • Do you want to get promoted?
  • Do you want to work fewer hours?
  • Do you want to change projects?
  • Are you looking to leave the company with a new skill?

Decide what you want. Then, structure your 1:1s to further your goals.

Structure

Most people don’t think about the structure of their 1:1s (nor their presentations). They mumble and ramble and give a 30 minutes status update. Status is fine, but you don’t need 30 minutes to talk about status.

Instead, we’re going to use our time wisely. 1:1s are a time for you get the attention of your manager.

That means we’re going to put the most important thing first.

Write down what you want to talk about ahead of the meeting. My manager and I have a shared Google Doc. You can use paper or attach notes to the digital calendar event. Find something that works well for collecting your thoughts.

Then, make a list of the things you want to talk about. For me, this usually looks like

  1. Perf (performance reviews)
  2. Strategic questions
  3. Project A
  4. Project B
  5. Project C
  6. Low-priority questions

To me, perf is the first thing because it is the most important thing. Every week, I ask my manager questions like:

  • What is my expected rating for this cycle?
  • What do I need to do to get to the next level?
  • What evidence do I need to prove that I’m performing at the next level?

I wanted to get promoted so I could get a raise. That was the first thing I talked about in each 1:1. This reminded my manager every week that promotion and a raise were my goals and I needed his help to achieve it. After each meeting, I would take the answers to these questions and implement them, and report my progress in our next 1:1.

Second, I asked strategic questions. These are high level questions about our team, our projects, and how my work fits in with the big picture. Some weeks, I don’t have any strategic questions.

Next, I had bullet points for the major projects and features I’m working on. I mentioned difficult bugs, recently completed work, and blockers. My manager usually has a few questions about specific tasks.

Note: I tend to report very few new blockers in 1:1s. If I see a problem, I aim to resolve it without a meeting. I send an e-mail, ping my manager, and generally use my common sense to figure out "How do we move the project along?" I don't wait until our 1:1 to get an answer.

Finally, I ask low priority questions. This could be questions about new teammates or smaller bugs that don’t need to be urgently fixed. Also, here’s where I ask general, open ended questions like:

  • What am I doing well?
  • What can I do to improve?
  • What else can I do to help the team?

I write down the answers to all these questions in our shared Google Doc. Then I cause these action items to get done over the following week. The cycle repeats again.

Having a structured agenda keeps the conversation on track. We are more likely to cover the important stuff than if we had no plan.

You might not like this structure. Your manager might not like this structure. That’s OK. The point is to intentionally find a format that works for you.

How Often?

1:1s are valuable time to develop your career. I have a recurring calendar event with my manager every week.

I recommend meeting at least once every two weeks. Anything less and your manager will forget about you.

Sometimes, we have very little to talk about, so we can cancel the meeting or end early. Other times, my manager and I have high level career discussions where we spend most of the time on the bigger picture.

The important part is to have a recurring block on your calendar dedicated to your career development. Without an automatic reminder, you’re likely to forget.

You might be worried that you’re annoying your manager with frequent 1:1s. You’re not. If they say you’re meeting too often, then reduce the frequency. Otherwise, you’re fine.

Good managers want to help develop their team members’ careers. Bad managers are indifferent (or downright hostile).

What if my manager is the problem?

Your manager might not be supportive of your career development. In that case, I would ask, “What do you want to do?”

I can’t recommend what to do for your particular situation. However, I can brainstorm a naive list:

  • Find a new manager, a new team, or a new company
  • Try to change your manager
  • Accept it and stay in your current position (sad!)

You have common sense. You can solve problems. You have people you can talk to for advice. At the end of the day, you can think about the pros and cons, decide, and put your plan into action. I’m just an ordinary software engineer that’s been working in tech for awhile.

And when you put it all together, you realize that you have the power to make your next 1:1 better than before.

Posted in Software | Tagged , , , , , | 2 Comments

You Are an Engineer at Big Tech Co. During Coronavirus (Humor)

You are an engineer at Big Tech Co.

It is March 2020 and The Company has just sent you to work from home. You live in California with two other engineers. Each of you makes multiple six figures but can’t afford your own apartment.

You wonder if you will survive.

“We’ll be back in two weeks” says your roommate. You have never met him since he is always out of the apartment.

Your other roommate is busy watching anime. You have never met him because he is always in his room.

You do not feel optimistic. You struggle to fall asleep. Maybe things will be better tomorrow.

You log into your first remote meeting. Your manager pretends that everything is fine. No one believes him.

Your roommate interrupts you by taking work meetings in the living room. You had also set up your workspace in the living room. You ask him to do meetings somewhere else. He gives a lame excuse. You sigh and turn up the noise cancellation on your headphones to max. It doesn’t work very well.

You worry about your parents. You worry about your grandparents. This accomplishes nothing and you know it. You continue worrying anyway.

You turn off your work computer. You finally have time to watch Netflix and play video games.

You feel anxious. There’s a lot of work to do, but not for you—your job is not important enough. Your team does not directly generate revenue anyway.

You read the news. Things are happening and you do not know why.

Another online meeting. You discover your co-worker loves remote work. He lives in a large house with his wife, kids and two dogs. You are jealous.

You feel anxious again. You drink some coffee. You feel even more anxious. You know you shouldn’t drink so much caffeine, but you’ve always had a coffee break at the office, and now’s not the time to break routines.

You feel tired. This is strange because you’ve done nothing today. You do not understand.

You worry that you will be laid off. Your manager tries to lift the team’s spirits with a fun online activity. Everyone pretends to have a good time. No one believes it.­

Your friends try hosting some virtual events. They are OK. You miss your friends.

It is 3:00 AM. You hear your weeabo roommate shouting at his monitor. You knock on his door and politely ask him to keep his voice down—he nods and smiles sheepishly. The next night, you repeat the ritual like clockwork.

You hear about some more news. Even more things are happening and you still do not know why. You delete Twitter from your phone. You know even less.

You need a hug. You cannot get one because hugs are illegal right now.

Your director congratulates the team on all the hard work they’ve been doing by giving out $1000 bonuses to everyone. You have written 10 lines of code in the last week. You feel you do not deserve it.

Your weeabo roommate makes ramen for dinner for the fourth time this week. “Maybe we can try a new recipe next time?” You suggest. Your roommate gives a lame excuse. You sigh and eat another bowl of the same ramen.

You hear about protests. You want to help. You try to learn. Still, you do not understand.

You do not sleep well. You wake up and feel more exhausted. Every day feels like a new level of hell. You tell no one. Someone on a work call asks if you’re OK. You say, “I’m fine.” They do not believe you.

You and your non-weeabo roommate have a drink together. He makes cocktails with extra gin. Suddenly, the bottle is empty. You do not remember how this happened.

Your friend cajoles you into playing Among Us. It turns out to be a lot of fun. You log 15 hours in one week.

There are wildfires outside. The sky turns orange. You are not surprised. Nothing can surprise you anymore.

You have a new project at work related to the director’s grand vision. You wish you had a whiteboard.

Your weeabo roommate talks enthusiastically about v-tubers. He tips hundreds of dollars to these virtual anime characters every month. You think this is unhealthy but you say nothing. Somehow, you have not seen your other roommate in weeks.

Suddenly, you feel bored of Netflix and video games.

It is dark outside.

Your eyes are tired. After you do work on a computer, you look at a different computer screen for fun. This is probably why. You realize this but do not change anything.

You do not have a romantic partner. You used to have one. You think about that. That was at the beginning of the pandemic. You try to remember when that was. Time is an illusion now.

At dinner, you suggest doing an activity with your roommates. They both say no. They are too busy, and you do not understand. You nod as if you did. Somehow, you are also incredibly busy despite having infinite time on your hands.

You are promoted. You are unsure how this happened.

“How are you?” Your new manager asks on a video call. “I’m fine,” you say, but you are not fine. She does not believe you but does not say anything.

Somehow, it has been one year since the pandemic started. You are still anxious, but in a different way.

Someone tells you that you will be eligible for a vaccine soon. You are excited to receive it. You check eight different websites every day, looking for appointment slots. The anticipation builds every hour. You cannot wait any longer.

Finally, the magic day arrives and you are eligible to book an appointment! You wait for another 12 days and 7 more hours. When you arrive at the clinic, you are excited and confident, as if ready to meet your destiny, incredibly grateful to all the nurses and scientists that helped get you there. You feel the momentousness of the day with every step. You are charged with power. You will defeat the virus and everything will return to normal.

And then… getting the shot takes mere seconds. You thank the nurse and sit for 15 minutes in the waiting area.

“Coronavirus is over,” you triumphantly declare as you arrive back at your apartment. Though you know this is a lie, you believe it, because you have no intention of living through another unprecedented time like this.

After all, you are still an engineer at Big Tech Co.

Posted in Other | Tagged , , | 1 Comment