Senior C++ Software Engineer
This position is listed on behalf of a partner company, which manages all applications and next steps. Our partner is looking for a Senior C++ Software Engineer based in Spain.
Join an innovative engineering project focused on developing advanced embedded vision systems and intelligent traffic management solutions. In this role, you will design and build high-performance software components using Modern C++ within a ROS2-based architecture. You will contribute to a sophisticated sensor-fusion platform designed to address complex traffic and junction scenarios, where reliability, precision, and real-time performance are essential. Working alongside experienced developers, architects, and technical stakeholders, you will help shape software architecture and deliver scalable, maintainable solutions. This opportunity combines challenging systems programming with practical applications in robotics, embedded systems, and intelligent transportation technology. You will also have the autonomy to drive technical improvements, share your expertise, and support the development of other engineers.
Accountabilities
-
Software Development: Design, develop, and maintain core application components using Modern C++ (C++17/20) within an established ROS2-based architecture.
-
Sensor Integration: Integrate multiple sensors, external interfaces, and third-party components into a complex embedded vision and sensor-fusion platform.
-
Distributed Systems Engineering: Build component-based applications using publish/subscribe (pub/sub) patterns and message-based communication to support reliable data exchange across distributed systems.
-
Architecture and Technical Design: Contribute to software architecture and design decisions, assess technical alternatives, and implement reusable, scalable, and maintainable solutions.
-
Software Quality and Testing: Develop and maintain unit and integration tests to validate functionality, improve reliability, and ensure system stability.
-
Performance Optimisation: Identify bottlenecks and optimise runtime performance, memory usage, concurrency, and resource utilisation in performance-critical applications.
-
Debugging and Troubleshooting: Investigate and resolve complex software issues in Linux environments using debugging, profiling, and performance-analysis tools.
-
Development Environment Management: Maintain container images, Docker configurations, and build environments for development and target platforms.
-
Code Reviews and Technical Collaboration: Participate in code reviews, provide constructive feedback, and collaborate with developers, architects, and project stakeholders to maintain high engineering standards.
-
Technical Leadership and Mentorship: Take ownership of complex development tasks, contribute to technical decision-making, and guide less experienced engineers through knowledge sharing and mentoring.
-
Continuous Improvement: Identify opportunities to improve development workflows, software quality, system reliability, and engineering practices across the project.
-
Professional Experience: At least 5 years of professional software development experience, with strong expertise in C++ and the development of complex software systems.
-
Modern C++ Expertise: Advanced proficiency in C++17/20, including memory management, multithreading, concurrency, and performance-critical programming.
-
ROS2 and Robotics: Practical experience developing robotic applications with ROS2, including an understanding of its architecture, components, and communication mechanisms.
-
Sensor Integration: Hands-on experience integrating multiple sensors into complex software systems, preferably within embedded vision, robotics, or sensor-fusion applications.
-
Distributed and Component-Based Systems: Solid understanding of distributed architectures, component-based software design, and pub/sub or message-based communication patterns.
-
Software Architecture: Strong knowledge of software design principles, architectural best practices, and approaches to building maintainable and reusable applications.
-
Testing and Quality Assurance: Experience designing and implementing unit and integration tests for reliable, production-quality software.
-
Linux Development: Strong experience working in Linux environments, including debugging, profiling, performance analysis, and troubleshooting.
-
Version Control and Collaboration: Proficiency with Git and collaborative software development workflows, including code reviews and shared development practices.
-
Containerisation: Hands-on experience with Docker and containerised development and build environments.
-
Analytical and Problem-Solving Skills: Strong analytical thinking, systematic debugging skills, and the ability to resolve challenging technical problems independently.
-
Ownership and Communication: Ability to take responsibility for complex engineering tasks, make informed technical decisions, collaborate effectively, and communicate clearly in English.
-
Nice to Have: Experience developing ROS2 nodes and using Python for tooling, testing, or non-critical ROS2 components.
-
Additional Advantages: Familiarity with Yocto, Embedded Linux, Kubernetes, Helm, CI/CD pipelines such as Jenkins or GitLab CI, real-time operating systems, and real-time programming concepts.
-
Domain Knowledge: Experience with machine learning concepts for perception and decision-making, or previous work on traffic management, traffic monitoring, or traffic enforcement systems, would be an advantage.
-
Flexible Working Arrangements: Choose from remote, office-based, or flexible working formats, subject to role and location requirements.
-
Competitive Compensation: Receive a competitive salary and comprehensive compensation package.
-
Personalised Career Development: Access career growth opportunities tailored to your professional goals and technical interests.
-
Professional Learning Opportunities: Benefit from mentorship programmes, technical talks, training sessions, and centres of excellence.
-
Knowledge-Sharing Communities: Participate in active technical communities that encourage collaboration, knowledge exchange, and continuous learning.
-
Education Support: Access education reimbursement to support ongoing professional development.
-
Employee Recognition: Receive anniversary gifts and recognition of important career milestones.
-
Team-Building Activities: Take part in corporate events and team activities designed to strengthen professional relationships.
-
Additional Local Benefits: Access location-specific benefits depending on the applicable employment arrangement.