Defining the role of a software engineer
Below is a playbook I’ve used to describe the responsibilities of a software engineer for hiring and professional development purposes.
Software Engineers are responsible for delivering value to our customers and the business within our product development environment where:
- Outcomes are the focus, rather than outputs.
- Product teams consist of individuals with diverse skills, because no individual covers all bases.
- Ownership between teams and individuals is clear.
- Teams can make time for experimentation to reduce the risk around upcoming work. This helps teams to become more ambitious without jeopardising outcomes.
- Reusable patterns are valued and utilised.
- Teams work backwards from a desired outcome or goal rather than forwards towards a nebulous end state.
- Teams are high-leverage, meaning they’ve utilised reusable patterns and their body of research to achieve greater outcomes with less effort.
Responsibilities
All Engineers:
- Deliver high-quality software. Business-as-usual for Engineers is the delivery of solutions through high-quality contributions to our codebase. They do this by embracing our established reusable patterns and tooling, test automation, documentation, and collaboration with their peers.
- Explore solutions with your team and stakeholders. It’s not enough to simply execute — Engineers need to have ownership over their solutions. This includes participating in refinements, solutioning, and creating initiatives, user stories and tasks.
- Engage in the continuous improvement of your team. Every Engineer belongs to a team, and every team needs to constantly reflect on performance and effectiveness. In order for teams to self-improve, every member needs to be engaged in reflection (e.g., through reviews and retrospectives) and self-improvement.
Senior Engineers:
- Evolve our reusable patterns and tooling. To be high leverage, teams must rally around standardised patterns and tools, to avoid having to re-invent the wheel every time they tackle a common problem.
- Evolve our ways of working. Senior Engineers must champion software development practices that promote outcomes (over outputs) and work with their team to improve the operations of the team.
- Technical architecture/planning. While all Engineers contribute to the technical architecture of our product when developing new features, Senior Engineers (and above) are expected to have a more long-term, cross-initiative opinion on our future architecture. When solutioning an initiative, they must consider other future initiatives and our broader technical direction, to ensure we’re working towards our goals.
- Mentor the team. Senior Engineers (and above) should take responsibility for the success of others in their team.
Tech Leads:
- Lead the refinement and solutioning process. Tech Leads are responsible for their teams solutions. This includes leading refinements, solutioning, and creating initiatives, user stories and tasks.
- Manage our upstream dependencies. Our software is built with various upstream dependencies that need to be selected and maintained. Tech Leads should guide this process.
- Manage our reusable patterns and tooling. Tech Leads own the roadmap for pattern and tooling enhancements, which should be tied to our technical vision.
- Manage our ways of working. Tech Leads are responsible for the way of working for their team.
Privacy and terms
I will only use your email address to send you this newsletter or to reach out to you directly, and you can unsubscribe at any time. I will not share, sell, or rent your email address to any third party, though I do store it the software I use to dispatch emails.
The information provided on this blog is for informational purposes only and should not be considered investment advice. The content on this blog is not a substitute for professional financial advice. The views and opinions expressed on this blog are solely those of the author and do not necessarily reflect the views of other organizations. The author makes no representations as to the accuracy, completeness, currentness, suitability, or validity of any information on this blog and will not be liable for any errors, omissions, or delays in this information or any losses, injuries, or damages arising from its use. The author may hold positions in the companies or products discussed on this blog. Always conduct your own research and consult a financial advisor before making any investment decisions.