Description
Possibility of remote work: Hybrid working Office in Milton KeynesContract duration: Long term 1+ year (Quarterly extensions)Location: Milton KeynesJOB DETAILSRole Title: Lead DeveloperRequired Core SkillsMinimum years of experience required: 10+ (working with senior architects) or less if proven good technical skillsetEssential Modern JavaScript (ES6+) HTML CSS Visual Studio Code Git Azure DevOps React / extensive experience of reactive front-end framework(s) Gatsby / experience of static site generatorsDesirable GraphQL Understanding of the headless CMS approach Kentico 12 Understanding of design systems, including web components (shadow DOM, custom elements)Full Role DescriptionTECHNICAL SKILLS: Strong test-driven development experience, ability to lead on automated testing, coach and upskill other team members Strong ability to model data at conceptual and physical levels and communicate to other team members Demonstrate and champion best use of developer tools and libraries Facilitate agreement on development process with the team and adhere to it, upskilling other team members where necessary Participate in regular reviews of progress, helping identify process improvements and implement them Guide and encourage less experienced developers in improving their skills by pair programming, code reviews, mob programming, walkthroughs, proofs-of-concept, etc. Facilitate design discussion and decision as a team and determine best way forward Help the whole team understand the situation and agree the way forward so everyone's work remains aligned Know how to encourage effective teamwork and collaboration Understand and be able to identify sources of inefficiency, surface, challenge and overcome them Maintain awareness of other team members' work and know where to offer help and/or spot check their work for alignment with user stories, design decisions and security principles Awareness of different branching strategies including trunk-based development, branch-per-story and ability to guide the team on best choice for the situation and standard working practise Ability to develop other team members to become full-stack developers Ability to learn new and updated skills from other team members Solid object-oriented, domain-driven and functional design and programming skills and ability to help other team members develop their skills Strong ability to unpack user stories, suggest ways to break down or refine large stories, identify ambiguities and help ensure developers and testers understand the need, scope and acceptable criteria of each story Partner with solution architects on technology selection for the project, feed back on issues found, be able to select alternatives Be able to identify areas of technology risk and lead on proofs-of-concept, research and/or change of tack to address the risk early Collaborate with other team leads on problem solving, lessons learned, new approaches, potentially reusable assets Identify inadequate organisational support for and facilitation of technology delivery and escalate Lead on defining documentation the project needs and ensuring it is maintained as a "living document", ensuring documentation is as lightweight as possible and remains relevant over time Have a good track record of identifying other good developers and testers, be able to build a strong team around them Develop other team members’ skills Continue to learn and improve their own skills Be unafraid to admit a lack of knowledge and ask for help, leading by example in showing less senior team members that it is safe for them to do the same Share innovations with other teams who could benefit Understanding of key accessibility issues, related web technologies, ability to engage with Accessibility team early to develop accessible software Understand when to engage with data protection team, awareness of what information is personal data and implications for managing it Ability to assign (and reassign) tasks to team members to best utilise their skills, maintaining a balance between short term delivery progress and long term need to upskill and develop team members Ability to translate ideas in both directions between technology and business worldviewsTech Lead Transferable Technical Skills Make sense of existing code, be able to refactor it to improve its design, prepare it for enhancement and add automated tests Ability to read and make sense of legacy code in other programming languages in order to interface with it Strong understanding of secure design and implementation of software Standard data formats: working knowledge of JSON and XML Good understanding of Git version control, branches, merges, resolving conflicts, difference between rebasing and merging, squashing, tags Solid understanding and experience of operationalising and operating a system in production, including identifying what to monitor, failure modes and mitigations, designing for robustness and self-recovery Awareness of modern cloud services landscape including application hosting, managed relational database, edge content caches, Web Application Firewall, DDoS protection, message topics and queues, email sending, service authentication, blob and file/block storage, data caches (e.g. Redis, Memcached) Ability to create responsive web interfaces that work well on different screen sizes, devices and browsers Understanding of common authentication flows (ideally with SAML and OpenId Connect) and integrating authentication and authorisation concerns within an application Understanding of the best ways to use common developer tools and libraries and the features that can save time and promote efficiency (including Jetbrains Resharper or Rider, Visual Studio, VS Code, Git) Strong ability to sequence releases to form a clean, risk-free upgrade path Ability to work across the full stack, which typically includes: web development (HTML, modern CSS including media queries, flexbox, calc() and custom properties, modern ES6 Javascript including modules, classes, let, const, destructuring assignment, template literals, arrow and async functions, promises, a packaging tool and a bundling tool, ideally able to use Typescript), database (including relational, ideally SQL Server), build pipeline (Azure DevOps, static code analysis tools) cloud deployment (relevant Azure and AWS services, Bicep, CloudFormation)