Good Leadership

Good leadership requires several skills such as vision, strategic thinking, focus on execution, connecting with stake holders and across the organization, caring for team members and their careers, and inspiring and motivating team members. Below I have described some leadership lessons that I have found useful.

Management style:

  • In truth we run a marathon and not a sprint: Realize that while we run sprints on a weekly or biweekly basis, the reality is that our teams are running a marathon. Therefore, we need to prioritize work based on the goal of winning a marathon and not finishing a sprint.
  • Align engineering with organization’s overall objectives: Think in line with what your boss’s goals are and how you and your team fits in the paradigm. This will lead to success for the unit as well as the whole company.
  • Live what you preach: It is extremely important to have high credibility and integrity. If you are preaching for high quality in code, then participate in code reviews and spend time providing quality feedback with regards to possible improvements. If you want employees to be more disciplined, then display the same discipline, and perform your work in a timely manner and honor your commitments.
  • Don’t micromanage: Encourage autonomy, see my article on delegation.
  • Strive for happiness: It’s important for a leader to be happy with what they do so they can focus with all of their energy towards driving productivity.
  • Hire people who really are passionate about their job. These people will be happy with the work, will stick longer with the company and will be more productive at work.

Collaboration:

  • Encourage collaboration: Pairing engineers to work together on a task is a great way to encourage collaboration.
  • Be selfless: Set an example as a leader by providing a helping hand.
  • Provide the team a safety net: Accept that failure will occur and when it does make failure a team failure rather than an individual’s failure.
  • Celebrate team wins collectively: Rather than encouraging and celebrating individual wins, celebrate wins as accomplishments of the combined team. And celebrate often; you don’t have to climb mount Everest before you celebrate success.
  • Encourage software development as a team sport: Team members should strive for a joint success.
  • Trust and respect employees: Software developers are mostly introverts; however, in a supportive environment, developers will collaborate and this will increase productivity.

Focus on Execution:

  • Don’t let great be enemy of the good: It is more important to get a good product out than missing deadlines in pursuit of a great product. But don’t lose the vision for greatness, create paths that enables greatness for your product and when pace slows down on essential features, pursue tasks that will enable greatness.
  • Context switching is extremely expensive: Align work to minimize context switching. Sometimes engineers get bored of working consistently on a single item and therefore having two items per engineer in parallel is fine. However, don’t take up three or more items simultaneously as context switching will slow down the execution considerably.
  • Have confidence: Sometimes it’s better to execute and ask for forgiveness later. However, when you execute without permission have a rollback plan in place and a good answer for why you executed the task if asked by senior leadership.
  • Calculated shortcuts: Taking calculated shortcuts that enable quicker delivery is a good thing. Technology is paid to deliver products and features and not necessarily to produce an amazing system that misses deadlines.

Be supportive and caring for your team:

  • Place a welcome mat outside your door: If someone asks for your time, create time for that person.
  • Remember that people are not a math equation: We need to listen in on the emotional aspects of our team members and ensure personal wellbeing. Happy employees are more productive and have less turnover.
  • Focus on your employees’ strengths: It is best to not focus on minor weaknesses.
  • Support career development for your team: This means aligning work to be in line with the employee’s career objectives and then carving time out for the employee to learn things they want to improve upon during work hours. When employees see a career improving trajectory, their motivation increases and it leads to increased productivity and decreased turnover.
  • Represent and fight for your team members in the organization: Be on the outlook for opportunities that will benefit your team members.  
  • Remember to give positive feedback frequently: Be specific in the feedback; it is better to give positive feedback publicly than in one-on-one meetings. This creates a culture where high performance is celebrated and as a result more people try to become top achievers.
  • Be careful with negative feedback: Negative feedback is taken ten times more intensely than positive feedback so be prudent about timing and give negative feedback in one-on-one meetings rather than in open settings.
  • Remove obstacles for the team: Shield your team from office politics and red tape so they can focus on work. 
  • Remember that care is bi-directional: If you want your team to care for you, care for them.
  • Provide a helping hand: If someone is stuck and needs help, take the time out to sort out their issues.

Lean on your team for learning and growth:

  • Learn from your team: People in your team have different strengths than your own. In my experience, it is best to leverage your teams’ strengths by learning from them.
  • Solicit feedback during one-on-one sessions: This will open you blind spots. Encourage team members to speak openly. People can be afraid to give honest feedback; you have to encourage and enable a culture where honest feedback is cherished.
  • Create a good relation with truth tellers: Find the truth teller within your team and then foster an excellent relationship with them so as to get insight on areas that are in your blind spot.
  • Work on being more self-aware: Good feedback helps you become more self-aware so embrace feedback as a helpful tool.

Coaching:

  • Coach your team on the soft skills: Find courses within your organization that help in communication and other soft skill disciplines.
  • Career aspirations: Coach your team members in identifying their career aspirations and enable a path for your team members through which they can achieve their aspirations.
  • Take one-on-one meetings seriously: Make this time valuable for your employees and yourself.

Create a positive culture around you:

  • Positive culture: Promoting a positive culture of collaboration is responsibility of a manager, so focus on enabling a collaborative, supportive culture.
  • Understand cultural complexity: It is extremely important for a leader to understand the culture of your audience so you can explain the message in words that will be heard. I was born in Pakistan and spent the first seventeen years of my life there; moreover, English has been my second language. I have had some managers who were culturally more aware and others who had little regard for the sensitivities of those from other cultures. My connection, loyalty and happiness at work was higher when I had managers who could more easily navigate the cultural barriers. When you are able to connect with employees from different cultures, it creates a stronger bond in the team which leads to happier employees. Therefore, try to understand cultural traits of others so you can break down the barriers in communication and thus connect better with your employees.

Communication style:

  • Keep communication simple: Simplify complexity into a clear and easy to understand message. People tend to remember simple things better and thus your message will sink in much better if it is simple.

Inspire passion for excellence:

  • Inspire people: Good leaders inspire people to become the best they can. Encourage greatness, enable it, promote it. Delegate well – autonomy leads to innovation and excellence.
  • Pay down technical debt continuously: As a software lead continuously dedicate some effort to pay down technical debt so that you don’t have to take a pause on enhancements due to need of allocating a large amount of time to pay down technical debt. Spending a lot of time paying down on technical debt looks really bad as time allocation for your team; so avoid more than one third of your team’s time on it. You can argue that why accrue technical debt in the first place. However, do accept the reality that as teams make enhancements for new features under time pressure, technical debt will naturally accumulate.