How to be a staff engineer. Or team lead. Or principal engineer. Or manager. Or whatever advanced career level people think is cool.

Daniel Moldovan
15 min readJan 11, 2024


Many wonder what does it take to become a senior software engineer. Or staff engineer. Or principal software engineer. Or manager. Or whatever advanced career level people think is cool.

Being a brilliant jerk

First, you need to be motivated by the correct things. More money, ability to boss people around, and more free time are usually top 3. Of course, all include bragging rights to your friends about your position.

Having nailed the motivation, the next step is to look at how we can get to that position. We need to be careful with our behavior. Visibility is at the core of any promotion. Why? Management needs to know you to promote you. So, make sure you are seen as the best in your team, or company. Sounds easy. But how to do it?

I have some pointers extracted from experience. Some techniques that you can try.

  • Make sure everybody in your team knows how smart you are. Act like a jerk. When a colleague has an idea you do not agree with, reply with: „What, are you stupid? Let me explain it to you”.
  • Mansplain everything to everybody in your team. If someone says „I think that database provides sufficient performance”, intervene with „let me explain you the difference between strong and weak snapshot isolation”. And dive into a 30 minute monologue on different storage engines and isolation strategies.
  • Do not let any other team member do any task which has any impact. You should be a one-person army that hogs all the work. It is best if the other team members have nothing to do, because management will see how valuable you are. Work weekends and late nights if needed to ensure other people do not get the chance to work on anything with any impact.
  • Hog knowledge. Knowledge sharing means your team members, i.e. promotion competitors, learn and get more chances to outrank you. Your job is to ensure there are as many pieces of the code possible only known by you. When someone asks you to explain why or how you did something, reply with „You would not understand, it is too complicated.”.
  • Always heavily promote the most recent hypes. Add them in your work, regardless if useful or not. Do you need to process 1 GB of data per day? Do not let that stop you. Deploy a Spark cluster and write the processing software in Scala using only functional programming concepts. Especially if the team does not know functional programming. Do you need to deploy an API to handle 1000 requests per day? Of course you need a Kubernetes cluster with a service mesh on top to run it. And a Redis cluster for a custom adaptive rate-limiting implementation. You get my point. If someone is crazy enough to counter with arguments like „this is overkill”, or “we do not need that”, complain loudly that „we are not innovating”.
  • Reject any opportunity to mentor anyone, to teach junior members, and reject any teamwork. There is no point in educating your competition. After all, the easiest way for you to be the best in your team, is for the team to be very weak. You shine best between uneducated and poorly performing members.
  • Make yourself the beacon of high standards and excellence. How? Be the negative person in the room at each meeting. “Upper management wants what? They are stupid and do not understand the business, what we do here, or something”. “Other team does what? It will never work, they do not know what they are doing”. The point is to be creative and find fault in any idea that does not come from you. Always state that you only look for faults to ensure a high level of excellence. People love that.

Follow the above and see your career wil shoot towards the sky. Or not. Depends. Does your company rewards „brilliant jerks” with leadership positions?

What if it doesn’t? What can you do?

How to reach a leadership position without being a jerk?

Or to rephrase. How to become a leader? One that inspires people. One that helps people grow. One who can scale teams to deliver together many times more than the sum of their individual parts. One that cares about people. One that grows when the team grows.

Not sure really. But there are several things I believe can have a big positive impact. Leadership positions involve, beside technical or domain knowledge, a lot of people skills, communication, and influencing. So, I believe it is critical to work on your soft skills. I will try in the following to give some indicators on which. And how.


First, I would start with the mindset. Namely, by reading Mindset: The New Psychology of Success. Why? To establish the baseline of growth versus fixed mindset. So I understand what growth and fixed mindsets are. So I know how to detect when a person leans more towards one or another. So I can work to have a growth mindset.

I would summarize growth versus fixed mindset them like this:

  • Growth mindset: you believe if you do not know something, it just means you need to work or learn more. Knowing or not knowing something only means that you had or did not have the time or opportunity to learn it. Nice right? It means with time and dedication you can learn anything.
  • Fixed mindset: you believe that if you do not know something, you are stupid. Not knowing something means you are less intelligent. Because intelligence is fixed, time cannot improve it. You either know stuff and are capable of doing stuff, or you are stupid.

Promote the growth mindset. In your team, in your life, around you. It will bring great things.


Next thing I would recommend getting a handle on is communication. On this topic I loved reading Nonviolent Communication and Radical Candor. Why communication? You want to be able to communicate your opinions clearly and unambiguously. All while not hurting anyone’s feelings. And while not being overly polite. To ensure people know that what you say is truthfully, respectfully, complete, and with the best of intentions. There is a delicate balance to maintain so “you can say the things you think you cannot say”, paraphrasing my favorite quote from Scaling People (an amazing book on management).

There are many teachings in the above books, and I strongly recommend you reading them. And here are the ones I love most:

  • Assume good intentions. When someone states or does something that you take in a negative way. Instead of getting angry. Or annoyed. Or sad. Think: “could there be a sequence of events through which someone with the best of intentions could end up with this unpleasant result?” And most of the times you will find good intentions leading to bad results. The guideline here is to assume good intentions. You will see many “conflicts” and “negative situations” disappear as you no longer put your fight face on, and instead work towards a constructive solution.
  • Observe the situation and refer to facts, not feelings or judgement. Instead of reacting to a bad idea with “you are stupid”, “the idea is stupid, or “why are you being stupid?”, you could say something like “I find the following potential issues with your idea:…”. Then, the person putting the idea forward can give their perspective, explain why those are non-issues, discuss probability and impact when they occur, etc. Observing, stating facts, not judging, leads the way towards a constructive discussion, instead of a heated argument.
  • Care personally and challenge directly. Strive for a balance between showing genuine care for individuals, and providing honest, direct feedback to help them grow. This requires empathy. To listen, to try to understand, and to care. And to give direct private feedback when needed. Let’s say a team member implements a proof of concept (POC) and showcases it to the team. Another team member notices a fundamental issue with the approach and mentions it. The member doing the POC gets all defensive. The discussion stops. How to react? You can always take someone aside and say “Look, I appreciate how much effort you placed in your proof of concept. The idea sounded really promising. But I believe you reacted defensively and did not seem like you have given the raised concerns enough thought. This type of reaction is counterproductive and should be avoided in the future”. What did we do here? First, we attempted to empathize, to show appreciation, to show that we care. And then, gave honest feedback in a gentle and caring way. We did not say: “you were defensive”. We said: “it looked like”, “you reacted like”, “it did not seem”. We assumed good intentions and focused on facts.


You will eventually reach situations where negotiations are needed. To get budget for something. To get time or money. To get others to like one of your ideas. To get more team members. To work on one project or another. The books I have read that have helped me in this area are Getting to Yes, The 7 Habits of Highly Effective People (namely Habit 4: Think win-win), and Never Split the Difference.

Getting to yes and The 7 Habits revolve around an interesting idea: what if negotiations are not zero sum games, in which if I win, you loose? What if we can make them into mutually beneficial partnerships in which we all win? One first point is that it does not mean compromise. Compromise means getting to lowest common denominator. Which can be actually a lose-lose situation. What it means: regardless of the options in play, find a option in which both parties win. For example. Management decides a feature needs to be delivered in 3 months and wants your team to do it. You believe it will take 6 months, not 3. So you negotiate. You propose to extend the deadline to 6 months. Management refuses since that conflicts with scheduled client conference. Management pushes a take it or leave it. You can refuse to implement the feature, and it will go to another team. But your team might get deprioritized and defunded in the future. Of course there are times when “disagree and commit” should be the go to strategy. But if you strongly believe you can’t deliver in the requested 3 months. What to do? Say no and risk your team’s future? Say yes and accept that you will not deliver which will also risk your team’s future? Work weekends and nights to compensate? Thinking laterally, you can try to invent new options not on the table. Options where you both win. You could split the feature in phases. Deliver in 3 months the critical functionality, then come up with the rest later. Or split the work in two relatively independent work items and find another team with capacity that can help. So you only have to implement half. Management would still get the feature in both scenarios and you would get to work on a reduced scope in the first 3 months. Win-win. Of course not all situations can be like this. But the main idea would be to step out of the box, outside of current options, and invent if needed options that can make everybody win.

Of course there are situations that are win-lose in life. For those I strongly recommend reading Never Split the Difference. It is peppered with tactical approaches to work your way out of such situations. However, I still think a win-win strategy should be our first goal.


Ok. We got communication and negotiation down. What to do with them? How to lead? Two amazing books I found on leadership are Switch and Turn the Ship Around. They have some amazing take aways for steering teams and organizations in the right direction.

Empower individuals. One key aspect from Turn the ship around that I think is helpful in building a high performing team is to empower individuals. To ensure initiative also come bottom up, not only top down. How? You must first communicate clearly the intent: the why and the what. So people know why and what must be done. And then let people come up with the how. This empowers team members to take ownership over the execution, since it is their solution not yours. Certify and not teach is a good practice in helping with this. Instead of repeating “we must do that, we must do this”, ask team members how to address situations, what is their take, how would they approach it. They should come up with the process and solution. There is a big difference between I understand and I remember. Teaching does not guarantee that people will remember. Certify that they remember by asking them to “teach you” will.

Embrace conflict. Teams should be able to question each other and hold each other responsible and accountable. Conflict is a good tool to get to a better solution. If we are afraid of conflict, teams will be overly polite but not work together. Team members must trust each other and challenge each other to get to great results. Conflict is required for that. We just need to make sure conflict is guided by the desire to get the best outcomes and the goal of the work to be done, not by individual egos.

Use the 3 levers of change: logical, emotional, and shaping the path. Switch points out that you should first appeal to the logical part of the brain. To present facts and data. But that is not enough. One thing people can’t control is their beliefs. They can’t force themselves to believe something. Meaning you also need to leverage the emotional path. It is not enough to say: “the system is so broken so each member needs to spend 3 extra hours per day when on-call just keeping it running”. While everyone understands “3 extra hours”, they might not get what it means in terms of emotional impact. Rephrasing like “during on-call we can’t take our kids to kindergarten or school, can’t pick them up, can’t spend the evening with the family, since there is extra work needed to keep the system running.”, might paint a better picture. The third point is shaping the path. If you want to steer your team towards certain behaviors or actions, you can try to control the environment. For example, you might want to improve empathy and collaboration in your team. Then, you could track how many times each member worked with another on a task, and use that metric in performance evaluation. If more collaboration is rewarded, you will see more of it.

Know the five dysfunctions of a team. Of course I also need to mention The Five Dysfunctions of a Team. Internalize them, be aware of them, notice them in your team, and address them. Absence of trust, fear or conflict, and avoiding to keep each other accountable are three dysfunctions which I want to highlight. If a team works well together, team members should be able to trust each other. They should be able to trust that each of them works with best intentions. That they have common goals, common values, common principles. They should keep each other accountable to the common values and principles. They should “check” each other. If they think some idea/work/behavior violates their common principles/values/objectives, they should not be afraid of calling it out. Conflict is healthy when it’s objective-oriented and its aim is to ensure you reach your common goals.


Feedback is a crucial element in leadership. On this topic I absolutely loved Thanks for the Feedback. From it I have learned to recognize the three main categories of feedback: evaluation, coaching, and appreciation. Evaluation feedback is when you say: “you are a senior”, “you are a junior”, “you are better than X”. When you label something with a level or a comparison with others. Coaching is when you say: „you should improve communication, be more focused, dedicate more time to writing”. When you give suggestion for improvement. Appreciation is when you say: “I thank you for all your effort, I appreciate the dedication”. When you only acknowledge what someone does, and you show your appreciation for that. Being explicit between the feedback that you give and what the receiver expects to receive will avoid many issues. If the receiver expects one type of feedback and you give another, things might turn bad. For example, if someone wants to know how to improve (i.e. coaching), and you just say “you are better than X”, it gives no relevant information to the receiver. How to get better than Y? Who knows. Or if someone expects an appreciation feedback after a period of hard work, and you provide coaching, the receiver might feel under appreciated. The key point here is to be explicit on what type of feedback you are ready to provide. Ask if the receiver expects another type. And calibrate the conversation accordingly.

Manage up

Last topic I want to cover is managing up. Most likely, there will always be someone managing you. Even you are the CEO, there might the board to manage you. Managing up basically means helping your manager to manage you. Why do you need to help your manager manage you and your team? If your manager does not succeed, you and your team won’t succeed. Many times management is viewed as a top-down thing. Management knows what to do, gives top down instructions to individual contributors, which execute. But that is not how successful teams and companies work. In successful teams people are empowered, take decisions, drive initiatives. In such teams the manager is generally not the person holding all details in their heads. Ok. But why still? Because you know your work best. And a manager might not be able to keep track of everything anyone does and provide correct attribution. Imagine this. Manager needs to work on a promotion case or try to get a raise for you. The manager needs to detail your work, its impact, how it matches to other team members, and so forth. You can help to increase the chances for success if you also provide your view on what you did. From your perspective, with your details. So that things are not left to chance.

For deeply understanding what managers do and helping you manage up, i recommend reading Scaling People and The Hard Thing About Hard Things. I believe gaining a good perspective on what management does will make you a better individual contributor, even if management is not what you want.


There are many other things of course that can help. Many books on different specific topics, some more broad, some more focused. For example, Radical Focus is extremely useful in understanding how to use Objectives and Key Results in guiding your team. How to Win Friends and Influence People is awesome to help with communication in general. And many many others that I forgot to mention, did not read yet, or did not understood.

But what I believe is that if you switch to a growth mindset, assume good intentions, aim for win-win, empower team members, communicate in a clear and empathic manner, understand how to influence change even when you have no authority, and understand how to help your manager, great things will come to you. Opportunities will open. And when they do, you will be prepared for them.

And last thing. Make sure you have the required technical skills. The above soft skills give you the means, the platform, to use your technical skills. You do need the skills to understand technical problems, envision solutions, create and track technical roadmaps, lead projects, and so forth. As technical knowledge is more focused, more domain-oriented, I will not provide guidelines here. But I want to underline that technical knowledge is a critical factor. I just believe you need the other skills above to create a knowledge platform that you can leverage to grow.

But don’t take my word for it. Read the books mentioned. Apply what makes sense for you. In your context. After all, context is everything. What works in a particular industry, in a particular domain or subdomain, in a particular company, in a particular team, for a particular person, might not work in the same way for you. Filter and apply what makes sense for you.



Daniel Moldovan

Wearing the Site Reliability Engineer and Software Development Engineer hats. Having fun with very large systems.