Job Description
Job Requirements
• Contribute to the elaboration of product/system specification & architecture, in collaboration with cross-functional teams
• Define the software requirements specifications
• Define the functional requirements, operational requirements, interfaces requirements and the requirements linked to performance, safety, cybersecurity, Reliability Availability and Maintainability (RAM)… constraints
• Ensure that all the requirements can be verified (testability, …)
• Ensure the traceability of the software requirements through the development cycle
• Define the software architecture
• Elaborate the functional and structural breakdown into software components
• Allocate the requirements to the software components
• Define the interfaces between the software components
• Define the dynamical behavior of the software
• Validate the feasibility of the solution: model simulation, mock-up
• Take main technical choices for software development
• Select development tools, methodology (ex: UML, …), programming languages, coding strategy and coding rules…, strictly following internal process/methods & tools recommendations
• Contribute to the selection of the execution environment (processor, operating system, middleware, basic software…), together with the product architect, system engineering manager and hardware architect
• Designing and implementing DevOps strategies:
This includes creating scalable frameworks (GitLab CI/CD components), integrating tools (compilation, SCA, SATS, etc) and processes, and aligning DevOps practices with business objectives.
• Building and maintaining CI/CD pipelines:
Automating the build with powershell, python; automatic deployment processes to enable rapid and reliable software releases.
Managing cloud-based infrastructure: Overseeing the deployment and management of cloud infrastructure using tools like Terraform and Kubernetes.
• Collaborating with other teams: Working with development, operations, and security teams to ensure smooth and secure software delivery.
• Monitoring and optimizing system performance: Ensuring the system is running efficiently, is scalable, and is secure.
• Guiding and mentoring junior engineers: Helping to foster a culture of continuous improvement.
Implementing Infrastructure as Code (IaC): Defining and managing infrastructure using code to bring agility and consistency.
• Ensuring security: Implementing security measures, identity management, and compliance controls.
• Arbitrate and validate major software design choices
• Mentor developers and provide technical leadership within the team
• Perform software/software integration, together with the software designers
• Perform hardware/software integration, together with the hardware architect
• Specify, design, prepare and perform tests and verifications of his/her deliverables
• Sustain the software
• Organize the software Design Reviews
• Keep informed of the evolution of technologies through techno watch
• Contribute to standardization by reusing existing solutions or by defining reusable solutions, including COTS
• Apply and ensure application of processes and standards
• Contribute to continuous improvement (RoE: Return of Experience, process…)
• Organize and lead software development activities so that to ensure QCD commitment, till the end of software development:
• Coordinate software development activities (software design - including activities performed by subcontractors)
• Participate to the product CCB (Change Control Board) for software part (i.e. manage commitment and change to software requirements)
• Alert the reporting structure for any event that could impact software development QCD commitments
Work Experience
Mandatory:
• Proven experience as a Software Architect with a strong portfolio of successful projects.
• Proficiency in Python and C programming languages.
• Knowledge on communication protocols [Ethernet, TCP/IP, UDP, NTP, etc.]
• Knowledge of software development methodologies and lifecycle.
• Understanding of agile development practices.
• Familiarity with version control systems, such as Git.
• Knowledge of user interface design principles for desktop applications.
Experience in performance optimization and code refactoring
Desirable:
• Knowledge of software development methodologies and lifecycle.
• Experience with railway signaling software or other transportation-related systems.
• Vital or secure software development
Knowledge of databases [MySQL, InfluxDB, MongoDB, NoSQL, Prometheus, RethinkDB or Redis], and communication protocols [Profibus or Modbus] would be a plus.
Competencies & Skills
• Strong understanding of CI/CD: Proficiency in setting up and managing continuous integration and continuous deployment pipelines using Gitlab; should be knowing configuration of CI/CD components for various activities like code compilation, SCA, unit test, antifactory management, component test, integration test, performance tests.
• Cloud computing expertise: Knowledge of different cloud services and platforms (e.g., AWS, Azure, Google Cloud).
• Containerization and orchestration: Experience with containerization technologies (e.g., Docker) and orchestration platforms (e.g., Kubernetes).
• Automation and orchestration tools: Familiarity with tools like Terraform, Ansible, Puppet, and Chef.
• Monitoring and logging: Experience with tools for monitoring and logging system performance and activity.
Security knowledge: Understanding of security best practices and vulnerabilities.
Problem-solving and communication skills: Ability to identify and resolve technical issues and effectively communicate with different teams
• Agile, Inclusive, Responsible
• International mindset
• Strong problem-solving skills and ability to think critically and independently.
• Excellent English communication skills, both written and verbal.
• Ability to work effectively in a collaborative team environment and lead projects autonomously.
• Detail-oriented with a commitment to delivering high-quality software solutions.
• Ability to work with remote collaborators