Software Architect
Educational Requirements
Mandatory:
- Engineering degree in Computer Science, Software Engineering, or a related field.
Desirable:
- Masters degree
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 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
- Agile, Inclusive, Responsible
- International mindset
MAIN RESPONSABILITIES
- 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
- 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
- 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)