on
SoftwareEngineering Management
A Note on Engineering Leadership
Back in April, I wrote a note on engineering management. In that post, I wrote primarily about how to set up and run an engineering team based on the discussions I had with a few people about what an engineering manager’s work is like and how to do the job.
But the focus there primarily lies in how to run a stable and functioning team. There are things I haven’t put into that post, which is how to lead the team.
This might be confusing for some. What is the difference between managing the team and leading them?
Well, the general difference between the definition of managing and leading is about whether you’re thinking about how to make sure your goals are achieved or you’re thinking about what the goals should be in the first place.
In the previous post, I explained how to set up your team to achieve the goals you need them to achieve. But I’ve yet to explain how to set the goals and visions, which might be a bit trickier to do.
I, of course, am not talking about short-term project goals, which are generally quite obvious for you and for the team. I’m talking about the deeper question: what is the purpose of the team? What is the purpose of the work done by the people under your leadership?
Setting Vision
Leadership is about getting people to work together to achieve something. So it’s important that you have a vision of what to achieve.
A vision is, in a way, a goal you want to achieve together with your team. But unlike day-to-day work goals like timely project delivery and good unit test coverage on your systems, which will feel pretty meaningless for most people unless they’re extremely obsessed with that kind of stuff, a vision is something grander that, if achieved, will bring a sense of satisfaction and fulfillment to everyone involved.
Examples of vision:
- Building a convenient self-service software development and delivery infrastructure that’s easy to operate and cheap to maintain.
- Ensuring all team members reach their full potential and nobody feels left out.
- Building the best e-commerce marketplace to empower small and medium enterprises in reaching bigger markets.
A good vision is something that can set the common direction and values of the team members, and it’s something that you can “sell” to the team as a statement of their work’s purpose.
Since there are good visions, of course, there are also bad visions. The following is one vision statement that a friend who was a CTO at his own startup told me back in 2019.
Our company’s vision is to contribute to Indonesia’s economy.
So my response was something along the lines of:
In what way are you trying to contribute to the economy? I contribute to the economy by buying snacks and eating lunch from nearby food stalls every day. If the company only needs to contribute to the economy, then it’s enough for it to simply exist, get paying customers, and pay its employees. But is that enough for the company?
He wasn’t telling me the vision with the intention to hire me at that point. But the problem with that vision is that it didn’t give me any kind of sense of why I should work for them to achieve that vision other than money, assuming they pay really well. But even though the pay is so great, it probably still wouldn’t give me any sense of pride and purpose to follow that vision.
The vision wasn’t something that would give me any sense of pride or achievement if I achieved it. And I just don’t think anyone who aims big would be convinced to follow his leadership with that vision.
But simply having a good vision statement isn’t enough. It needs to be something that reflects your values and what you’re truly aiming to achieve. If it’s not, then it’s just a lie you tell people.
For example, one of the vision statement examples I mentioned above is as follows.
Building a convenient self-service software development and delivery infrastructure that’s easy to operate and cheap to maintain.
Now, when making your technical decisions regarding the infrastructure you build at work, are you using that vision statement as your guiding principle? If not, then it’s just a lie.
If the people you lead realize it, it will lower your credibility as a leader in their eyes, as they’re disillusioned by your actions. If they really believe in the values in your vision statement, this will lead to lower morale and potential conflicts in the team.
Connecting with People and Their Aspirations
Every person has their own aspirations and goals, and in order for you to be able to lead them well, you need to make sure you understand their aspirations well and incorporate them into the decisions you’re making. This is why when we’re hiring people, we’d normally ask them what their aspirations and future plans are.
Let’s say you have a team working in software development and delivery infrastructure domain, and your vision is as follows.
Building a convenient self-service software development and delivery infrastructure that’s easy to operate and cheap to maintain.
Then you’re hiring an engineer whose aspiration is to become a great product engineer and build products that are used by billions of people (end users) every day. How can you align their aspiration with your vision?
If the infrastructure you’re building is a PaaS product that serves a lot of paying corporate customers, and with lots of paying users across the world, you probably can try aligning your vision with the engineer’s if they can compromise on their personal aspirations (adjusting from billions of end users to millions of corporate users) or if they reposition the job as a step towards reaching their goals (which probably will require them to switch jobs later).
But if the infrastructure you’re building is an internal platform of a corporation with just thousands to tens of thousands of employees, they’re going to need to compromise a lot on (or even abandon) their aspirations to be able to work with your vision.
Whether they’re willing to compromise or abandon it should depend on how strongly their personal vision is tied to that exact aspiration, if they can achieve their personal vision through some other way without achieving that one aspiration, they might be willing to readjust their strategy. But if not, they probably wouldn’t want to compromise or abandon those aspirations (and you shouldn’t make them do it).
That’s why you should focus on hiring people whose values and aspirations align with your vision, aside from having a vision statement that gives people a sense of purpose when they’re pursuing it and a sense of fulfillment when they finally achieve it.
Defining and Executing Strategy
Having the vision statement and finding the people who want to achieve it with you isn’t enough. You need to come up with a strategy to bring your vision into reality.
There’s this quote by Harry S. Truman.
Not all readers are leaders, but all leaders are readers.
You need to be knowledgeable in many things to be able to come up with strategies that you need to bring your vision into reality. But even before thinking about your strategy, you need to be extremely knowledgeable to be able to come up with a grand vision that’s still realistic and achievable in the first place (otherwise it wouldn’t be a vision a human can possibly realize, or it might be realistic but just not for you).
So make sure to do your homework, get a lot of knowledge. Since we’re talking about leadership in software engineering, make sure to make yourself knowledgeable enough in both the technical and non-technical aspects of it, along with related fields covering the domains of computer science, computer engineering, and cybersecurity. It’s also important for you to learn some philosophy, politics, and psychology since you’ll need it when dealing with the people aspects of leadership. Also learn some economics.
There are many ways to learn nowadays. I primarily learn by reading books and papers, with conference and lecture videos uploaded on YouTube as complementary materials. As long as you can absorb the knowledge relevant to your context and develop the right skills on top of that knowledge, it should work just fine.
Once you have the knowledge, learn how to combine it all together in your work in setting the more concrete short-term goals for your team, setting the standards for them, and mentoring them. If you can mentor them well, you can gain more points from them in leadership, and they’ll likely be happier following you.
Aside from the domain-specific knowledge related to the technical know-how of things, also gather knowledge about what’s happening in your industry and the history of things. This will help you understand why things are the way they are, and also what’s likely to happen next. This knowledge will allow you to understand how well you’re leading your team if compared to other comparable leaders, and show you the alternative paths on where to improve.
Managing and Supporting
While leadership skills are somewhat distinct from management skills (despite some overlaps) and the best leader might not always be the best manager, a good leader should at least be a competent manager.
Learn to manage resources, projects, your team’s manpower, technical aspects of the work, and delivery timelines. See the note on engineering management for more breakdown on managing an engineering team from the people aspects.
You need to be able to secure and allocate resources in a way that sets up the incentive system in the team to move towards your vision.
You also need to know how to support your team members when they’re struggling. Their struggles can be technical or non-technical, and supporting them in their non-technical struggles is where learning humanities subjects such as psychology, politics, and philosophy will pay off the most.
Conclusion
This post isn’t meant to be a full-blown manual on how to be a leader. It’s just pointing out a few qualities that I think a good leader should have, and what you might need to do to develop those qualities.
Have I developed all those qualities myself? I believe so, to some extent.
But am I a strong leader yet? That is something I can’t claim to be just yet.
In my personal opinion, a strong leader is someone with a grand vision and the ability to make even the grandest visions achievable. There are definitely people whose visions are grander than mine, and there are absolutely people whose abilities to realize their visions far surpass mine.
But if you’re aiming to be a leader, this might be something you can start with.