Skip to main content

Grow faster by making yourself redundant!

Redundant! but why? What about job security? Shouldn't we be consolidating our position instead of going redundant? All these questions are obvious when you read the title of this article. Don't worry, we are not talking about how to get yourself fired but opposite, how to grow faster by making yourself redundant in a role. In a job, we are expected to play roles that are needed from us e.g. program manager, project manager, people manager, technical lead are few roles engineering managers play to be successful. This article talks about how we can progressively outgrow in our current role and start learning (or mastering) the new roles. Transferring responsibilities to people you are managing are the best way of making space for learning something new. Over the past couple of years as an engineering manager, I have been following this philosophy to learn new things. Let's take an example of leading a project to understand this better.



Engineering Managers are the backbone of the team. However, they are also the weakest link in the team, often they are the single point of failure. The team rely on them to make crucial decisions. In a normal situation, nothing is wrong with this arrangement but when they are away (in conferences, multi-day-meetings, holidays or sick) projects gets derailed due to decrease in decision making velocity and lack of process ownership in the team.

If EM spends too much time on project execution, they won't have enough time for people (call it 100% harvesting and no investing). In my experience, time spent on people is directly proportional to the happiness of the team which has a flywheel effect on deliverables. On the other hand, unhappy teams lead to lower development velocity and error-prone deliverables, which results in managers spending more time on execution.

This cycle leads to burnout in managers and also results in unhappy teams which have a domino effect on deliverables (poor in both quantity and quality). 

To avoid this situation the most important step for the managers is to automate the execution and funnel more-time in people management and product planning. However, it's not a trivial task and involves rolling out well-orchestrated process changes in small implement-and-improve iterations. For me, it took 6 months to achieve a sustainable execution model.

This article will take you through the journey of "making myself redundant".
Phase 1: "Doing all the things an EM should be doing! Well, I want to change it!"

Identifying delegation worthy responsibilities! 

Question: What are the responsibilities my team can own and run?
Planning? Retrospective? They do it fortnightly hence have a very good understanding which means they can be independent on this quite quickly.
Question: Who should own it? Do we need a new role? What should be the responsibilities of this new role?
Probably we need a feature/project lead. Who should be a Lead?
A-Team member.
Why don't I ask my team, what they think they should be doing as a Lead?

Time for brainstorming: 
We as a team gathered in a room and listed responsibilities which will be owned by the lead. E.g. updating the project status, finalizing implementation approach, sprint planning,
retro, demos (team rotates these) etc. Point worth noting, we didn't define everything, like how to manage external dependencies or how to distribute work. The plan was to start with something small and keep on increasing the responsibilities.

 Why not define comprehensive roles and responsibilities? 

Defining clear R&R in one go is very easy and leads to very clear paths however it also means decoupled roles which are recipe for disaster when you starting something this big. We can compare it with athlete training, they can't run a marathon in the first week but the distance is increased gradually over a sustainable duration. Similarly, we decided on some base responsibilities with adequate checks in place e.g. leads can always reassign part or whole of responsibility to me (EM) at any moment after discussion.

Is this a good model?
There are multiple ways a lead can be trained onto new responsibilities:
  1. Coach a lead on everything before handing over the responsibility 
  2. "Throw them in water and let them learn how-to-swim" give them responsibility and let them ask for help.
  3. Start small take a step at a time, keep on adding responsibilities.
I personally like the third option as it leads to sustainable handover where everyone gets the time to adjust and iterate.
Phase 2: "Attending all the team meetings as a participant."
Feature lead is starting to onboard on new responsibilities and taking ownership more and more meetings. However, it will start eating into the capacity of the lead which could be a problem. So, apart from defining some basic responsibilities, we also finalized on a rule "lead should start with 20% time on leading". The idea here is to increase the responsibility and not to make them unproductive.

The right mix!

As discussed above, listing role and responsibilities help, however it can also be over-prescriptive. Agreeing on "What needs to be done", "When it needs to be done" in important whereas "How" can be left open.
Ask pointed questions, to make sure things are on track, it will surface the trade-offs and flaws.  Follow five Whys approach if and needed.
Phase 3: "Coaching the lead!"
As lead is taking responsibilities, start spending more time with them to make sure they understand why we are doing something instead of just doing it for the sake of it. This will lead conversations on "why this and not that", addressing these questions is like laying the foundation of the leadership, answering every question sincerely will help in developing a good leader for your team.

A healthy team is built on healthy processes

"Processes are the building blocks of trust in a team".
"Teams who learn to rely on each-other can solve any problem".
"If we can define a problem, we can solve it and if we can solve it once, we should solve it efficiently the next time".
Healthy team need lightweight (healthy) processes to make sure everything runs smoothly. You can rely on the team and processes to take care of everything.
Phase 4:"Give up the power, not the control!"
The last piece of the puzzle is patience.
Following meetings if well run can help a lot:
  • Planning
  • Stand-up
  • Retrospectives
  • Health-monitors 
  • SWOT
If teams is not happy and motivated you can't deliver anything worthwhile. Listening to the team's concerns is the easiest way to address the problems. If team is raising a concern it should be fixed, don't apply filters without understanding the problem first. Team will always be motivated if you remove (or help them remove) the impediments, remember motivation is key to the successful delivery. I believe the most important part of my job is to keep the team motivated. I get the real sense of how we are doing as a team from the meetings listed above.

Right Now!

Phase 5: "Close to doing nothing related to a project execution! \o/

Focus on long-term strategy and career planning for the team!"

We successfully delivered the project without delay, covering more than we anticipated and removing all the major blockers we faced.
As an EM, I need to be do something to keep my anxiety in check.
So, I am making sure:
  • Scope is fixed 
  • Team stays away from distractions 
  • Focus on one thing at a time, minimize context switching 
  • Taking discussions irrelevant to the team away from them 
  • Address action items on priority
Giving away your responsibilities is not easy and people would be making mistakes like you did when you started. However, how to make this learning rewarding is the challenge. Remember you are learning as much as the other person, you are learning to be patience, you are learning to give away control, you are learning to diagnose problems early, so much learning is involved in this process. These are the building blocks of being a leader, if you can't delegate you can't scale.

In the end, learning is an essential part of the growth for everyone. Focus on growing people in your team for the unforeseen results. Encouraging leadership in your team is the best way of growing your team.

Try being redundant, its addictive!

Comments

Popular posts from this blog

Interview at Progress Software

I have given a lot of interviews before however, this one was special. Let me start from the beginning. I got a call from Progress Software and was scheduled for the first telephonic discussion. Next day, I got a call from HR and she asked me questions on Java and a few basic puzzles.  After clearing the previous round, I got scheduled for the second telephonic interview. This interview covered Java, design-related problems and algorithms. After a week, I got a call from the HR for the onsite interviews in Hyderabad. This is the first time I googled about Progress Software. I said yes for the onsite interviews. Journey to onsite started not as planned after my flight got delayed. Because of fog-related delay in Delhi, I reached the PSI (Progress Software India) office couple of hours late.  HR introduced me to the first interviewer. The interviewer explained the first round. It was a coding round (I am not a big fan of coding rounds), the problem was ...

java.net.SocketException: Connection reset

I am able to fix the problem via setting the following params on the HTTPClient class... client.getParams().setParameter("http.socket.timeout", new Integer(0)); client.getParams().setParameter("http.connection.stalecheck", new Boolean(true)); java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77) at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105) at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115) at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832) at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590) at org.apache.commons.httpclient.HttpMethodBase.execute(...

CXF-RS: Java Code Generation from xml/xsd

Cleaner approach is to use xjc like this: Continue to dirty approach below if u need to: When working with CXF-RS services often we start with XML message that will be served. After that we go through endless iteration of generating the right Java POJO's for the XML. The library like apache XMLBeans generate the Java code but the code generated is not what a developer would write and generally tedious to modify and understand. I have come across a work around for generating Java classes from XSD (xml) which is very close to what a developer with decent experience will write.  Follow the steps given below to explore the solution: 1. Generate the wsdl from from xsd as given in at this link  ( http://cxf.apache.org/docs/xsd-to-wsdl.html ). 2. The Java classes can be generated from wsdl from maven plugin entry below find complete details here   http://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html org.apache.cxf cxf-codegen-plugin ...