software-engineering--roles-definition

Competency Matrix

  CORE IMPLEMENT   GUIDE   TRANSLATE
TECHNICAL
COMPETENCY
MATRIX
SOFTWARE ENGINEERING
GRADUATE JUNIOR MIDDLE SENIOR LEAD SOLUTION ARCHITECT
  An enthusiatic learner who is keen to develop a range of engineering and soft skills. A motivated engineeer who is actively developing their technical and soft skills to help their team deliver well-crafted software. An experienced engineer who is committed to developing their technical and soft skills and delivering well-crafted software. An experienced engineer with deep technical skills who pro-actively contributes to the team and is passionate about delivering high-quality, well-crafted software. A respected leader and highly experienced engineer with exceptional technical skills and an open, collaborative approach who has the drive and passion to bring out the very best in their team and the software it delivers. A confident, authoritative and respected subject matter expert in engineering with a breadth and depth of technical skills and delivery experience, honed through the design and implementation of complex architectures across multi-discipline teams.
SOFTWARE DESIGN AND ARCHITECTURAL PATTERNS Able to describe what design patterns are. Able to implement and articulate commonly used software design patterns and when they should be used. Able to implement and articulate a range of software design and architectural patterns, when they should be used and what problems they address. Able to implement and articulate a broad range of software design and architectural patterns, when they should be used, alternatives which could be considered and the practical considerations of implementing them in a relevant language. Able to evaluate, select, articulate and implement the majority of software design and architectural patterns, when they should be used, alternatives which could be considered and the practical considerations of implementing them in a relevant language.

Guides the team through implementation and approach, ensuring they understand the reasoning and benefits.
Able to articulate and guide the evaluation, selection and implementation of a broad range of software design and architectural patterns, when they should be used, alternatives which could be considered and the practical considerations of implementing them in a relevant language.
ARCHITECTURE Able to explain why well-designed architecture is vital to the successful implementation of well-crafted software systems. Able to draw and articulate a component-level software architecture, clearly and consicely, including interactions, sequences and activities and showing consideration for the logical role of each component beyond the specifics of its implementation. Able to draw and articulate a system-level software architecture, clearly and consicely, including interactions, sequences and activities and showing consideration for the logical role of each component beyond the specifics of its implementation. Able to draw and articulate a complete, end-to-end solution architecture, clearly and concisely, including enterprise and integration patterns, transport and security protocols, consistency models and how it supports non-functional requirements such as performance, scalability and resiliance. Able to draw and articulate a complete, end-to-end solution architecture, clearly and concisely, including enterprise and integration patterns, transport and security protocols, consistency models and how it supports non-functional requirements such as performance, scalability and resiliance.

Able to design and justify a coherent solution architecture to meet a specific set of requirements.

Able to apply a combination of knowledge and pertinent questioning to comprehend a solution architecture on sight.

Able to translate complex, distrbuted architectures into simple, maintainable, well-engineered software solutions.
Able to draw and articulate a complete, end-to-end solution architecture, clearly and concisely, including enterprise and integration patterns, transport and security protocols, consistency models and how it supports non-functional requirements such as performance, scalability and resiliance.

Able to design and justify a coherent, well-considered, end-to-end solution architecture which meets functional and non-functional requirements.

Able to apply a combination of knowledge, experience and pertinent questioning to comprehend and challenge a complex, distributed architecture on sight.

Able to translate complex, distrbuted architectures into simple, maintainable, well-engineered software solutions and, drawing on experience, guide their implementation as part of a larger architecture implementation, co-ordinating and collaborating with other engineering teams and areas of the business, to realise the functional and non-functional requirements as a production-ready delivery.
PROGRAMMING CONCEPTS AND TECHNIQUES Able to explain basic programming concepts and how they are implemented in a relevant language, including Ecapsulation, Inheritance and Polymorphism. Able to implement and articulate basic programming concepts and techniques in a relevant language (see Reference) Able to implement and articulate intermediate programming concepts and techniques in a relevant language (see Reference) Able to implement and articulate advanced programming concepts and techniques in a relevant language (see Reference) Able to implement and articulate, in detail, advanced programming concepts and techniques in a relevant language (see Reference) Able to articulate and guide the implementation of advanced programming concepts and techniques in a relevant language (see Reference), drawing from first-hand experience.
MESSAGING AND INTEGRATION Able to understand and describe the differences between components communicating in-process and across network boundaries. Able to implement and articulate architectural patterns and styles including Request-Response, Fire and Forget, Publish-Subscribe, Store and Forward, Command Query Separation, Event-Driven, REST and SOA. Able to implement and articulate architectural patterns and styles including Request-Response, Fire and Forget, Publish-Subscribe, Store and Forward, Command Query Separation, Event-Driven, REST and SOA.

Able to implement and articulate pipelines, transformation, idempotency, serialisation and content-based routing.

Able to inspect the state of running integration processes using tools and techniques appropriate to the platform or implementation.
Able to implement and articulate architectural patterns and styles including Request-Response, Fire and Forget, Publish-Subscribe, Store and Forward, Command Query Separation, Event-Driven, REST and SOA.

Able to implement and articulate pipelines, transformation, idempotency, serialisation, content-based routing, channel security and message integrity.

Able to debug and diagnose issues in integration using tools and techniques appropriate to the platform or implementation.
Able to implement and articulate architectural patterns and styles including Request-Response, Fire and Forget, Publish-Subscribe, Store and Forward, Command Query Separation, Event-Driven, REST and SOA and select appropriate approaches to meet requirements.

Able to implement and articulate pipelines, transformation, idempotency, serialisation, content-based routing, channel security and message integrity and ensure that these approaches align with those in upstream/downstream systems.

Able to debug and diagnose issues in integration using tools and techniques appropriate to the platform or implementation.

Able to implement and articulate mitigation approaches for problem scenarios such as transient faults, transfer failures, poison messages and floodgates and ensure that these provide the best possible foundation for operational support.
Able to articulate and guide the implemention of architectural patterns and styles including Request-Response, Fire and Forget, Publish-Subscribe, Store and Forward, Command Query Separation, Event-Driven, REST and SOA and select appropriate approaches to meet requirements, which are co-ordinated across teams and align to the overall roadmap.

Able to articulate and guide the implemention of pipelines, transformation, idempotency, serialisation, content-based routing, channel security and message integrity and ensure that these approaches align with those in upstream/downstream systems.

Able to draw on knowledge and experience to aid troubleshooting issues in integration using tools and techniques appropriate to the platform or implementation.

Able to articulate and guide the implementation of mitigation approaches for problem scenarios such as transient faults, transfer failures, poison messages and floodgates and ensure that these provide the best possible foundation for operational support.
PERFORMANCE & SCALABILITY Able to describe the differences between performance and scalability.

Demonstrates consideration of both when writing code.

Able to measure and optimise the performance of small units of code.
Able to articulate the differences between performance and scalability.

Demonstrates consideration of both when writing code.

Able to measure and optimise the performance of complete components.
Able to articulate the differences between performance and scalability.

Demonstrates an understanding of both when writing code.

Able to measure and optimise the performance of multiple, integrated components.

Able to implement scalability in software solutions based on pre-defined approaches.
Able to articulate the differences between performance and scalability and the trade-offs between the two.

Demonstrates an understanding of both when writing code.

Able to measure, debug and optimise the performance of multiple, integrated components.

Able to implement and measure scalability in software solutions based on non-functional requirements.
Able to articulate the differences between performance and scalability and the trade-offs between the two.

Demonstrates an understanding of both when writing code, based on a deep technical knowledge of the implementation of underlying components of the development framework and the effects of hardware and infrastructure capabilities. Actively guides the team in taking the most suitable approaches to implementation.

Able to measure, debug and optimise the performance of multiple, integrated components across system boundaries, drawing on a technical knowledge of the implementation of interactions between system boundaries and instrumentation techniques.

Able to design, implement, measure, debug and optimise scalability in software solutions based on non-functional requirements, across multiple, distributed systems.
Able to articulate the differences between performance and scalability and be confident in making informed and pragmatic decisions on the optimal balance between the two to meet a given set of requirements.

Demonstrates an authoritative understanding of both in real-world scenarios, drawing from knowledge and experience of development frameworks and hardware and infrastructure capabilities. Pro-actively establishes best practices the team in taking the most suitable approaches to implementation.

Able to provide guidance and hands-on support to measure, debug and optimise the performance of multiple, integrated components across system boundaries, drawing on a technical knowledge of the implementation of interactions between system boundaries and instrumentation techniques.

Able to provide guidance and hands-on support in the design, implemention, measurement, troubleshooting and optimisation of scalability in software solutions based on non-functional requirements, across multiple, distributed systems.
DATA Able to describe the difference between relational and non-relational data stores.

Able to implement simple data models.

Able to perform basic CRUD operations on a data store.
Able to articulate the difference between relational and non-relational data stores.

Able to design and implement simple data models.

Able to implement basic CRUD operations on a data store and apply filtering, ordering and aggregation.
Able to articulate the main types of structured data storage - including Relational, Key-Value, Column, Document and Object - as well as the two main approaches to consistency - ACID and BASE.

Able to design and implement multiple-entity data models.

Able to implement CRUD operations designed for concurrency on a data store and apply filtering, ordering and aggregation.
Able to articulate, in detail, the main types of structured data storage - including Relational, Key-Value, Column, Document and Object - as well as the two main approaches to consistency - ACID and BASE - and the trade-offs between the two.

Able to design and implement complex data models which include multiple entities, relationships and/or hierarchies.

Able to design implement and debug CRUD operations designed for concurrency on a data store and apply filtering, ordering, aggregation, transformation and composition.
Able to articulate, in detail, the main types of structured data storage - including Relational, Key-Value, Column, Document and Object - as well as the two main approaches to consistency - ACID and BASE - and the trade-offs between the two.

Able to design and implement complex, distributed data models which include multiple entities, relationships and/or hierarchies and demonstrate consideration for consistency, availability and partition tolerance requirements.

Able to design, implement and debug complex or long-running CRUD operations designed for concurrency on multiple, distributed data stores and apply filtering, ordering, aggregation, transformation and composition.
Able to articulate and guide the selection and implementation of the main types of structured data storage - including Relational, Key-Value, Column, Document and Object - as well as the two main approaches to consistency - ACID and BASE - and the trade-offs between the two.

Able to draw on experience and knowledge to provide guidance and hands-on support in the design and implementation of complex, distributed data models which include multiple entities, relationships and/or hierarchies and demonstrate consideration for consistency, availability and partition tolerance requirements.

Able to draw on experience and knowledge to provide guidance and hands-on support in the design, implementation and best practices of complex or long-running CRUD operations designed for concurrency on multiple, distributed data stores which apply filtering, ordering, aggregation, transformation and composition.
TOOLS AND TECHNOLOGIES Able to describe the basic purposes of the tools and technologies used by the team, including software development and test automation frameworks, continuous integration and delivery, data management, and reporting, diagnostics and telemtry and any other tools used to support development and support. Able to articulate the purposes of the tools and technologies used by the team.

Able to use the basic functionality of these tools and technologies effectively in day-to-day engineering.
Able to articulate, in detail, the tools and technologies used by the team, where they are used and for what purpose.

Able to use these tools and technologies confidently and effectively in day-to-day engineering.
Able to articulate, in detail, the tools and technologies used by the team, why they were selected, where they are used and for what purpose and also describe the tools and technologies used by related teams.

Able to draw upon a deep knowledge of these tools to implement complex engineering approaches confidently and effectively.
Able to articulate, in detail, the tools and technologies used by the team and related teams, why they were selected, where they are used and for what purpose, as well as alternative options and how they compare.

Able to draw upon a deep knowledge and understanding of these tools to determine the approach to, and implementation of, complex engineering challenges, confidently and effectively.

Able to evaluate and select tools and technologies to meet the engineering challenges of the team, taking into account requirements, complexity, maintenance and architectural direction.
Able to articulate, in detail, the tools and technologies used by all teams in a given area of responsibility, why they were selected, where they are used and for what purpose, as well as alternative options and how they compare.

Able to draw upon knowledge and experience so as to act as an authoritative and effective guide to teams in the approach to, and the implementation of, complex engineering challenges.

Able to evaluate and select tools and technologies to meet the engineering challenges across teams, balancing this with organisational requirements, complexity, maintenance and architectural direction

Demonstrates consideration of the total cost of ownership and economy of scale in evaluating both new and existing tools and technologies. Ensures that there is is a high degree of transparency in the process, that the greatest scope of shared benefit is achieved and that there is no contention with similar activities activies in other areas of the business.
DEVELOPMENT LIFECYCLE Able to explain the benefits of having separate environments for development, test and production.

Able to explain the benefits of separating source control and configuration management and how they come together at build/deploy time.

Able to describe what kinds of documentation can be used to describe a system and what information is needed to release it into a new environement.
Able to describe the development, test and production environments used by the team and how they are provisioned.

Able to build, package and deploy software through environments; manage configuration settings and check the success of a deployment.

Able to find, understand and contribute to the team’s documentation about the products it develops.
Able to articulate the development, test and production environments used by the team and how they are provisioned. Able to execute the provisioning of new environments through a repeatable, automated process.

Able to build, package and deploy software through environments; make small changes and improvements to the build and deploy process; define and manage configuration settings and verify the success of a deployment.

Able to find, understand and contribute to the team’s documentation about the products it develops as well as the documentation created by other teams.
Able to articulate the development, test and production environments used by the team and how they are provisioned. Able to modify and execute the provisioning of new environments through a repeatable, automated process and troubleshoot environmental issues.

Able to build, package and deploy software through environments; make changes and improvements to the build and deploy process; define and manage configuration settings and troubleshoot deployment issues.

Able to define and contribute to the team’s documentation about the products it develops as well as the documentation created by other teams.

Able to prepare for and support a production release, including creating appropriate documentation; communicating changes and setting expectations clearly and in good time; co-ordinating with other teams and ensuring a graceful rollback is possible.
Responsible for defining, planning and co-ordinating the development, test and production environments used by the team and the process of provisioning them, in close collaboration with the Solution Architect to ensure they align with the defined architecture. Able to baseline, script, execute and pro-actively refine the provisioning of new environments through a repeatable, automated process and troubleshoot environmental issues. Actively shares this knowledge, ensuring that all team members fully understand the process and can execute it with confidence.

Responsible for the build, package and deploy process of software through environments, including identifying and co-ordinating technical dependencies with other teams; identifying, co-ordinating and implementing changes and improvements to the process; defining, managing and co-ordinating configuration settings and troubleshooting deployment issues, pro-actively collaborating with other teams as appropriate.

Responsible for the team’s documentation about the products it develops, ensuring that it is coherent, visible and up-to-date. Able to find and understand other teams’ documentation and contribute to it if required.

Responsible for ensuring, as far as practically possible, the successful release of the team’s software into production, including creating appropriate documentation; communicating changes and setting expectations clearly and in good time; co-ordinating with other teams and ensuring a graceful rollback is possible.
Ensures that the process of building, packaging and deploying software through environments, across teams, is done in a consistent, transparent way which adheres to the processes and principles set out by engineering leadership.

Works with teams to promote best practice, improve automation and reduce risk in the release of software. Ensures that knowledge is shared across teams and with the wider engineering organisation and that new approaches are agreed and adopted.

Actively ensures that technical depencies are co-ordinated between teams and that a clear, timely, collaborative and repeatable technical approach is followed when releasing software so that risk is mitigated.


CODE QUALITY Able to explain the purpose and benefits of test-driven development, automated unit testing and static code quality analysis tools. Able to understand and articulate the purpose and benefits of test-driven development, automated unit testing and static code quality analysis tools and use these tools and approaches consistently to improve code quality Creates tested software engineering solutions. Rigoroulsy applies static code quality analysis tools. Creates fully automated tested software engineering solutions with a focus on continuous integration and continuous deployment. Rigoroulsy applies static code quality analysis tools. Sets an example to the team in practising a test first approach to software engineering solutions with a focus on automation continuous integration and continuous deployment and ensures the team. Rigoroulsy applies and maintains static code quality analysis tools and uses the results to help develop the team. Has a full understanding of how code style impacts debugging and general problem solving and promotes good coding style within the team. Promotes a test-first approach to software engineering solutions and a co-ordinated approach to automation, continuous integration and continuous deployment across teams and the wider technology organisation. Monitors and refines static code quality analysis tools continuously to identify areas of improvement and pro-actively works with teams to help develop and strengthen them. Has a full understanding of how code style impacts debugging and general problem solving and promotes these across teams.
CODE CRAFTSMANSHIP Able to describe why well-crafted software mitigates the need for extensive documentation. Able to articulate why well-crafted software mitigates the need for extensive documentation and strives to craft code which meets these goals. Implements well-crafted software which does not require extensive documentation and strives to adhere to the principles of SOLID, YAGNI, KISS and DRY. Implements well-crafted software which does not require extensive documentation and which adheres to the principles of SOLID, YAGNI, KISS and DRY. Actively works with the team to ensure that it produces well-crafted software which does not require extensive documentation and which adheres to the principles of SOLID, YAGNI, KISS and DRY. Balances bespoke development with readily available packages. Actively guides the teams to produce well-crafted software which does not require extensive documentation and which adheres to the principles of SOLID, YAGNI, KISS and DRY. Ensures that engineering choices an approaches balance bespoke development with readily available packages.
CODE REVIEW Understands feedback from code reviews and consequently implements appropriate changes in code and approaches Participates in code reviews with only some input. Participates on code reviews and actively reviews code written by other engineers. Participates on code reviews and actively reviews code written by other engineers. Drives the code review process within their team. Participates on code reviews and actively reviews code written by other engineers. Drives the code review process within the team. Ensures that the code review process is active, efficient and beneficial. Continuously reviews the code produced by teams, including third party teams, to ensure that it adheres to ASOS patterns and pratices.