Iraq, Baghdad
Full time
Onsite
Angular
About this role
This position owns large software components. Independently leads the design and implementation of components that are part of larger software systems, understanding and following the software architecture and best practices and guidelines defined at company level. Mentors and coach others. Contributes to defining software development practices and improvements at the team level.
Qualifications
• Expert in at least one of the following programming language (TypeScript, JavaScript, AngularJS).
• Expert understanding of computer science fundamentals, including algorithms, problem-solving, and object-oriented analysis and design
• Expert in understanding and applying design patterns, principles and industry practices
• Expert knowledge of debugging techniques
• Expert knowledge of code quality principles and practices (e.g. refactoring, clean code, etc.)
• Basic understanding of architectural design principles, patterns and best practices
• Practical experience in at least 1 project building distributed (multi-tiered) systems
• Basic understanding of scalable computing systems and software architecture
• Basic prototyping skills
• Advanced knowledge of NFRs (Non-Functional Requirements)
• Advanced knowledge of code quality concepts, metrics and tools
• Expert knowledge of TDD, unit and integration testing and tools
• Basic knowledge of software configuration management processes and patterns
• Advanced understanding of test coverage concepts, metrics and benchmarks
• Advanced knowledge of technical documentation methods and tools (e.g. EA, API documentation models, etc.)
• Advanced understanding of SDLC, Agile methodologies and roles in a software development team
• Advanced understanding of software estimation tools and techniques
• Excellent written and verbal communication skills with both technical and nontechnical audience
Responsibilities
• Engage stakeholders and analyze business domain to identify functional and technical requirements, software constraints and design solutions performing trade-off analysis.
• Create and review functional, non-functional and technical documentation, following companywide standards, guidelines and templates, identifying omissions.
• Adapt and make sure that the written documentation is understood by different audiences (business vs. technical).
• Analyze, identify, define, document and implement NFRs (Non-Functional Requirements), (e.g. security, scalability, performance, etc.).
• Contribute to the project backlog by making sure that all non-functional, quality and technical requirements are properly documented, estimated and planned.
• Estimate effort for tasks applying agile project estimation methods and techniques, and review and validate estimates of other team members.
• Identify and analyze technical risks and mitigation approaches, making sure they are included in the estimates, plan and project backlog.
• Tailor existing design patterns according to the implementation needs, simplifying designs as needed and following the project architecture and design guidelines.
• Create design blueprints for the team.
• Independently implement complex technical solutions with little or no supervision, covering all functionality flows and applying industry and company best practices and guidelines (e.g. SOLID, design patterns, clean code etc.).
• Document code through comments to support software maintenance.
• Debug complex issues and support team members in debugging activities.
• Identify refactoring needs and drive and implement refactoring activities.
• Review code of other team members.
• Design integrations and identify and introduce existing code libraries into the project.
• Coach and guide other team members, review and validate designs, code and estimates and ensure they meet company standards.
• Create software prototypes as needed.
• Support Software Test Engineers in defining manual and automated test cases for integration scenarios, and participate in system acceptance.
• Design and implement unit and integration tests, following project and company practices, guidelines and standards and covering primary, alternative and error flows.
• Follow code coverage metrics and conventions when writing unit and integration tests.
• Make sure developed features have been properly deployed in different environments.
• Define software configuration and support DevOps Engineers in integrating configuration of developed software in the DevOps pipeline.
• Use standard tools for versioning and source control and configuration management, and contribute to defining project branching strategy.
• Independently set up complex project development environments, following the project environment design guidelines.
• Support software maintenance by troubleshooting and identifying root causes for complex issues, performing technical impact analysis and validating technical solutions.
• Support software training and handover activities, developing operational documentation, software help-desk plans and training materials for operational support personnel, as instructed by the team leadership.
• Support with technical onboarding of new team members.
• Follow the project agile process.
• Test and introduce new technologies, frameworks and tools to the project.
• Follow project and organization standards for designs and code.
• Set and monitor project-level quality KPIs following company standards and guidelines, collecting and analyzing quality data and implementing corrective actions if necessary.
• Keep up to date with technological advances in the field.
• Report work and task progress to the Project Manager, following project processes and reported frequency.
Skills
Core Competencies:
• Passion & Initiative
• Creativity & Innovation
• Customer Service Orientation
Job Related Competencies:
•Technical Expertise: Advanced Software Life Cycle Skills
•Automation & Utilizing Technology
•Creative Thinking
•Project Management