Ask HN: Suggestions for working effectively with junior devs?

152 points by tinglytoes ↗ HN
I'm a senior dev at one of the FAANGs with more than 15 years of experience, but the rest of my team consists of devs with an average of 2 years of experience. At first when I joined, I thought this was an aberration, but there are many teams around me that are structured similarly. Is this how FAANGs try to scale teams? The devs on my team are smart but mostly naive about getting stuff done in the real world. I'm sure they'll figure it out over time. But in the meantime, my days are quite frustrating because I'm in teaching mode most of the time instead of building stuff.

134 comments

[ 3.0 ms ] story [ 187 ms ] thread
It's not just FAANG, it is how many larger organizations work. I would point to the Indian consulting shops like Infosys who typically grow rapidly, hire a lot of "freshers", have a lot of opportunities for promotion, and try pretty hard for the senior people to transfer their experience to the juniors. On a good day those organizations succeed at this pretty well.
A lot of large companies do this. I think in the past 2 weeks I have had maybe 3-5 hours to work on my stuff. The rest is meetings and showing others how to do something.
Do you find that this creates a degree of background stress/anxiety? After many years of being a highly effective IC/consultant, I’m still trying to adapt to being primarily a manager with a software engineer title, and not sure how well that’s going. It can feel unsettling.
I think many people find it hard to make the transition.

Logically if you can double the productivity of 10 freshers you can contribute more value than you can as a highly productive IC who is 10 times more productive than a fresher. Your instincts as an IC can have you feeling you are not productive at all though.

For me going from being 'the guy who does tons of stuff' to the 'guy who knows stuff' has had some upsides but some downsides. Upside is I get to share with others and get more people going and doing good stuff faster. As a group we are better off. But narrowly on me, however, that has come at a cost of my productivity is lower. I also have to manage expectations of what I can do now with managers. It does make me feel like I am not getting anything done too. But if I can unstick 4 other people I guess it is a win...?
what was it like when you were a new dev? were you frustrated by the lack of mentorship from experienced devs? or did you have some guidance?

could you reframe the situation and see it as, "this is cool, i have all of this experience to share with new developers."? unless you don't want to be a mentor, which idk, good luck.

Nope, this is just how it is in Amazon. Other FAANGs tend to have a better spread of engineering experience. Root cause has always been the high turnover. Once you have enough experience and the AMZN name under your belt, most devs chose to jump ship to somewhere saner.
From personal experience, I got the impression that Amazon was not even that interested in hiring experienced developers. I think they decided that churning through early-career engineers was ultimately more effective for them.
In general, the role of senior dev is to break down projects into pieces understandable and achievable by juniors.

It helps get them experience and it helps you from having to do literally everything, because it isn’t particularly easy to hire more senior devs.

This plus do not get overly distracted by the ones who can’t figure it out on their own after some basic guidance. Identify the juniors who do well, and leverage them to help drive your / the org’s goals. They will get promoted and you will hit your goals faster. It’s a balance though because you have to carve out your own time too.
I’d say that this is less “how fangs work” and more “what gangs are like in 2023”. If you look at the devs hired per Q stats for your company I’m willing to bet that seeing mostly people with 2yoe will suddenly start to make more sense.

My personal theory is that the MBAs discount how much this messes with quality engineering culture, and have no idea what they’re doing by running teams with one experienced manager, one senior, and a bunch of excited juniors.

Been at FAANG 6-7 years and was equally surprised as you coming in.

I had a peer more used to it coming in, the best thing he did was build a relationship, subtly establish this wasn't going to be a great place to bring my full self, and be kind day to day minute to minute as questions came up.

More directly, what you described is how it goes and it's sad. The worst part is watching them either find a way to be a part of the grinding machine, get chewed up by it, or give up and be sad. Best thing you can do technically is what you're doing, if you build a personal relationship, you should help them pace and signal the lack of incentives

With 15 years of experience and a bunch of new engineers on your team, your job is no longer to build shit. It's to help everyone else on your team build shit. If that's a problem, you might need to find a new team. I hear that Netflix only hires senior engineers.
That was true of Netflix until about 2021, back when they still had a flat structure. Since then, they started hiring for levels below senior as well.

Sadly, there are no engineering postings on their jobs page right now, so all I have at the moment is secondary sources[0] and personal accounts.

0. https://blog.pragmaticengineer.com/netflix-levels/

> But in the meantime, my days are quite frustrating because I'm in teaching mode most of the time instead of building stuff.

Look at this as a huge opportunity for you to grow and increase your impact, to become a staff+ eng. Uplevel, teach, "use" them as a lever to do at the end much more than you would be able to do alone

Also it sounds like there is a need to be more aggressive with managing your calendar. At some point you have to organize your time into blocks where you can actually do work and manage when you are in "teaching mode".
Not at during my time at Apple, but I did experience this at Intuit. It seemed like the best way for a manager to be promoted was by their headcount.

It’s important when hiring to make sure you have the resources needed to bring someone on. For hiring a junior dev I would be asking myself if the team can dedicate 10-20 hours a week for pairing for six months.

Also I find it helps both people if there is an expectation around when someone should feel comfortable. Again, no less than six months until I would expect them to feel comfortable.

That's a very reasonable estimate for the drag a new person, not even just a junior, can put on a team! I like it!
I think you need to consciously and continuously figure out where your time is best spent. There is a spectrum between situations where you can afford to let them make mistakes while figuring things out vs. situations where you need the team to execute to your own standards. You can evaluate this in multiple dimensions: productivity, system robustness, code quality, etc.

Think in terms of interfaces, assertions, and consistency checks. How can you be more hands off in the areas where the bar can be lower? What does your involvement need to be when you need the bar to be higher? Is the bar high enough that they will tend to improve over time?

If you are a perfectionist, you will simply end up doing more work than if you had done everything yourself. If you can create a structure that allows you to relax in some areas while helping the team grow their skills, then you will be more productive.

Do you have some examples of situations where it’s ok for them to make mistakes while figuring things out?
Unfortunately you will either need to change your attitude or change teams. In your position, the expectation is that you are mostly a working through others and acting as a force multiplier of their work. So doing stuff like:

* figuring out what motivate your juniors and trying to align that with what needs done

* giving them work which stretches their abilities but doesn't overwhelm them

* giving them some space to fail but not too much

* grooming your juniors to be leaders themselves so they can do some of this mentorship

And in general, there are two ways to go. The first is to accept the fact that many senior engineering and most staff engineering gigs are more about this kind of mentorship approach than actually doing work. And basically accept that the prime "getting shit done" years of your career are done and you will mostly be working in this new way now.

The second is to change jobs where you are back in the driver seat. As a senior engineer, these positions DO exist even at FAANG (over on my team, I am the most junior with 12 years of experience). However, the more senior you get, the harder it is to find a role like this, especially in big tech - its the rare exception. Startups and consulting gigs probably better align with wanting to be hands on keyboard, but at the price of a paycut.

> * figuring out what motivate your juniors and trying to align that with what needs done

This is true, but be careful about taking this too far.

Young people arrive at the workforce with a wide range of expectations and motivations. Some of those are going to be unrealistic. You should always try to work with them to understand what drives them and help them find their fit.

The most frequent misaligned expectation I've seen in juniors is the desire to lead greenfield projects in year 1 of their career. It can be very disappointing to arrive at your dream job and learn that you have to work on someone else's code, and that you have to build a reputation before they'll hand you the fun greenfield work.

I wish there was more focus on working with existing code in education, since it is by far most of the work in real projects, and also the hardest.
It's kind of hard to make "legacy" purposefully bad code that is useful for teaching assignments. Certainly a lot more work than drawing up a spec.
Changing existing bad code i an advanced topic.

Just working with adding features to decent existing code is all I ask.

Literally just had this situation come up in a recent 1:1 with one of our junior devs.

He asked about being able to work on greenfield projects focusing on AWS technologies.

I had to go into a historical context data dump on the value of addressing technical debt (the project she is being assigned to), and how that frees us up to work on the cool and shiny projects.

I think it landed, but I could see some of the fire slightly snuffed out of him.

> In your position, the expectation is that you are mostly a working through others and acting as a force multiplier of their work.

OP said that his role is senior developer. Developer. Not a manager. Not a team lead. But someone who wants to write code, preferably together with other experienced developers, and by doing so, enjoy the process of learning and understanding technology at a deeper level. Why, then, would one expect his responsibility to be motivating juniors, giving them work, or raising them to be leaders?

Also, if someone wants to write code, teamed up with other senior developers, where should one go?

...Because OP is getting paid a big salary to do what the business requires, not what they wish their responsibility could be?

> Also, if someone wants to write code, in a team with other senior developers, where should one go?

> Startups and consulting gigs probably better align with wanting to be hands on keyboard, but at the price of a paycut.

> ...Because OP is getting paid a big salary to do what the business requires, not what they wish their responsibility could be?

Is this what the business truly requires though? As a person grows his skill in software development domain, does the business really require him to transition from being an expert programmer to being an unskilled manager? Being a competent software developer doesn't qualify one for a big salary?

Isn't it what the Peter Principle was all about?

What the business truly requires is an abstract question. What the business expects of him, however, has been answered in this thread. The purpose of a system is what it does, etc.
This is what the role looks like in the vast majority of bigger tech companies, for good reason. Tech companies biggest hurdle is steering the boat. To launch anything you need to coordinate, align, and get consensus, beyond just your own team. Can engineerings develop in a vacuum? Can they take even well defined tickets, and build an optimal solution without knowing the product direction and vision?

The manager is a people manager, not a product builder. Marketing, product, other engineering teams, all need to be aligned. As the most senior you're probably setting the high level architecture, so you're going to be the "API" or point of contact on which the other architects on other teams will need to communicate.

Selling that architecture to juniors involves all those things mentioned, and as the architect you're responsible and the best person suited to judging their work as aligning with the vision/architecture. Senior role is usually defined and evaluated in performance reviews for the impact that goes beyond the code.

I'm not explaining it super well, but its something you realize is a natural part of the role as an engineering leader. And that what a senior+ engineer is, a leader. Mid level engineer is a terminal role in a lot of companies for those who don't want the added responsibility.

To your other point, there do exists teams where its all seniors who mostly do IC work. These are usually high-value, high-risk, core product engineering R&D. Or some kind of DX (Developer Experience) team where you are building tooling for other engineers, but even these teams too often has juniors, as at the end of the day, they are just another type of platform team

Yes, and now his role is developing the technical talents of others so that they too can be senior developers. If you're in a large company that is 90% of what is expected out of senior technical people.
> OP said that his role is senior developer. Developer. Not a manager. Not a team lead. But someone who wants to write code, preferably together with other experienced developers, and by doing so, enjoy the process of learning and understanding technology at a deeper level. Why, then, would one expect his responsibility to be motivating juniors, giving them work, or raising them to be leaders?

It sounds like you and the OP want to be "just" an engineer (mid level ), which is a terminal level at these companies. You can stay there your entire career, make the maximum salary for that band, and continue to focus mostly on writing code.

Wanting the higher pay and title, but none of the responsibility isn't realistic. You have misunderstood what the senior / staff role is, not the company. The expectation is you lead, mentor, and do less coding.

Alternatively, become very, very deep at a niche field, like high performance computing, and go work for a trading firm if your goal is the same salary while focusing on writing code. Few others will pay you 500k+ to solve common distributed system problems and producing CRUD apps.

This is the most honest answer and something I have seen a lot folks who want the higher pay of the higher roles but none of the responsibility.
> lot folks who want the higher pay of the higher roles but none of the responsibility

Isn't building a high-quality product with a sound architecture, while making correct technical decisions, and writing well-tested and properly documented code, all the while identifying and integrating the best practices that your field has developed so far responsibility enough?

Not really, no. The value of your contribution over the person next to you is marginal at best after a certain point. Even if you are say 50% more efficient than the next engineer. You will still be less valuable than someone who operates as a force multiplier improving the efficiency of 8 engineers by 15%.

Now, don't get me wrong I love having doers on my team but when the rubber meets the road I'll reward the folks who lift all boats first.

Especially with the rate of turnover these days, having someone who can rapidly onboard and get engineers up and running can make huge difference and if you are working on basic B2B SAAS stuff on standard languages, there are tons of good mid-levels out there.

If you shift into niche languages or are doing something complex the equation is likely to change.

> The value of your contribution over the person next to you is marginal at best after a certain point. Even if you are say 50% more efficient than the next engineer. You will still be less valuable than someone who operates as a force multiplier improving the efficiency of 8 engineers by 15%.

If someone is 50% more efficient than someone else, I would naively think it makes sense to pay them 50% more... without requiring them to also become a part-time manager.

If it isn't so, then it naively seems to me that junior developers are overpaid, and senior developers are relatively underpaid. Improve your productivity by 100%, and get a 10% raise (or a 30% raise but you also get extra duties).

Some companies simply do not hire junior developers, which seems like they agree with me. And the companies that hire juniors, are probably doing it out of desperation (because seniors are not available at the moment), or because they expect that most of those juniors will forget to negotiate for a higher salary when their productivity multiplies a few years later. Would you hire junior developers if you knew with 100% certainty that after 1 year all of them will leave in order to get a market-level salary for their gained experience?

> Also, if someone wants to write code, teamed up with other senior developers, where should one go?

Many startups are like this.

They're typically picky about letting new people in.

I never worked at a FAANG. Do these teams not have managers? Most of those responsibilities seem like the job of a manager. In my career, this approach of one senior person on a team of juniors means the senior is responsible for a lot of the system design and other high level technical decisions, but they wouldn't be counted on for things like motivating other employees.
(comment deleted)
On my team at least there's a grey area between managers responsibilities and Tech lead responsibilities.

Managers are ultimately responsible for getting tasks that stretch employees abilities, but also in my experience don't have hands on the code. They're usually dealing with politics around team priorities, goals, keeping people motivated, etc.

Managers rely on tech leads to identify work that needs to get done and would be a good fit for the newbie. Tech leads also have to teach newbies best practices, offer advice on designs, etc.

Managers are often technical (e.g. used to be programming daily), but are not actively writing code anymore.

I feel this is a bad situation for tech leads since they have to sort of manage, and do design work, and write code. Kind of a thankless job

In my last corporate job we didn't have a manager. Tech lead was filling that role.
I think in the end, it's hard to separate technical leadership from human leadership. After you do your system design, you need to divy it up amongst the juniors to get it implemented. When deciding who gets what piece you have to consider what motivates them, what their strengths and weaknesses are, etc... But for sure your manager is helpful in figuring these things out.

At this level, your manager basically becomes your partner, with the same goal of getting the work done most effectively. Your domain is the technical, their's is the human, but there is ton of overlap in the middle

It's rare a good architect is also a good (and willing) people manager. Organizations and teams profit most when separating those roles, unless you happen upon an individual who does both well. Separating mentorship and design from management has a huge cultural advantage: people who want to make more money don't have to always seek more political power, they can focus on technical skillsets that will make the organization wealthier and more fun to work at.
The architect ALWAYS ends up doing this. The other manager needs to be very active and engaged to actually deliver any value to the team and take some of this work off of the architect.
"Do these teams not have managers? Most of those responsibilities seem like the job of a manager."

I wish! I do not work at FAANG, but I don't think I've had any managers that were that involved in our work. It's mostly a push-it-down-to-the-dev so everything is on the dev's plate at the end of the day. Which is funny, because I always thought the point if the manager was to remove overhead and coordinate the work so the devs can get more done.

You forgot the part where they:

1. Take credit for your work.

2. Promise to research something and tell you that you can get more work done because they are "handling it" and then provide no information, so you are saddled with MORE work in addition to what you already had to do.

3. Give direction without understanding anything to feel important.

As you can see, there is some recent trauma here.

Same. Cosign, I've been prepped for it for 2 years and it's still a surprise and bad because I gave every opportunity, and then some, to prove it wasn't this silly and lazy. It is.

They will tell you as little as possible, at the very last minute, when they get bored of you asking for help.

You can literally change a field and if you expect your manager to do anything to help along the way, they won't. When you ask, they won't. When you ask again and highlight real bad behavior, they won't. When the bullying occurs right in front of them, they'll blame you and the other manager and tell you they didn't understand. Do. Not. Stress. Yourself. For. These. Places, dear Reader

Talented software engineers are generally tasked with every task.
I think having this position is actually a tacit partial compromise (a perk) for people like the OP (or myself, I'm in a similar situation and have similar feelings about it). I've seen people willingly jump from being a senior dev to being a manager, and either cease or limit actual dev work; however myself and many others don't want to be a manager, full stop. So, I end up doing the tech lead work (planning, design, divvying up work, interacting with other teams a lot esp. on high level, making sure it all comes together), and some of the more technical mentorship/etc. stuff, while the actual manager, who is also my manager, does most of the latter, including most of the motivation and all the HR/promo stuff. If I had to do all the latter I'd likely switch jobs, my manager might suspect as much.
That seems like a pretty good compromise ... in your case.

For most people in this position the sane advice is GET OUT.

The company plans to leech as much of the value of your experience as possible, and pass it on to cheaper juniors.

Furthermore they will pay you nothing for this (it's an opportunity to "give back"), but they will use you to hook naive juniors for lower pay (an opportunity to "learn from the best").

Basically the company is exploiting you to scam your replacements.

Hmm, so if there are a lot of junior developers - inevitable as more people are getting STEM degrees - I should not help them grow, so that they are not able to do my job? Sounds pretty bleak. Continuing this to its logical conclusion, should I try to sabotage them too? :)

By the time cheaper juniors are able to do what I do they might demand the same salary I demand, or whatever salary I might be able to demand at the time.

Frankly even from a cynical perspective, this doesn't check out. Juniors usually don't try to own the same thing - I'm already there and at any given point could do it better, shared component ownership is rare, plus they'd rather own something new so they can get promoted. Plus juniors move around more. Moreover, while new juniors are relatively easy to replace or outsource, someone with tons of expertise in the area and experience of owning it and working thru others is harder. So, being a large area lead seems more secure than being a junior.

> Continuing this to its logical conclusion, should I try to sabotage them too?

Similarly, if you are not donating blood, the logical conclusion is to become a vampire. :)

If you want to help junior developers, there are many other ways to do that. For example, you could teach a programming course, make a paid video at Udemy, or write a book. If your goal is to help junior developers, skip the intermediary, be more efficient, own the copyright, and set your own working hours.

My point was that not helping your coworkers succeed because you are afraid they'd take your job (unless that appears to be an explicit goal) is a very bleak mindset, and probably self-limiting too, as far as one's own career goes. My goal is to eat candy and poop diamonds, I don't have altruistic motives towards junior developers :)
OP never said he was their manager. In fact, OP's manager probably doesn't want him to be mentoring all day long.
That's very frequently exactly what a staff engineer is expected to do at large orgs, though.
OP might consider asking their manager rather than guessing.

"Hey, there seem to be a lot of juniors. How do you want me to approach this?"

That seems like a fairly good example.

For better, or worse, many tech companies, these days, seem to be obsessed with hiring large armies of inexperienced developers.

I have always assumed that they rely on embedded process, to get these developers to work towards release-ready products, but they may also be relying on mentorship and training from senior developers (I like that, better).

In my previous position, we did some fairly advanced and unique stuff (image processing pipeline stuff, in C++). It was almost impossible to hire engineers that already knew it. We had to look for people that "had potential," and hope to train them into a workflow.

It also meant that each employee was a big investment in time, and encouraged us to keep them on board for many years.

Training (I've done a lot) is a big fat pain, and not for everyone; but I feel that it is well worth it, to learn to do it.

It makes you a "go to" person for problem-solving (which not everyone likes, but problem-solvers are extremely valuable). It also engenders trust, deference, and respect.

TL;DR, it's good for your own personal career, to become a good mentor.

For better, or worse, many tech companies, these days, seem to be obsessed with hiring large armies of inexperienced developers.

I suspect that has been true in many tech companies over the past few years but will be much less true in those same companies over the next few years.

A culture where everyone with <10 YOE is job hopping every 18 months for a big compensation boost does not encourage either investment in training up those people by a company or development of deeper skills and experience by an individual.

If the recent trends in the tech employment market carry on this year I expect we'll see a lot more incentives for good people to stay with good employers for longer and a lot less willingness by employers to pay silly money for those with little experience and limited skills. Just like previous market swings we'll probably see less emphasis on hiring and more on stability and longevity of good working relationships.

>And in general, there are two ways to go. The first is to accept the fact that many senior engineering and most staff engineering gigs are more about this kind of mentorship approach than actually doing work. And basically accept that the prime "getting shit done" years of your career are done and you will mostly be working in this new way now.

100% and this is far from being a FAANG thing (never mind that FAANG doesn't even exist anymore). My experience is mostly in startup and PE based companies and it's like that there as well. The majority of my managers have been non-technical, corporate continues to shrink the management layer to "save money" (line managers with 20+ engineers), support roles like project managers in many places have been eliminated, and managers seem to spend the majority of their day dealing with comms so organizing and managing the doing aspects of doing work have fallen to me as a Principal, Staff, Lead engineer. My role these days seems to be to come in and bring organization to chaos, mentor / teach engineering (not how to code but how to be a professional engineer), be a tie breaker on big technical decisions, and set the vision and direction for my teams. Most folks I know who wanted to stay doers topped out a Senior or Engineer II and chose to stay there.

This is also likely to just increase or accelerate as the baby boomer generation (the largest working generation ever) who occupies a lot of leadership roles these days start to retire and leave a huge gap in qualified and ready candidates to fill the void. There just aren't enough of us so I expect we will see more and more folks press ganged into leadership that never really wanted that.

Boomers already retired a while back, with even fewer exceptions after covid.
Baby Boomers: Baby boomers were born between 1946 and 1964. They're currently between 57-75 years old

They haven't. I'm GenX and all of my boomer parents still work and lots of my friends boomer parents. It's starting but it won't peak for about 5 years.

1950 was over 70 years ago. That is the center and the vast majority of those folks are retired. The smokers/drinkers have passed away already. The stragglers are few and not a significant factor in the workforce any longer.
I for one am excited about this potential transition from eager leaders to reluctant ones. Sure, there will be bumps. Difficulties.

It might yield something new. Perhaps more focus on getting things done rather than getting things.

I'd say this tracks my non faang experience.

I used to find it frustrating to have a team full of greenhorns but changed my tune quickly.

    1. They were eager as hell.  It's refreshing to be surrounded by people like that.
    2. You can get more done with them by training and helping mop up the occasional mistake than you can without them.

In the end it was great but an entirely different role than what it said on the tin.

> Startups and consulting gigs probably better align with wanting to be hands on

Also tracks.

Those bullet points are spot on. Once you reach a certain level of experience, by years and/or breadth of experience, you are far more effective and valuable as a source of advice and education than as a code slinger.
Small correction: Consulting gigs are not a paycut. They are a pay multiplier.
In organizations that have separate management and IC tracks, there tend to be two ways that the IC track is interpreted as you become more senior:

1) You spend just as much time as you did before in development, only working on harder stuff.

2) You become more like an architect or an attending physician, where you're spending some time in development and some time teaching or consulting more junior devs.

I think most senior ICs would prefer #1, but in reality #2 is more common.

Shocking when you realize places like Amazon will be one L6 and ten inexperienced devs. The L6 will just absolutely micromanage the low yoe devs. So come up with a design for the whole team, break it into pieces, and then grill them on their small designs. The CRs go under the microscope. Sprint planning with some absurdly short estimate. This is how modern software development is done. And its unfortunate that for non critical services, you actually dont need that many experienced engineers.

This is why ageism is rampant, some 35 year old would never agree to this setup.

Either do it, or move to a critical service team where theres actual adults

Is this first hand experience? And if this is the case in most org/teams or just AWS?
Yes, this is the model, even though people generally wont speak it out loud within the company.
That's also what you see at underfunded startups.
This (experienced manager, many very-junior analysts) is also the model in consulting.
I've seen this approach in a non-amazon company
> my days are quite frustrating because I'm in teaching mode most of the time instead of building stuff

I have no experience at all with these companies, but isn't this one of the main reasons they hire someone like you?

A: Welcome to management, it's a sneaky thing sometimes

B: My advice is pretty simple - whenever possible, don't fix their mistakes for them or tackle the cleanup on something they've made a mess of. It's tempting - you'll spot the issues coming way before they do and you'll have a better fix in mind fast, but they need to be able to touch the fire and feel the burn... It builds confidence for them when they do fix it, it shows you have made them responsible and they own something, and in the long term it builds team trust (use your 15 years of judgement here about what can be allowed to fail for a bit without breaking the bank).

C: There are some junior devs (not always labeled junior) who manage to keep their jobs by routinely going through their contacts and getting them to "teach them the code" which really translates into "doing their work". Politely stop doing this - a 5 minute conversation (or less) and a link to some relevant code is enough before you pat them on the back and tell them to go work on it themselves again.

> a 5 minute conversation (or less) and a link to some relevant code is enough before you pat them on the back and tell them to go work on it themselves again.

so, you never work with issues with colleagues for > 5 minutes at a time? Is that normal? I understand you shouldn't do their work for them, but surely there's times when a longer coworking session is appropriate

That's a fair ways off what I actually said.

Pairing is fine, long sessions (1 to 3 hours) can be genuinely helpful and good experiences.

They are less helpful if your colleague requires that session to get anything done. If their answer to the question "Show me what you've got so far?" is "ummmmm" or otherwise blank... time for the link and a pat on the back.

If it's "I tried this and it didn't work" or "I have this thing on this branch but I'm stuck" or "This is close but I can't figure out this error" - sure, dig in.

This is what it feels like to get more senior. Your role is to coach others increasingly versus delivery.
Depends on the organisation, at my last job you could become a senior IC (which does not have any management or mentoring requirements) or you could become a ‘lead’ which is expected to coach the others in the team.
It's like this in a lot of companies. At FAANG you are probably more lucky because at least most juniors are smart. In general I don't know how to navigate this well. You don't want to be the old guy that constantly dictates things to be done in old ways. But you also can't let them go completely wild with their ideas and have disaster strike later. Onboarding one or two new guys into a team is fine but teams with a majority of newbies are just difficult.

A major problem I have seen in the last years is that the young guys seem to have a preference for super complex systems. Everything needs a http API, Kubernetes, Microservices, multiple repos and complex build pipelines even when a simple server with a database would be just fine.

Clear out what your obligations are with your management.

I've been in positions as a senior software engineer where it's my job to carve up projects and have make sure juniors can get things done. That means checking in with them, make sure they understand stuff, make sure quality is high, and ensure they're not getting blocked. Your management looks to you get the project done. You are not measured by your IC but by your ability to force-multiply to knock out projects.

In these situations, your individual IC contributions go down, but you effectively get to claim delivery of the project under your belt based on ensuring delivery success. (It may be critical in these situations to track how you made that happen.)

As a senior dev, teaching should be a good chunk of the job. As a principal I spend a third of my time mentoring, a third of my time in arch/meetings, and a third of my time building (usually with other engineers doing some of the work). The lower you go down the ladder in terms of experience the more you should be coding.
As a senior dev theoretically on track for principal, I'm finding coding occupies maybe 10% of my time over a full year. The rest is largely in "leadership" meetings where we argue over details about goal language and trying to figure out how to blame project failures on "dependencies".

Not really what I went into this field for. I miss my halcyon days being a low rank engineer churning out project tasks, but I do get the need for technical people to be providing the right guidance to help herd the cats in management.

After having worked at a FAANG and having friends who still do, the way I've seen it is that with your YOE to work basically solely as an IC with less mentorship responsibilities you have to be in a highly specialized, challenging area (AI, ML, etc.). If you're in a more common area like web dev, backend engineering, data ingestion, etc etc. then you're more likely going to have those mentorship responsibilities.
At a company with “flat team” aspirations it’s like this but the loudest juniors call the shots. Come in with 10 years exp in a language and get constant pushback on my suggestions because I’m new and unproven. After 2 years most of the loud ones that made all the decisions are gone and we’re stuck with something that doesn’t scale and needs to be rewritten because before end of quarter. Amazing how much tech debt is possible in this model.
Sorry it's hard to hear this, but you are definitely lacking some skillset of persuasion or communication. There are always "fights" in the beginning I guess, but if you are confident, know your shit, it should be very easy to convince less experienced people.

One thing you might not be aware of is "social capital", "setting expectations", "assertive communication" and things like that.

Sure, in an ideal world, wisdom should always win over loudness, but until that happens (never), you have to learn these soft skills to be the reasonable voice in a team.

I always found my voice in every team very early on, due to my knowledge, my high quality of work and being confident (in my abilities and my work.)

> if you are confident, know your shit, it should be very easy to convince less experienced people.

No, it isn't. I am fully aware that I am lacking some kind of ability to champion projects, explain things that seem obvious to me, and convince others, but I am also the absolute subject matter expert, know every piece of this shit and am completely confident in what I'm telling them. That's why it's infuriating to watch blatantly stupid projects with no basis in reality kick off then crash and explode in exactly the way I predicted. It is 100% a communications failure on my part. The confident salesman idiot will win every time.

Sometimes you can be an excellent communicator and you're still just working with morons.
In my experience coming in as the new guy with X many more years of experience doesn't automatically mean you're going to be listened to no matter how "assertive" you are. Communicating assertively can easily cause others (especially newer devs) to be on the defensive. If a whole team has decided on a trajectory you're not likely to change things very quickly by just exuding confidence. You don't have much "social capital" on a brand new team until you've demonstrated your skillset.

Also I find the habit of passing judgment of a person on an internet forum extremely distasteful and pretty disingenuous - you don't know enough about this person from a two sentence forum comment to judge their communication/persuasion skillset. It does nothing to support your argument or do anything other than make you feel superior to that person.

Why think this by default? I am in a similar situation as OP, 20 years of experience as dev, team lead and engineering manager, yet because I didn't know the intricacies of our custom framework the second I walked in the door, many of my suggestions were dismissed upfront and, a year in, I feel it's an uphill battle to get my ideas treated with anything other than suspicion.
That suspicion is healthy. You don't know the technology being used, per your own admission.

Ah, if only I had a dollar for every project turned into a mess because some engineering manager (who probably coded in COBOL last) thought they knew what they were talking about and pushed down some crappy choice

> There are always "fights" in the beginning I guess, but if you are confident, know your shit, it should be very easy to convince less experienced people.

Why would anyone do that, though? This is management's job to help get value out of senior engineers. It'll be the company debt to pay this technical debt. You still get a salary at the end of the day.

When I was at Amazon I saw a maximum of around half the team being L4. Usually it was people with 5+ years experience at other companies getting down leveled to L4/L5. I don't think we ever had more than 1-2 legit new grads/juniors on a team.
You’re lucky! You basically have an opportunity to multiply the way you work; every day, strive to make yourself redundant. Hand off as much as you can and support along the way; if you do this well, new, more challenging projects will find you. Second, don’t treat them like children, but like peers. That being said, when the corporate bs comes for you or them, don’t throw them under the bus. In fact, protect them. Laud publicly, be critical privately.
Talk to your manager and find alignment on what the team needs and how you might fit that. If your manager sees/acknowledges what you do and is in favor of you mentoring more — and you want that — figure it out, put it in writing, etc. If you don’t want that, find alignment with your manager. If they are a good manager they’ll allow you to focus on coding. You might be in a position to give a little and get a lot back both in the eyes of management and your own career satisfaction (teaching over coding as much) so I encourage you to try to zoom out, communicate, and get on the same page as the teams manager.
(comment deleted)