What's a senior engineer's job?
Table of Contents
What's a senior engineer's job? - Julia Evans
1. What's part of the job
- Write code. (obviously)
- Do code reviews. (obviously)
- Write and review design docs. As with other review tasks, I think of “review design docs” as “get a second set of eyes on it, which will probably help improve the design”.
- Help team members when they’re stuck. Sometimes folks get stuck on a project, and it’s important to work to support them! I think of this less as “parachute from the sky and deliver your magical knowledge to people” and more as “work together to understand the problem they’re trying to solve and see if 2 brains are better than 1” :). This also means working with someone to solve the problem instead of solving the problem for them. (和他们一起工作,而不是代替他们完成工作)
- Hold folks to a high quality standard. “Quality” will mean different things for different folks (for my team it means reliability/security/usability). Usually when someone makes a decision that seems off to me, it’s either because I know something that they don’t or they know something I don’t! So instead of telling someone “hey you did this wrong you should do X instead”, I try to just give them some extra information that they didn’t have and often that sorts it out. And pretty often it turns out that I was missing something and actually their decision was totally reasonable! In the past I’ve very occasionally seen senior engineers try to enforce quality standards by repeating their opinions more and more loudly because they think their opinions are Right and I haven’t personally found that helpful.(保持团队高标准。多和成员交流,自己的concern并不一定正确,说出自己的想法交换意见,会有1+1>2的效果)
- Create new projects. A software engineering team isn’t a zero-sum place! The best engineers I know don’t hoard the most interesting work for themselves, they create new interesting/important work and create space for folks to do that work. For example, someone on my team spearheaded a rewrite of our deployment system which was super successful and now there’s a whole team working on new features that are way easier to build post-rewrite!(创建新的项目,为团队创造新的锻炼机会)
- Plan your projects’ work. This is about writing down / communicating the roadmap for projects you’re working on and making sure that folks understand the plan.
- Proactively communicate project risks. It’s really important to recognize when something you’re working on isn’t going well, communicate it to other engineers/managers, and figure out what to do.
- Communicate successes!
- Do side projects that benefit the team/company. I see a lot of senior engineers occasionally doing small high leverage projects (like building dev tooling / helping set policies) that end up helping a LOT of people get their work done a lot better.(做些和团队和公司有益的side projects)
- Be aware of how projects relate to business priorities.(意识到当前项目和商业优先级关系)
- Decide when to stop doing a project. Figuring out when to stop / not start work on something is surprisingly hard :)
2. What’s not part of the job
为自己设置边界(boundary),有助于自己更好地完成工作。
The reason I think it’s useful to create a boundary here is that everyone I work with has a really strong sense of ownership/responsibility to the team / company (“does it need to be done? well, sure, I can do that!!“) and I think it’s easy for that willingness to do whatever needs to happen to turn into folks getting overwhelmed/overworked/unable to make the kinds of technical contributions that are actually their core job. So if you can create some boundaries around your role it’s easier to decide what sorts of work to ask for help with when things are hectic. The actual boundary you draw course depends on you / your team :)
通常下面这些任务都是project manager需要完成的:(当然积极进取的你,也可以尝试参与其中,但是是在做好自己本职工作的前提下)
- Make sure every team member’s work is recognized
- Make sure work is allocated in a fair way
- Make sure folks are working well together
- Build team cohesion
- Have 1:1s with everyone on the team
- Train new managers / help them understand what’s expected of them (though I think senior ICs often actually do end up picking some of this up?)
- Do project management for projects you’re not working on (where I work, that’s the job of whatever engineer is leading that project)
- Be a product manager
- Do sprint management / organize everyone’s work into milestones / run weekly team meetings
3. Explicitly setting boundaries is useful
我们通常会自认为,manager和自己对job expectation是一致的。首先在大部分情况下是不可能的,即便大体一致还大概率在许多edge cases上也会出现分歧。 所以最好的方法就是经常和manager沟通,自己对工作的看法期待,以及了解manager的想法。
I ran into an interesting situation recently where I was talking to a manager about which things were and weren’t part of my job as an engineer, and we realized that we had very different expectations! We talked about it and I think it’s sorted out now, but it made me realize that it’s very important to agree about what the expectations are :)
When I started out as an engineer, my job was pretty straightforward – I wrote code, tried to come up with projects that made sense, and that was fine. My manager always had a clear sense of what my job was and it wasn’t too complicated. Now that’s less true! So now I view it as being more my responsibility to define a job that:
- I can do / is sustainable for me
- I want to do / that’s overall enjoyable & in line with my personal goals
- is valuable to the team/organization
4. Don’t agree to a job you can’t do / don’t want
面对trash work,你应该如何处理。
- 首先考虑是否可以push back.
- 为了团队的利益,短期你可以接下来,但是需要让manager知道。
- 但是这种方法是不可持续的,对团队士气和发展也有很大影响。
- 作为一个技术人员,要主动想办法,如何高效有取地去解决这个问题,而不是靠人力去堆。
I think pushing back if I’m asked to do work that I can’t do or that I think will make me unhappy long term is important! I find it kind of tempting to agree to take on a lot of work that I know I don’t really enjoy (“oh, it’s good for the team!”, “well someone needs to do it!“). But, while I obviously sometimes take on tasks just because they need to be done, I think it’s actually really important for team health for folks to be overall doing jobs that are sustainable for them and that they overall enjoy.
So I’ll take on small tasks that just need to get done, but I think it’s important for me not to say “oh sure, I’ll spend a large fraction of my time doing this thing that I’m bad at and that I dislike, no problem” :). And if “someone” needs to do it, maybe that just means we need to hire/train someone new to fill the gap :)