Updated: October 26, 2022
Introduction to the role of software engineer
Software engineers design, implement, and maintain software systems to improve government services for users. This software is built to meet the needs of regular users of government services as well as our partners in government.
Below you’ll find the full list of skills for becoming a software engineer at Skylight and a description of the skills required for each level. These descriptions offer insight into the scope of work someone at each level should be capable of doing on a consistent basis. We use these role descriptions both as a guide during the hiring process and as a springboard for discussing career progression at Skylight.
Required skills
Software development
You write clean working code in various programming languages that others easily reuse. You work in a shared codebase and follow leading programming practices. You have an understanding of algorithms and data structures and know which ones to pick to solve your problem.
You’re comfortable with pair programming and sharing your knowledge with others. You mentor other engineers.
Code quality
You understand leading practices and patterns to avoid when writing code. You write tests for all your code. You avoid and reduce technical debt. You’re familiar with commonly-used production and infrastructure tooling.
Security, privacy, and compliance
You build secure applications and defend against common security vulnerabilities. You navigate complex security and privacy compliance requirements.
Data engineering
You use various datastores to handle persistent data in software systems. You build and understand data models. You encrypt data at rest and in transit. You optimize database queries. You understand the implications of working with data on the front end as well as different state models and appropriate storage (cookies, browser, etc.).
System architecture and design
You understand the different pieces of software systems and how they fit together. You design new system architectures and know when to refactor. You follow leading DevOps practices when implementing and deploying systems. Your designs take performance, reliability, and availability considerations in mind. You know when it’s appropriate to build a prototype before investing further engineering resources.
User focus
You center the user in your work, always thinking through the impact and implications of code you write. You contribute to writing user stories and associated acceptance criteria from a technical perspective. You program with accessibility in mind, making sure the services you write are available to every kind of user.
Software engineer career pathway
Associate software engineer
-
Associate
-
I not completed
-
II not completed
-
Senior not completed
-
Staff not completed
-
Principal not completed
As an associate software engineer in an entry-level role, you’ll need to have an understanding of the role and show potential. You’ll need (and receive) guidance and training from more experienced software engineers to produce good work and develop your skills.
Skills needed for this level
Software development
You have some experience writing working code. You write code in at least one programming language or framework but need assistance from other engineers to solve many problems. You have some familiarity with version control, algorithms, data structures, debugging tools, and what makes software resilient and performant.
Code quality
You have an awareness of the different types of testing and some of the DevOps leading practices required to reliably deliver software to production.
Security, privacy, and compliance
You understand the importance of security and privacy. You have awareness of common security vulnerabilities and privacy concerns and implement mitigations for them with guidance.
Data engineering
You understand that there are different types of databases and data stores as well as some of the differences between them. You have an awareness of data models and data queries.
System architecture and design
You know the different components of a basic full-stack web system. You understand some of the pros and cons of different architecture and design decisions.
User focus
You understand the importance of considering user needs. You read and write simpler user stories. You solve basic accessibility concerns.
Software engineer I
-
Associate completed
-
I
-
II not completed
-
Senior not completed
-
Staff not completed
-
Principal not completed
As a software engineer I, you’ll regularly contribute code. At this level, you’ll be expected to have some practical experience but need regular guidance and training to produce your best work and develop your skills. You’ll work in combination with a more senior engineer.
Skills needed for this level
Software development
You fix basic defects and implement basic software features without guidance. You generally write working code and are quite comfortable coding in at least one programming language and framework. You understand basic algorithms and data structures. You work in a shared codebase with other engineers, implementing feedback from code reviews and using leading practices in version control. You estimate small tasks.
Code quality
You regularly write unit tests for your code and have some understanding of how to avoid technical debt in a project. You understand the importance of integration testing. You comfortably use debugging tools to debug basic issues without assistance. You apply leading DevOps and security practices.
Security, privacy, and compliance
You proactively identify basic security and privacy issues. You work with the other engineers on your team to file security-related issues and implement a solution.
Data engineering
You have a basic understanding of different types of data stores and what factors to consider when choosing one. You understand most data models and are comfortable making simple queries to the database. You alter application state in limited ways.
System architecture and design
You’re aware of some design patterns and have a basic understanding of full-stack architecture. You make small enhancements independently but may need help developing solutions to more complex problems.
User focus
You ensure user needs are considered when implementing new features. You collaborate with user researchers and know how to read the outputs of user research.
Software engineer II
-
Associate completed
-
I completed
-
II
-
Senior not completed
-
Staff not completed
-
Principal not completed
At this level, you’ll be expected to work independently on a team. You’re comfortable planning and implementing new features, solving complex bugs, and familiar with operating software in production.
Skills needed for this level
Software development
You are competent in implementing software features without guidance. You work with other engineers to build out new complex features across the full stack.
You consistently produce high-quality code and are comfortable tackling most projects without guidance from other engineers. Your code is self-documenting and easily understood by others. You correctly choose the best algorithms and data structures for a particular problem. You provide reasonable estimates based on capacity and complexity. You provide feedback on leading programming practices to your peers through code reviews and 1:1s. You’re comfortable coding in multiple languages and frameworks and learning new ones when necessary. You have some experience working in different parts of the stack.
Code quality
You write tests for all your code, and have an awareness of your project’s overall test and code health. You help DevOps engineers to implement leading practices and may be asked to participate in on-call rotations. You actively avoid creating technical debt and understand when it’s necessary to pay it down. You code with security and privacy in mind.
You help resolve some production incidents. You understand important code health metrics. You’re effective at pair programming whether driving or navigating.
Security, privacy, and compliance
You need little direction with security-focused work. You encrypt data at rest and in transit. You implement access controls, following the principle of least privilege. You design systems to handle personal identifiable information (PII) and protected health information (PHI). You’re familiar with multiple tools and practices for scanning your code, images, and application.
Data engineering
You use and interact with a variety of data stores and generally choose an appropriate one once you understand the data needs. You write and optimize complex database queries. You have an awareness of the performance implications of your data model and storage choices. You understand and interact with application state. You make appropriate decisions about which kind of state to utilize.
System architecture and design
You build and test simple interfaces and APIs between systems or provide input on more complex integrations as part of a team. You understand how performance needs might change depending on project requirements. You scale applications and mitigate or avoid common failure scenarios to maximize uptime.
User focus
You collaborate closely with product managers, researchers, and product designers to ensure the product meets user and organizational needs. With some help, you translate user research into an actionable technical plan. You consistently build accessible interfaces.
Senior software engineer
-
Associate completed
-
I completed
-
II completed
-
Senior
-
Staff not completed
-
Principal not completed
A senior software engineer is an experienced practitioner. You’re comfortable designing and implementing complex software systems. You’re constantly striving for industry-leading practices. You collaborate with the team to align engineering activities with the wider strategy to inform system design. At this level, you’ll be expected to supervise and develop other members on your team or within the software engineering practice.
Skills needed for this level
Software development
You understand and use software leading practices and teach them to others.
You write understandable and well-documented code. You’re adept at providing kind and actionable feedback to other engineers through regular code reviews and 1:1s.
You write code anywhere in the stack and eagerly take on new challenges in new environments, languages, or frameworks.
You provide capacity estimates not just for yourself, but for the broader team.
You have a solid understanding of public interest technology and the government domain. You understand the role of software engineers in the overall agile development process. You’re gaining experience in how high-performing software teams operate and interact with other roles and stakeholders.
Code quality
You build quality in from the start. You write tests, follow DevOps leading practices, and understand infrastructure as code. You handle on-call incidents with a fair degree of confidence. You design and implement end-to-end and integration tests.
Security, privacy, and compliance
You have experience defining security and privacy requirements based on user and client needs. You implement compliance and security as a continuous process. You shepherd systems through complex compliance processes.
Data engineering
You choose the best data store and model for a system and write optimized database queries. You explain the data model to other engineers and spot improvements where available.
You interact with multiple data stores in the same application. You build and use data pipelines.
You optimize the way that application code interacts with data for performance improvements.
You handle state and the side effects that may incur as a result.
System architecture and design
You’re beginning to design larger and more complex systems and application programming interfaces (APIs), and you integrate with external systems. You identify and implement performance improvements and know which design patterns to use and which to avoid. You’re competent in profiling applications and identifying performance problems.
User focus
You work to ensure others on your team are maintaining user focus. You regularly provide feedback and call attention to user experience in code reviews.
Staff software engineer
-
Associate completed
-
I completed
-
II completed
-
Senior completed
-
Staff
-
Principal not completed
A staff software engineer is an expert practitioner who leads and directs engineering activities across multiple teams. At this level, you’ll be expected to:
- Develop and enforce good engineering practices
- Design and architect resilient and performant software systems
Software development
You have a robust, cross-domain understanding of all parts of the stack. You’re fluent in the entire project.
You understand the impact of code changes (yours and others) across the project even where it’s non-obvious. You understand individual pieces of code as well as how they fit together to serve the overall project. You bring this broader understanding into code reviews and implementation planning. You design and implement complex algorithms.
You have the communication skills and experience to effectively influence others and provide guidance to other projects, partners and government customers.
Code quality
You write tests for all your code and proactively work to improve the code health of your entire project. You encourage teams to adopt DevOps leading practices, like canarying, multiple deployment environments, and infrastructure as code, and work closely with DevOps engineers to implement these practices. You advocate for your team to use multiple forms of testing, such as unit tests, integration tests, load tests, and end-to-end tests.
Security, privacy, and compliance
You have a deep understanding of potential security and privacy vulnerabilities and risks and take steps to mitigate them for your team. You build tools and processes to make compliance and auditing faster and easier.
Data engineering
You set direction for your wider team on data stores and models. You refactor data stores and change data models to optimize performance. You’re not afraid to think outside the box for data storage solutions and always consider optimizations like cache layers.
On the front end, you optimize state handling.
System architecture and design
You design large, complex systems and APIs that may span multiple projects. You identify systems in need of refactoring. You have a deep understanding of infrastructure tooling and DevOps leading practices and use them to inform architecture decisions.
User focus
You work across projects to ensure user focus and accessibility is maintained across the entire application or suite of applications.
Principal software engineer
-
Associate completed
-
I completed
-
II completed
-
Senior completed
-
Staff completed
-
Principal
A principal software engineer leads other software engineers within the organization and attracts and builds talent. At this level, you’ll be expected to be an expert practitioner who defines and enforces leading practices, influences organizational strategy and priorities, and collaborates with colleagues across all aspects of government. You’ll also build Skylight’s reputation for strong software engineering through channels such as public speaking, publications, workshops, or social media. At this level, you’ll be expected to transform software development practice at the leadership level across client organizations.
Skills needed for this level
Software development
You define and promote programming leading practices within the organization.
You’re responsible for making sure that Skylight’s software engineering team is aware of new and evolving practices and technologies. You help decide Skylight’s engineering priorities and market that to new clients. You’re comfortable forming opinions on (and advocating for) a worthwhile technology investment for our clients and partners.
You’re capable of implementation considerations across a wider suite of products, not just a single project. You provide implementation guidance on a project after only a short time reviewing it.
Code quality
You define Skylight’s own standards of code quality leading practices and ensure that they’re used across the organization where possible.
Security, privacy, and compliance
You’re an expert at building systems that operate in highly-regulated environments, such as those requiring HIPAA compliance. You seek out compliance automation practices.
Data engineering
You set organizational direction, priorities, and standards around data usage. You provide guidance on optimal data engineering practices to unfamiliar projects.
System architecture and design
You influence Skylight’s organizational strategy around software architecture and look for opportunities to bring similar architecture to multiple projects. You keep up to date with the latest thinking around software design, and you’re involved in marketing Skylight’s brand of architecture design and leading practices. You may be called in to consult on projects you’re unfamiliar with to provide input on the architecture.
User focus
You set company standards and priorities around user focus and accessible design. You conduct user research when necessary.
References
- GOV.UK Digital, Data and Technology Profession Capability Framework software developer role
- CircleCI Engineering Competency Matrix