An established Australian technology company developing hardware integrated products for a highly regulated market is growing its engineering team and is now hiring a Software and Systems Engineer to write, integrate, and prove the software that sits between its product hardware and the people who use it. Experience in a regulated industry is highly respected for this role and a genuine advantage, but it is by no means an absolute must; strong C++ engineering on real hardware and a disciplined approach to testing matter more than a specific sector title.
The role is based in Perth, with the option of working from a small office in Melbourne for Melbourne based candidates. Day to day arrangements, including how you will access test equipment, will be worked out together.
Key Responsibilities:
- Take ownership of clearly scoped features, size the effort involved, and keep the team informed of progress and any blockers as they arise.
- Turn product needs into precise, verifiable requirements and short design write ups that others can pick up and follow.
- Spend time at the bench bringing software and electronics together, using oscilloscopes, analysers, and other instruments to see what the system is really doing.
- Write and refine C++ and C for the parts of the system that interface directly with the electronics and move data through the product.
- Track down intermittent faults, latency problems, and corrupted or missing data, isolating the cause before changing the code.
- Use Python to automate repetitive checks, analyse captured data, and speed up the team's daily work.
- Build automated tests that exercise the software both in isolation and against the real hardware, including deliberately introducing faults to prove it fails safely.
- Keep the codebase healthy through peer review, automated build pipelines, static code checking, and version controlled releases, and keep the records a formal quality system expects.
- Collaborate with electronics, embedded, and quality colleagues, sharing your reasoning and picking up new areas of the system as the product evolves.
Requirements:
- Tertiary qualification in electrical, electronics, mechatronic, or software engineering, or computer science, or comparable hands-on industry experience.
- A strong, proven record of writing production C++ or C close to the hardware, with the deep debugging instincts to work through problems that span software, firmware, and electronics.
- Confidence writing multithreaded code that is cleanly structured, uses memory carefully, and handles failure gracefully.
- A background on products where hardware and software were developed together, including defining interfaces and tracing requirements through to verification.
- Day to day familiarity with Git, peer review, automated builds, and unit testing, and a belief that good test evidence is part of the job rather than an afterthought.
- Self directed enough to plan your own work, coordinate with others, and see changes through a controlled release process.
- Clear, precise written and verbal communication, especially when documenting requirements, design decisions, and test results for a mixed technical audience.
Desirable but not essential:
- Experience in medical devices, aerospace, defence, rail, automotive, or another regulated industry is highly respected and a genuine plus, though by no means an absolute must.
- Hands-on experience with data acquisition, filtering, or signal processing.
- Experience shipping products built on embedded Linux.
- Experience with timing sensitive or real time software.
- Exposure to Qt.