Responsibilities:
• Identify and meet the information needs of both stakeholders and team members.
• Ensure that the team works on the development of the deliverables required for the project with the expected quality.
• Ensure that the equipment keeps the code tests up to date with the changes made by the developed components.
• Determine data storage, processing and transmission needs according to analyzed requirements.
• Ensure that the equipment meets agreed development standards and processes.
• Analyze the high-level requirements of the project and collaborate in the definition and analysis of the specific requirements.
• Along with the rest of the team, define the development process.
• Coordinate with the person in charge of architecture or practice leader the definition of development standards based on design principles and best practices to ensure the fulfillment of non-functional requirements of quality, efficiency and maintainability.
• Perform knowledge transfer to other members of the project team and client vendors.
• Lead the analysis of defects in the system to find their causes and correct them.
• Lead the process of analysis of project requirements.
• Design and implement unit, integration and system testing.
• Direct the design of software components integrated into the system under construction or maintenance that implement the analyzed requirements.
• Participate in the implementation of these components.
• Lead and participate in estimating the effort needed to implement the analyzed requirements.
• Direct and implement the integration of developed components with the rest of the system (Front End – Back End integration, APIs).
• Be a reference for the team in peer review of the code of their teammates (peer review).
• Define and follow processes and standards for handling code in repositories.
• Verify the fulfillment of the requirements and the correct functioning of the components developed as specified.
Requirements:
• Advanced knowledge in:
• Object-oriented, functional, procedural and asynchronous programming paradigms.
• Software engineering processes (development cycle and quality control).
• Participation in agile software development methodologies: SCRUM, Kanban, among others.
• Software quality assurance (unit and integration testing).
• Design patterns.
• Development best practices to ensure efficiency, quality and maintainability.
• Best practices and mechanisms for deployment.
• Security, authentication and authorization mechanisms.
• Integration of services and software components.
• Error handling.
• Internationalization and accessibility.
• Responsive Design.
• Real-time data management.
• Configuration management.
• Experience with systems based on micro services.
• Multitenancy.
• Processes / background / jobs / attendance / Messaging (queues, bus, subscriber).
• Documentation (design diagrams, README.md, API, wiki, etc.)
Languages:
• Advanced knowledge of at least two of the following languages: Java, Spring, Hibernate, React.
• Advanced knowledge of markup languages: HTML, XML, JSON, YAML.
• Knowledge of CSS and processors such as SASS/LESS
• Knowledge of SQL language.
• Experience with at least 2 modern application development frameworks: NodeJs, Express, NestJS, Spring, Rails, NextJS, Django, Flask, .Net Core, React, Angular, Vue, or similar.
Tools:
• Advanced POSIX shell handling.
• Relational and non-relational databases. (Postgres, MySQL, Mongo, Firebase, Dynamo DB).
• Code management tools (Source Control).
• Dependency management tools such as NPM, Yarn, Maven, Gradle.
• Build Managers such as Grunt, Gulp, Webpack, Maven, Gradle.
• Precompilers such as Babel, TypeScript, CoffeeScript and Flow.
• Tools for managing continuous integration processes such as Travis, Jenkins and CircleCI.
• Code management processes in repositories such as GitFlow and GitHub Flow.
• Virtualization and Containerization.
• Experience in cloud computing and its services (AWS, Azure, GCP).
Academic Training:
• Technician or bachelor in Computer Engineering, Computer Science and related, or equivalent level of knowledge demonstrated.
• Certification of Scrum Fundamentals. (desirable)
Language:
• Technical and conversational English level C1 according to the Common European Framework.
Experience:
• Minimum 5 years of experience in software engineering (at least one year as Senior Developer)
• 2 years of experience leading software projects.