Job purpose:
A Senior Software Engineer is an experienced professional responsible for overseeing software development projects, writing clean and efficient code, and providing technical leadership to a team of engineers. In this role, you will assume ownership in the design, development, and delivery of high-quality products, systems, and services that exceed customer expectations. You’ll proactively share your knowledge of specific technical solutions and business processes within your area of responsibility. This includes developing high-quality software, identifying and executing tasks within the software development life cycle, and reviewing and debugging code to ensure the quality and functionality of software solutions. Your proven ability to handle scoping, expectation management, architecture, design, and client management, combined with your experience in seamlessly picking up new frameworks and technologies, positions you to provide technical guidance, mentorship, and project management expertise, ensuring the successful delivery of software projects.
Key accountabilities:
Technical Leadership:
- Serve as a technical lead contributing to and directing the efforts of development teams, including internal and external team members.
- Lead the design, development, and implementation of software solutions, ensuring adherence to technical specifications, requirements, and architectural principles.
- Architect scalable, reliable, and maintainable software systems, considering performance, security, and usability aspects.
- Provide deep technical expertise that drives colleague engagement, clarity, and instills a culture of innovation and execution.
- Mentor and coach junior members of the development team to allow for skill and knowledge development through advice, coaching, and training opportunities.
Software Development:
- Possess and apply a broad knowledge of principles, practices, and procedures of software development to the completion of complex assignments.
- Design, develop, modify, implement, and support software components anywhere in the software stack.
- Write clean, efficient, and well-documented code in various programming languages, frameworks, and technologies.
- Develop high-quality software, including requirements, design, code, documentation, and testing.
- Implement software testing strategies, including unit testing, integration testing, and automated testing, to ensure quality and reliability of software products.
- Optimize software performance, troubleshoot issues, and address technical debt through refactoring, performance tuning, and code optimization techniques.
- Automate tasks through appropriate tools and scripting.
Quality Assurance and Documentation:
- Conduct code reviews, mentor junior developers, and provide constructive feedback to improve code quality and maintainability.
- Ensure all tasks are completed to the required quality standards.
- Maintain relevant documentation to describe logic, coding/configuration, testing, and changes where applicable.
Project Management:
- Successfully develop, deliver, and maintain high-quality software solutions that meet customer expectations.
- Evaluate third-party libraries, frameworks, and tools for integration into software projects, considering factors such as compatibility, performance, and licensing.
- Contribute to the development and enforcement of coding standards, development processes, and software engineering best practices within the organization.
- Participate in Agile or Scrum ceremonies, including sprint planning, daily stand-ups, and retrospectives, to track progress and ensure alignment with project goals.
Collaboration and Stakeholder Engagement:
- Collaborate with product managers, business analysts, and stakeholders to define project scope, objectives, and deliverables, and translate business requirements into technical designs.
- Work with product managers early on to shape product definition so that it can be built in a flexible, extensible, and robust way.
- Partner effectively with all team members to deliver against commitments.
- Work in close partnership with cross-functional teams and management to ensure alignment with project goals.
- Communicate effectively with team members, stakeholders, and leadership to provide project updates, address concerns, and escalate issues as needed.
Mentorship:
- Identify training needs in your team and suggest training interventions, whether it be an Udemy course, Pluralsight, or mentors within the team.
- Offer mentorship and guidance to less experienced developers in your Team.
- Commitment to team success and positive team dynamics.
Key performance indicators:
- Delivers software projects within the agreed-upon deadlines, maintaining alignment with the defined scope and quality expectations.
- Proactively introduces process improvements and adopts new technologies that enhance team efficiency or product performance.
- Consistently delivers high-quality software that meets or exceeds customer expectations, with minimal post-release issues.
- Maintains the performance and reliability of systems and applications, with a focus on minimizing downtime and performance-related incidents.
- Actively mentors and coaches junior team members, contributing to their professional growth and the overall development of the team.
- Focus on sound development concepts and patterns such as object/service orientated architecture, refactoring, and separation of concerns.
- Comply with project plans and industry standards.
- Code Coverage provided on the code developed.
Skills, know-how and experience:
- Recognized as a technology expert in their field.
- Exceptional complex problem-solving skills, with a flair for innovative and creative thinking.
- Strong focus on customer needs and satisfaction.
- Has the ability to work independently.
- Skilled in interpreting and gathering user requirements, and translating them into technical specifications or code.
- Extensive knowledge of modern IT operations, including Cloud, Social, Mobility, IoT, Big Data, and more.
- Deep understanding of architectural best practices and patterns such as Microservices, CQRS, Event Sourcing, Domain-Driven Design, Clean Architecture.
- Proven experience in applying Test-Driven Development (TDD) methodologies.
- Proficient in multiple relevant programming languages, frameworks, and databases.
Essential:
- Bachelor's Degree/BSc Degree in appropriate field of study or equivalent work experience.
- 7 + years of professional or other practical experience.
Experience in the following technologies:
- Databases: SQL, MySQL, MongoDB.
- Azure: Azure DevOps, Azure Pipelines.
- Frameworks: .NET, .NET Core, Entity Framework.
- Backend Tech: C#.
- Frontend Tech: Angular, React.
Beneficial:
- Experience in the Agile methodology of developing software.
- Working with Agile Teams and successfully delivering Agile-based software projects.
- Experience working with DevOps, Git, JIRA, Jenkins, Automated Build Servers.
Values and Competencies:
- Get stuff done: completing tasks, and contributing to the deliverables of the team to ensure we deliver high quality products.
- Be the best you can be: investing time in learning and sharpening your skills. Teaching and sharing your unique skills with the rest of the team.
- Do the right thing: we build a culture of mutual respect and collaboration, admit to mistakes and learn from them.
- Servicing the customer: at the forefront of providing service excellence and customer satisfaction.
- Solve together: we conduct ourselves in such a way that we work harder, cooperate and be supportive of one another and contribute to the team spirit.
- Build a bridge: progress with what you have and solve a challenge.
- Add value: to tasks, interactions with colleagues and customer interactions.
- Have fun! We enjoy the work we do and the people that we are doing it with.
Direct reports and/or Stakeholders:
Influence, collaborate and co-ordinate with:
- Product Owner
- Developers
- Managers