Required Skills: Python, C/C++, Go, JavaScript, TypeScript,
Job Description
In this role, you will work with systems, FPGA, hardware, test, and integration engineers to turn engineering needs into reliable software capabilities. You will build practical software that runs close to real hardware, supports automated test workflows, improves developer productivity, and enables repeatable integration across lab benches and payload programs. This is a mid-level software engineering position for someone ready to own well-defined features, contribute to technical design, and grow into broader platform ownership within TIDES.
Key Responsibilities
- Design, develop, test, and maintain software applications, services, scripts, and automation frameworks that support TIDES SSI and DOTI capabilities
- Build and improve CI/CD pipelines in GitLab, including automated builds, tests, packaging, deployment workflows, and runner-based execution
- Develop software interfaces and utilities that connect lab systems, test equipment, data services, payload hardware, and engineering workflows
- Support deployment and configuration of containerized services using tools such as Docker, Kubernetes, Helm, or related technologies
- Write automated tests, troubleshoot software defects, and improve code quality through peer review, static analysis, and disciplined debugging
- Collaborate with systems, FPGA, electrical, hardware, and I&T engineers to understand requirements and deliver practical software solutions
- Investigate integration issues across software, Linux systems, networks, containers, pipelines, and hardware-in-the-loop test environments
- Create and maintain clear documentation for software designs, APIs, deployment steps, test workflows, release notes, and user guidance
- Identify opportunities to improve automation, reliability, repeatability, and developer experience across shared test infrastructure
Preferred Skills & Experience
- Bachelor's degree in Computer Science, Computer Engineering, Electrical Engineering, Systems Engineering, or a related technical field
- Mid-level software engineering experience developing maintainable applications, services, tools, or automation in Python, C/C++, Go, JavaScript/TypeScript, or a similar language
- Strong software fundamentals, including data structures, object-oriented design, testing, debugging, version control, and code review
- Experience building automated test suites using PyTest or similar frameworks and applying test-driven or test-informed development practices
- Experience with Git-based workflows, including branching, merge requests, peer review, issue tracking, and release coordination
- Experience developing and maintaining CI/CD pipelines using GitLab CI, GitHub Actions, Jenkins, or similar platforms
- Comfort working in Linux environments such as RHEL or Ubuntu, including command-line tools, shell scripting, services, logs, and package management
- Familiarity with containerized application development and deployment using Docker, Kubernetes, Helm, or related tools
- Working knowledge of networking concepts such as Ethernet, subnets, routing, firewalls, ports, DNS, and lab network isolation
- Experience integrating software with hardware, lab instrumentation, embedded systems, APIs, databases, or distributed services is a plus
What Sets You Apart
- You see this as a software engineering role first, while staying curious about the hardware, networks, and test systems your code supports
- You enjoy building practical tools that make engineering teams faster, more reliable, and more consistent in the lab
- You write clean, readable, well-tested code and care about long-term maintainability, not just getting a script to run once
- You can own a feature or tool from requirements through implementation, test, documentation, and user feedback
- You are comfortable debugging across software, containers, Linux systems, CI/CD pipelines, network services, and hardware-adjacent interfaces
- You communicate clearly with engineers from other disciplines and can translate their integration needs into usable software capabilities
- You ask good questions, work through ambiguity, and know when to pull in senior engineers or domain experts
- You identify opportunities to apply automation and AI tools to improve engineering efficiency, test repeatability, and software quality