The Engineering Manager’s Guide to Autonomy

Leonard Stellbrink
5 min readJan 5, 2024

--

I’ve always believed in giving my software engineers plenty of freedom and not micromanaging them. This approach really took shape for me when I came across something called ‘Auftragstaktik’. It’s a method originally used by the military, but it turned out to be a great way to lead a tech team.

“Auftragstaktik” originates from the German military strategy to lead people efficiently in situations where things change quickly and being able to adapt fast is really important. I’m writing a longer article about all components involved in that concept but want to share the Autonomy part first because I think it’s the most important part and can stand alone.

Empowering software engineers with autonomy in their projects is a critical component of effective engineering management, especially when applying “Auftragstaktik” principles. Here are 9 ways how you can do this in more detail:

9 ways to increase autonomy in your software engineering team

Decentralized Decision-Making: Shifting decision-making authority to your software engineers is crucial for fostering autonomy. By doing so, you allow them to make key choices in their areas of expertise, such as selecting appropriate frameworks or determining the most efficient architectural designs for the project. This empowerment not only accelerates the development process by reducing bottlenecks in decision-making but also boosts the engineers’ confidence and investment in the project. To ensure this approach is effective, it’s important to provide clear guidelines on the project’s overarching goals and the limits of their decision-making authority. For example, while an engineer might choose a specific framework, it should align with the project’s overall technology stack and performance criteria. This approach encourages engineers to think critically, weigh options, and take ownership of their contributions, ultimately leading to a more innovative and responsive team dynamic.

Setting Clear Objectives and Boundaries: While offering autonomy, it is essential to clearly define the project’s objectives and the boundaries within which engineers should operate. This clarity helps in aligning their decisions with the overall goals of the project. Setting boundaries might involve specifying coding standards, deadlines, performance requirements, and resource limitations. For instance, while engineers have the freedom to innovate, their solutions should adhere to predefined coding standards and performance metrics. This structure ensures that while engineers exercise creativity and initiative, their efforts are channeled towards meeting the project’s strategic objectives.

Providing Access to Resources: Ensure that your team has access to all the necessary tools, platforms, and information to execute their tasks effectively. This includes not just software licenses and cloud services but also easy access to other teams whose work intersects with theirs. For example, if a software engineer needs data from another department for a feature they’re developing, the process to obtain that data should be straightforward and efficient. By removing these logistical hurdles, you enable your team to work more effectively and focus on their core development tasks.

Outcome-Based Autonomy: When granting autonomy, link it to specific project outcomes or milestones. For instance, if a team is tasked with reducing the load time of a specific endpoint, they should have the freedom to explore various methods to achieve this goal. This approach encourages innovation and problem-solving while keeping the team focused on tangible results. It allows engineers to experiment with different technologies and methodologies, as long as they are working towards the agreed-upon outcome, fostering a sense of ownership and accountability in the process.

Regular Agile Check-Ins: Implementing an agile framework with regular stand-ups or sprint reviews is crucial for maintaining project alignment and momentum. These check-ins provide a platform for engineers to report progress, raise concerns, and seek guidance. It also allows you, as the manager, to stay informed about the project’s progress and intervene when necessary. This iterative approach ensures that the project stays on track and aligns with the set goals, while also providing flexibility to adapt to changes or challenges that arise.

Fostering a Culture of Innovation: Actively encourage an environment where innovative and creative solutions are not just accepted but celebrated. Create a safe space for experimentation, understanding that not every idea will lead to success, but every attempt is a step towards growth. Reinforce this message in team meetings and through your actions. For instance, when an engineer proposes a novel solution, acknowledge their initiative regardless of the outcome. This approach nurtures a forward-thinking culture where continuous improvement is a shared goal.

Building Trust and Responsibility: Show your engineers that you trust their technical judgment and problem-solving capabilities. This trust is crucial in empowering them to take ownership of their work. Convey your confidence in their abilities, and resist the urge to micromanage. As they feel trusted, they are more likely to act responsibly and take pride in their work. This environment of trust and responsibility leads to higher job satisfaction and motivation, driving better performance and innovation.

Reflective Learning from Outcomes: Encourage your team to view both successes and setbacks as valuable learning opportunities. After each project or milestone, conduct a retrospective analysis to understand what worked well and what didn’t. This reflective process should lead to actionable insights on improving processes and decisions in future projects. For example, if a certain approach led to a delay, discuss how similar situations can be avoided or handled better in the future. This culture of continuous learning and improvement helps in refining skills and processes over time.

Leading Problem-Solving Initiatives: Empower your engineers to take the lead in identifying and resolving technical challenges. While providing guidance and support, encourage them to propose and implement solutions autonomously. Over time, this approach will lead your engineers to not only address existing technical issues but also proactively suggest improvements. This proactive stance on problem-solving fosters a team of self-starters who are constantly looking for ways to enhance the technical aspects of their work, leading to a more dynamic and innovative engineering environment.

By implementing these strategies, you not only enhance the sense of ownership among your software engineers but also foster a more dynamic, innovative, and engaged team capable of agile responses to the fast-paced nature of software development.

Always keep in mind that there are boundaries for the autonomy of your software engineers. For example architectural decisions and code will need to be reviewed by other engineers. Providing the right amount of autonomy and boundaries will lead your team to become faster and more efficient in making decisions.

How do you foster autonomy in your software engineering team? What worked and what didn’t? Highly interested in your experience.

If you have comments or questions, please connect with me on LinkedIn. Thanks for reading!

Did you like this article? Want to become a better Engineering Manager? Get more Engineering Management articles sent straight to your inbox, subscribe here.

--

--

Leonard Stellbrink

Engineering Manager leading with passion and empathy @yelp