An effective manager is like a good software

Pamela Peixinho
Building Inventa
Published in
6 min readMar 14, 2023

Software design and Management. How are they related?

Women Writing on the whiteboard about APIs and Feedback [Unsplash]

A good software design requires several non-functional requirements. They specify the quality attribute of software. It allows us to impose constraints on the design of the system in our backlog planning and development.

Non-functional requirements (NFR) judge the software system based on Responsiveness, Usability[…] and other non-functional standards that are critical to the success of the software system. They are as critical as a functional requirement [Reference]

As good principles exist in software design, and management also has some good principles that differentiate prepared managers from managers with leadership gaps. For example, there are skills related to communication, empathy, organization, transparency, long-term goal vision, and others.

After a day of intense work as a manager, I had an epiphany that I formulated in the following question: Have you ever thought that most of the principles we apply to software design can also be applied to management? Let's take a tour of some of them.

Scalability

The software design principle called Scalability can be defined as

The ability for your program to gracefully meet the demand of stress caused by increased usage. In short, ensuring your program doesn’t slow or bust when pounded by more users than you originally anticipated. [Reference]

When you are a manager, your main job is to scale the impact that you would have as an individual contributor. Now, you have a team, a group of people with different seniority levels that together can deliver more than you as a lone wolf.

So, an excellent manager has one goal: build a self-organized team. A self-organized team has a good share knowledge chain, group intelligence to take decisions without a leader, and a wonderful evolutionary process.

In order to do that, you need to understand the team's seniority and delegate the team actions that you would like to do. The first and more obvious one is the tactical work! For example, if you are an engineering manager, the tactical work is coding, if you try to code all the main and most important tasks, your team will lack the confidence to do that, and you can delay all deliveries. But there are more things that you should be delegating: process decisions, technical decisions, prioritization, and integration with other areas.

It doesn't mean that you will leave all decisions and responsibilities to them and travel around the world. You need to coach the team during the process to teach them to make these decisions. You may think, “How can I teach it? They don't know how to do it, they are going to fail”. In order to teach it, you need to understand and accept that the team will fail, and it's part of their learning process. You need to be active in understanding what it's happening, give some feedback, but also leave them to fail in some cases.

By doing that, you’re helping these people to evolve their career paths. Until the day that you come useless, that means that you find and coached a new manager that will replace you in the team, and you can impact other teams.

This means that if you configured your team to be scalable, that configuration works when you are in your team’s day-to-day life, or even in your vacation period, you are not a single point of failure for your team’s scale.

Therefore, as software needs to scale, your skills and experiences will scale together with the team, which leads us to more deliveries with high quality and wider scopes, which also makes you challenge yourself to grow.

Reliability

Another important software design principle is Reliability. Imagine yourself doing one shopping, you finish the checkout, pay what needs to be paid, and the order just disappears, you can't find it in any place on the site. Or maybe you refresh your shopping cart and each time shows a different value. You certainly lose confidence in that e-commerce. As the literature says:

Software reliability is the probability of failure-free operation of a computer program for a specified period in a specified environment. Reliability is a customer-oriented view of software quality. [Reference]

As you can lose confidence in one site, the team members can also lose confidence in their manager. If this happens, it will be really difficult to have good career growth and satisfactory deliveries. So, what a manager should do to be reliable for that team?

For me, it can be explained with only one phrase:

Lead by Example!

The team will only have trust in you as manager if you do what you say and have good transparency. That means that you should know how to balance what and how you share. So, they can be aware of the things happening in the company, but not anxious about all the things that you, as the leader, should be handling.

Earning trust means that both of you, the manager and managed, can grow together. As you are reliable to them, and they are reliable to you. Consequently, building a good psychological security culture.

Availability

Availability is the art of your software to be available for every user, even if you are in a Black Friday or another high-seasoned event. The literature says:

Availability is defined as the probability that the system is operating properly when it is requested for use. In other words, availability is the probability that a system is not failed or undergoing a repair action when it needs to be used. [Reference]

Now maybe you're thinking “where is she going?”. Let me explain myself… These concepts in software engineering and management are really close.

In my experience, there are two availabilities that you should have as a manager: Availability for the team and for yourself.

Availability for the team means that you can show in action that they really are a priority for you. You need space in your agenda to have a good time with them in 1:1s, of course, but also for when they require you. So, when one team member sends to you: “Do you have 5 minutes? I have a problem and I need your help”, you will certainly have at least 15/30 minutes to talk. Or with you see that person struggling with a task or a decision, you can send: “Do you want to talk about it? Let's have a quick chat and I can be your rubber duck.

Availability for yourself means having space in your agenda for focus. Managers' agenda must be more than just meetings. You need to prepare yourself for 1:1s, need to read and write strategy documents, RFCs, prepare meetings, and others. You need to see some issues and study them to propose solutions that will help the team. Don't fall into managers' agenda trap.

Maintainability

Maintainability for software is about what not only you develop today, but how you continuously work to sustain that as good software for customers and developers.

Maintainability refers to the ease with which you can repair, improve and understand software code. [Reference]

Last, but not least. Maintainability for management means that you need to take care of the team morale, and team challenges, and do everything that we've said before, endlessly. It's like watering the plants in your garden.

These are my daydreams shared about my engineering management routine and learnings. I hope it helps new and experienced managers to learn and/or recap both principles, software engineering, and management. Thus, scale the number of prepared managers in the world.

If you want to know more about us, add me on LinkedIn or apply to one of our open positions! Let’s learn together and build something bigger and better than we could do individually!

Thanks for reading! I’m always open to receiving feedback, recommendations, or questions, feel free to contact me!!

Pamela Peixinho, Engineering Lead @ Inventa.shop
LinkedIn
: https://www.linkedin.com/in/pamepeixinho
Twitter: https://twitter.com/pamepeixinho
GitHub: https://github.com/pamepeixinho

My last name is LittleFish, “sea” you later! 😉

--

--