The Senior Software Engineer will be part of a talented software team and will be responsible for software development and operational support activities while providing expertise in the full software development lifecycle, from concept and design to configuration management and testing.
He/She will design, test and evaluate computer software applications.
Duties of a senior software engineer include:
Key Responsibilities
• Analyze, design, coordinate and supervise the development of software systems.
• Analyze system specifications and translate high level requirements into functional requirements to perform the design, development, testing, and maintenance of software from inception to the production system.
• Design and develop large scale applications for critical infrastructure systems, delivering high-availability and performance.
• Contribute in all phases of the development lifecycle.
• Write well designed, testable and efficient code.
• Be responsible for analysis of programs including performance, diagnosis and troubleshooting and
designing solutions.
• Be responsible for the development of new programs, analyze current programs and processes, and make recommendations which yield a more cost effective product.
• Support continuous improvement by investigating alternatives and technologies and presenting them for architectural review.
• Document code consistently throughout the development process by listing a description of the program, special instructions, and any changes made in database tables on procedural, modular and database level.
• Be responsible for adopting and using tools and equipment involved in performance of essential functions of programming including measuring instruments
• Communicate with system engineers and manufacturer's technical staff regarding programming needs and performance.
• Provide assistance to testers and support colleagues as needed to determine system problems.
• Software tool selection, installation and configuration for development, integration and production environments.
• Provide recommendations to management concerning issues of programmer productivity and software development management.
• Make presentations to customer, client and professional peers.
• Maintain strong and positive relationship with the customer and suppliers.
• Work as a member of an Agile team
Skills, Experience and Qualifications
• Masters’ degree in Engineering (Telecommunications, Electronic, ICT).
• Min. 3 years’ experience in the design and development of complex software architectures.
• Fluent in Italian and English.
• Proven hands-on experience with Web Application development (more than 3 years)
• Knowledge of Object Oriented analysis and design using common design patterns
• Experience with test-driven development
• Required strong knowledge of:
- Coding skills in Java;
- Git;
- Angular;
- Spring (Web and Security);
- Docker;
- RDBMS SQL (Percona, MySQL, Microsoft SQL Server Etc.);
• A good knowledge of one or some of the following points enforce the profile:
- Linux OS;
- WebServices/RestServices development (SOA, REST, XML, JSON);
- Modular application and multithreading application development;
- Networking;
- NodeJS;
- OSGi, JPA;
- JUnit;
- Typescript/Javascript;
- CSS;
- Bootstrap;
- Kubernetes;
- Ansible;
- Gitlab/Pipeline;
- Helm;
- Kafka;
• Nice to have knowledge of:
- Standard protocols such as SNMP, Modbus, OPC, HTTP, etc;
- Spark;
Drools;
- NGRX;
- Material;
- Karma;
- Karate;
- SonarQube;
- GWT;
- Rook/Ceph;
- Velero;
- Prometheus;
- ClickHouse;
- Argo;
- Sealed-Secrets;
- Keycloack (Oauth2/oidc);
- Jasper;
- Python;
- Bash;
• Good interpersonal skills and communication skills, including the ability to work in an Agile team environment
• Ability to manage Customer and Suppliers relationships and to work in an international environment.
• Availability to travel.