Quick Announcement ๐
This is the final newsletter of 2024! Thank you all for reading, commenting, and sharing your feedback. Your support inspires me to keep writing every week. At any point youโd like to share some feedback, feel free to message me here or on LinkedIn.
Iโve got some exciting plans for this newsletter in 2025โso stay tuned! If youโre enjoying this content and would like me to keep it going, make sure to subscribe.
Iโll be taking a break over the holidays and Iโll be back on Friday Jan 10th 17th.
Now letโs get right to it.
Introduction
Throughout your career, youโll work with different types of engineers: some may be easy to work with, some may be Rockstar engineers, and others may be slightly difficult to work with. Activities like reviewing the tech stack, re-prioritizing the backlog, and choosing technical solutions can take more time until everyone is on board.
Letโs unpack how to work with difficult engineers and how to differentiate between task conflicts and relationship conflicts.
What is a Difficult Engineer?
โDifficultโ here doesnโt refer to incompetence (i.e., incapable of doing the work). Rather, it refers to the challenges of collaborating with them on an assigned project.
For example, they might be perceived by others as:
Quickly opposing different ideas or suggestions from peers.
Picky when reviewing peersโ pull requests.
Skeptical when peers introduce new technologies to the stack.
People might think that working with them will be slow and painful for the team. But before drawing that conclusion, we need to first question these statements: Are they true? And if so, to what extent are they true?
Why Are They Difficult?
It might be tempting to second-guess this by thinking that they've always been this way. However, it's important to first consider the current context in which you're working with them to better understand the situation and see if there are hidden influences that you (and they) might not be aware of.
There may be external challenges (e.g., organizational issues, leadership changes, customer feedback, etc.) that are causing other engineers to become โdifficultโ at work. These challenges could also affect you, making you indirectly difficult as well.
Taking the time to understand the context is like viewing the applicationโs stacktrace when an exception is thrown.
The stacktrace can be long, but the goal is not to figure out the entire stack. It can include things outside of work, i.e., personal stuff. A simple example is that I woke up on the wrong side of the bed this morning, so I might be a bit slower or less productive today.
When we skim through a stack trace, we look at different stack frames: some refer to application code the team wrote, while others refer to third-party libraries weโve imported. The same applies to the human side. Some frames will be personal, some will be team-related, some will be business-related, and so on.
Debugging code you donโt know is easier than debugging people you donโt know.
The goal here is not to identify difficult engineers, but to develop situational awareness, where we can understand the current project weโre working on, the challenges behind it, and whether it will affect the people involved.
Task vs Relationship Conflict
Letโs say you're having a conflict with an engineer over some technical design. Its important to understand where the conflict sits on the Relationship/Task region, and ensure it only lives on the Task region.
All conflicts at work should be Task conflicts by default. Itโs our collective responsibility to ensure that any conflict that accidentally drifts into the Relationship region is redirected back into the Task region until resolved.
Examples of possible Relationship Conflicts:
Alice: That API design proposal is completely wrong.
Bob: I donโt understand anything in your PR. Its a complete mess.
Charlie: That planning meeting was just a waste of time.
Examples of Task Conflicts:
Alice: Can we revisit the API design proposal for X, I donโt think the proposed schemas match with the frontend engineersโ expectations.
Bob: Can we hop in a call to discuss the PR? I don't think I fully understand the changes for Y.
Charlie: Are you free for a quick chat? I have some thoughts for improving the way weโre running the planning meetings for Z.
If you work with Alice, Bob, and Charlie. You should mentally approach all examples as Task conflicts. Respond in a task-focused manner that shifts the conversation from using the word โYouโ or โIโ to โthisโ (i.e., Relationship to Task). If at some point you were Alice, Bob, or Charlie, you can voice your concerns with the team while remaining laser-focused on the problemโwithout accidentally attacking anyone.
If a conflict doesnโt start as Task conflict, it should should always end as one.
One great thing about Task conflicts is that they can help improve a teamโs problem-solving skills. Task conflicts allow engineers to challenge new ideas, debate technical solutions, inspire each other to innovate, and determine the best technical direction for the team to take. Having Task conflicts is great for the teamโs growthโdonโt shy away from them.
After all, there are no villains in the storyโonly people with complex incentives doing complex work.
Key Takeaways
Approach working with difficult engineers as Task conflicts, not Relationship conflicts.
Task conflicts can spark interesting conversations and drive new innovations.
Do not let Task conflicts slip into Relationship conflicts.
Debugging code you donโt know is easier than debugging people you donโt know.