Roles and responsibilities
- 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.