Job Title:
Intermediate Software Developer
Reports to:
Manager, Software Development
Based in:
Ottawa, ON
Term:
Full Time
About the role:
This is a role for a highly skilled Intermediate Software Developer to join our team, focusing on building and extending the next generation of scientific instrumentation software. The problems we solve are diverse, requiring you to work across our entire software ecosystem.
The software we develop spans low-level embedded firmware, sophisticated applications running in customer data centers, and scalable cloud services. Consequently, we value adaptability and a polyglot mindset. If you are a smart and creative developer with a passion for software development technologies, and are eager to learn new programming languages or frameworks to solve the right problem with the best technology, you will thrive here.
Responsibilities:
As an Intermediate Software Developer, you will be deeply involved in the entire software lifecycle, from concept to deployment, spanning multiple technology stacks.
- Full-Stack Development & Implementation: Design, implement, and test robust new features for our instrumentation, data center, and cloud-based software products that manage the acquisition, storage, transmission, and monitoring of Earth data.
- Problem Solving & Optimization: Analyze and solve complex technical challenges related to system reliability, performance tuning, and optimizing system usability and data transmission across diverse network environments.
- Technology Selection & Application: Actively participate in the selection and application of appropriate technologies (e.g., Rust for embedded, Java for data center) to deliver the best technical solution for a given problem. Willingness to learn new development technologies is essential.
- Quality Assurance & Mentorship: Initiate and participate in thorough code reviews, provide constructive feedback, and mentor junior developers to ensure maintainable, high-quality code and design.
- Project Execution: Deliver features through concept, design, implementation, and testing. Assist senior developers and managers in estimating effort, identifying risk, and defining edge test cases.
- Operational Support & Improvement: Actively investigate and resolve technical issues escalated to R&D. Proactively identify and contribute to improvements in our processes, quality, and technologies.
Requirements: Required Technical Skills- Experience: 3-5 years of professional software development experience.
- Technical Versatility: A proven ability to achieve expert-level proficiency in a core language (e.g., C++, Java, Rust, or similar), and a demonstrated eagerness to adopt new languages based on project need.
- Foundational Knowledge: Solid working knowledge of networking technologies, web-based communication protocols, and relational databases (e.g., PostgreSQL, MySQL).
- Software Development Workflow: Proficient in standard development tools, including version control (Git), task tracking (Jira), unit testing frameworks, and continuous integration/deployment (CI/CD) systems.
- Tools: Working knowledge of build tools (Maven, Gradle, Yocto, etc.).
- Education: Bachelor's degree in Software Engineering, Computer Science, Electrical Engineering, or equivalent practical experience. Fluent in English: verbal and written.
Key Mindset and Attributes- Adaptability & Curiosity: A genuine, long-term interest in software development and the continuous exploration of new tools and technologies; you view learning a new language as an exciting challenge.
- Systemic Thinking: Passionate about creating elegant and scalable architectures and designs.
- Collaborative & Communicative: Approachable, willing to openly share knowledge, and a creative thinker who enjoys discussing ideas.
- Customer Focus: Focused on understanding the customer use cases and what's behind them to help provide an outstanding user experience in your designs.
Assets:- Comfortable working in a Linux environment.
- Prior hands-on experience with Rust-based software development.
- Working front-end development experience with JavaScript-based frameworks (e.g., Svelte, Typescript/Angular).
- Experience with cloud infrastructure provider solutions (e.g., Amazon Web Services) and container orchestration using Kubernetes.
Salary Information:
The expected salary range for this position is $90,000 to $115,000, plus a corporate discretionary bonus. The determination of an applicant's base salary within this range is based on the individual's skills, competencies, and experience for the position.
Please note: This job posting is for an existing vacancy with Nanometrics. As part of our commitment to a comprehensive and unbiased hiring process, we may employ artificial intelligence (AI) to help us analyze applications and identify qualified candidates. This use of AI is intended to support, not replace, human decision-making.