Resolve complex customer problems related to Ubuntu, Kernel, Ceph, OpenStack, or Kubernetes and other open source software
Maintain a close working relationship with Canonical's field, support and product engineering teams
Participate in upstream communities
Develop bug fixes, backport patches, and work with upstream for inclusion
Review code produced by other engineers
Demonstrate good judgment in technical methods and techniques
Prioritize work and manage your time effectively against those priorities
Participate in team discussions to improve processes, tools, and documentation
Maintain clear, technical and concise communications
Work from home and travel internationally up to 10% of work time for team meetings, events and conferences
What we are looking for in you
Professional experience as a software engineer
Background in Computer Science, STEM or similar
Strong experience with Linux, and at least one of the following:
Ceph, OpenStack, Kubernetes or other cloud technologies
Strong development-level experience with at least one of Python, Go, C or C++ on Linux
Ability to troubleshoot with debugging tools like gdb
Familiarity with git source code repositories and branches
An exceptional academic track record
Willingness to travel up to 4 times a year for internal events
Additional Skills That You Might Also Bring
You love technology and working with brilliant people
You are curious, flexible, articulate, and accountable
You value soft skills and are passionate, enterprising, thoughtful, and self-motivated
You have interest in, and experience with most of the following: Ubuntu Linux - kernel or userspace, Kubernetes, OpenStack, Ceph, QEMU/KVM, LXC/LXD, Python, Go, C, Postgresql, Mongo, Debian packaging, distributed systems
Desired candidate profile
1. Software Maintenance and Support
Bug Fixing: Identify and resolve software bugs, performance issues, and security vulnerabilities in existing software products. Ensure that bugs are reported, tracked, and addressed in a timely manner.
Code Review and Refactoring: Regularly review and refactor existing code to improve readability, performance, maintainability, and scalability, especially as the software continues to grow and evolve.
Patch and Version Management: Apply and deploy software patches and updates to keep products secure and up-to-date with industry standards. Manage version control, ensuring that releases are stable and reliable.
Legacy System Support: Support older software systems or legacy products, ensuring they continue to function correctly in modern environments or when integrated with new technologies.
2. Collaboration with Other Teams
Cross-Functional Collaboration: Work closely with product management, quality assurance (QA), operations, and customer support teams to understand issues reported by end-users and resolve them.
Customer Feedback Analysis: Collect and analyze feedback from customers, support teams, or internal stakeholders to identify recurring issues or features that need improvement.
Knowledge Sharing: Collaborate with other engineers to share knowledge about past issues, solutions, and best practices. Help train junior team members or new hires on maintaining software products.
3. Software Performance and Optimization
Performance Tuning: Identify performance bottlenecks and work on optimizing code and system performance, whether through algorithm improvements, better resource management, or architectural changes.
Scalability Enhancements: Work on making the product more scalable by ensuring it can handle increasing workloads or integrate smoothly with new technologies.
System Monitoring and Diagnostics: Implement and maintain system monitoring tools to proactively identify performance or reliability issues. Use diagnostic tools to troubleshoot and resolve problems in production environments.
4. Documentation and Technical Support
Technical Documentation: Write and maintain clear documentation for the software, including code-level comments, user manuals, troubleshooting guides, and deployment instructions.
Incident Management: Investigate and resolve production incidents, including working with incident response teams to ensure system uptime and data integrity.
Customer Support Integration: Occasionally interact with customer support teams to provide insights into solving customer-reported issues and assisting in the resolution of complex technical problems.