Manager perspective here.
1) Best thing you can do is understand the "why" for decisions you don't agree with. I find people get grumpy and quit because they don't like decisions being made, but are surprisingly timid to ask "why". Sometimes they have made an assumption that isn't true, which makes them feel like the company is making bad decisions, when it's actually a bad mental model of the goals. You might need to ask "why" a few times to get to real reason (see "7 whys"). Asking "why" can lead to a few results:
- The ICs know something I don't, we're making a mistake, and by asking "why are we doing X??" we catch and fix a big problem much earlier.
- The IC isn't aligned to some macro strategy. They think Y is the most important thing, but in reality, no one cares about Y, and the whole team/company will succeed or fail based on X. Some people struggle hearing this message, but if we can get on same page, they understand "X is what really matters", and start operating with that understanding, it's one of the real ways we can 10x a person's output. They don't write 10x the code, but they work on 10x more important problems, and even their small decisions that are more aligned with the macro goals. ICs who are fighting the macro strategy in every small tactics debate can derail a team -- if you really want to fight it, it should be a dedicated conversation with your manager/leadership team, not every code review/meeting.
- If you get an honest "why", and it really doesn't align with your morals/goals, might be time to look elsewhere. This might be "we're doing this because our VP wants a promo" or "I'm not sure, but product asked us to and eng can't challenge them" or "just make this change so Alameda can bypass risk assessments"
Getting to a shared "why we do what we do" can take quite a few 1:1s, but is super worth it. The people who don't get there usually end up leaving, and usually do so crankily. The people who get there are happier, more productive, and once they fully grok the current strategy they are more likely to be able to influence the long term strategy for the better.
2) Development and long term career goals:
- Format: save a 1:1 every quarter (or so) to go over this in detail. Don't cover anything else in these meetings, and don't try to make this 5 minutes at the end of every 1:1.
- Keep it prioritized: Keep a note of things you want to talk about in next career focused, append to it, and read/review/edit it before the meeting so it's really a stacked list of what's important, not just what's top of mind.
- Be direct: tell them when you expect your next promotion -- your manager should know your expectations and are't always smart enough to ask. If you close but not guaranteed a promo next cycle, and your manager knows you are expecting they can help fine-tune your output with remaining time (and their representation of you). If you're not close and you are expecting it, you should have that conversation sooner rather than later.
3) Complaining
Complaining in a 1:1 can be pretty healthy if done well, and pretty toxic if done poorly.
- Do bring your top concerns to your manager, and ask for help fixing them. Managers should help fix many, and will sometimes need to explain that this one isn't one we can fix, but always worth talking about what is bothering you most over time.
- Prioritize: Don't bring a bunch of concerns to your manager just because they are "top of mind". I've had employees spend the first two thirds of every 1:1 telling me about a concern, and after 20 minutes of probing, realized: they are aware of how to solve it, they have it covered, and are just taking about it because it was the topic of the last meeting they got out of. 1:1 time is valuable, please make sure it's prioritized.
- Do feel free to just vent to your manager when you're super annoyed. That's cathartic, and can be a safe space to complain and get it all out. They might add a strategy to help, of fix a mis-aligned "why", but just venting for the sake of venting is find too if that's what you need most (it often is). Smart managers will probe to see "is this a vent problem or a fix problem", but smart ICs will start it off by saying "I know we have to to this, I know why, I just want to vent about X because it's really bugging me". A good manager should be able to listen and shut up for these when needed.