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