Comparing Engineers Hierarchies and comparisons have their place. But as you arrive into positions of leadership, you’ll find such ways of thinking about people will hamper your ability to see what’s best for your entire team.

dating dongguan Once upon a time, things were good. Maybe not always easy, but straightforward. You were a happy go lucky individual contributor taking on as many engineering tasks as you could handle: writing code and tests, authoring tech specs, architecting solutions, doing code reviews, maybe even a bit of QA here and there.

rencontres du mont blanc economie sociale It was a good life because you generally understood the problems at hand – and were able to reduce complexity down to a point where the larger problem could be broken down into manageable chunks. From there, it was just a matter of picking up a chunk, focusing on it to the exclusion of other things, committing or publishing your work, then moving on to the next chunk. Then one day you woke up and found you were a manager or team lead, and things started becoming ungood. Maybe not right away, but eventually new kinds of problems landed on your desk which tested your confidence, confused you, or generally put you on the spot.

selbst kennenlernen

el solin speed dating Such problems couldn’t be so easily reduced to components. These problems contained other sets of problems – often with contradictory solutions. Sometimes it wasn’t even especially clear if the problem you worked passionately on was ever solved – even after the fix was applied. Sometimes the fix didn’t stick – or it did, but it took months to find out.

rencontre pme education The shift in head space from individual contributor to manager should never be underestimated or taken lightly. As has been noted here several times, it’s an entirely different discipline. It requires different skills, ways of learning things and a fresh perspective about people and how they operate.

People, Boxes and Hacks

this hyperlink Software engineering is hard. Really hard. It takes incredible amounts of focus and resilience to load up on a specific set of skills, only to watch the value of those skills start to erode over time – even while you get more and more proficient. To keep a thriving career as a developer or architect, you must always be taking on new challenges and trying new tools and languages out, which means you probably suck at many of the things you’re trying do. Even if you’ve been working in the field for many years.

basics This cycle is a painful process of trading in a set of things you’re great at for things you’re not yet great at, and are struggling to learn. The good news is that as you amass enough practical skill and expertise in the new thing, you will hit this place where you’re confident enough to raise a hand and take on real-world challenges. Soon you are seen as the expert in the new thing, and rise to the top of the heap with less and less effort. There’s nothing like the exhilaration of seeing your ability grow geometrically from your effort.

If you’ve been at this awhile, this skills acquisition cycle is something you’ve learned to incorporate into your career. And when several engineers get together and work this arc in coordination, it can result in amazing results which makes everyone feel great.

As engineers we have devised some hacks to help accelerate this skill acquisition and exchange process. The best way is to lean on your tribe, your fellow geeks. This might be others on your immediate team at the company you work for, or people you’ve never met face to face but interact with online through IRC or posting boards.

One thing we tend to do early on in these cycles is put other engineers into boxes: “He’s not nearly as good as people think”, “She’s a master at this stuff and is super helpful”, “I’m actually better than that guy in understanding the theory involved, I just need to bone up on my syntax”, “I just don’t get why they decided to design it this way”, “Seems like everyone’s working with this library now.. I think I see why”. On and on it goes. We will compare ourselves against others at the drop of a hat, over and over again, for years.

This isn’t always a bad thing. How else can you chase down answers and tips from people stronger than you in a particular skill if you can’t determine who is actually better than you at something? Conversely, as you get over the hump and become more comfortable, it’s incredibly gratifying to be available to people you know aren’t as strong as you in a particular area, and help save them pain and confusion.

The thing is, while this is a nice pattern to hold onto when you’ve got to quickly learn a new framework or library, the tendency to bluntly compare people against each other quickly becomes toxic in the context of management.

Distribute Skills Across the Team

As you look over your bench of talent and start to plan out resourcing assignments for particular projects or features, I suggest fighting the temptation to reflexively stuff people into easily defined boxes based on some imagined hierarchy of “better than” or “worse than”.

First of all, highly skilled does not equate to highly productive. Some developers can pick up new languages and frameworks relatively easily – but really fall down when it comes to keeping up with tickets and hitting deadlines. Others have to work extra hard to acquire new skills and need a lot of backstopping or tutoring, but will always hit their commitments. Funny thing is, the so called super-star developers with lots of raw talent seem to get all the positive attention from other team members, even when they break the schedule and disappoint customers time and time again.

Ideally you want the skill set of your bench balanced out as evenly as possible – both in terms of hard skills and ability to deliver on time with minimal defects. If you give into the impulse of repeatedly dumping all the hardest work on the so-called superstars, two things will tend to happen:

  1. They will burn out, and actually become less effective over time
  2. The other developers won’t level up their skill set, which means your overall team velocity will stall out. In other words you’ve failed as a manager.

The ramifications of number one can be pretty disastrous – if key developers or architects leave the team abruptly and you don’t have the talent pool to replace them quickly, production can grind to a halt. Again, a management failure you will have to explain to your boss.

But issue two is a real problem as well. It can eventually put engineers’ careers in some jeopardy – which isn’t fair to them. If they’re not upping their game, they are become less valuable in the market, which means you’ve now suppressed their earning ability in the long run.

If you notice a large skills gap across your team, you have a problem that probably needs addressing. The particular way you choose to deal with it will depend on your company, your team, and the chemistry of the people you manage. Broadly speaking proceed with caution, mind people’s dignity. Loudly announcing that some engineers are Alphas and some are Betas is a sure way to cause rancor and resentment within the team.

Be practical. Try to clear people’s schedules to bone up. Try some pair programing if you can afford it. Also, don’t assume. You never know – people can often surprise you in their ability to rise to the occasion and remedy shortcomings in skills and knowledge.

I will be covering some specifics on how to better normalize skills across your team in a future post.

Leave a comment

Your email address will not be published. Required fields are marked *