Job Description
Full Stack Developer (Edge)
Department: Engineering
Employment Type: Permanent - Full Time
Location: Bristol, UK
Reporting To: Stephen Pope
Description
About the role
We’re looking for a Full Stack Developer to build software across our edge platform, from services running on constrained devices in the field, through the control plane that manages them, to the interfaces operators use to monitor and control systems.
For senior roles, compensation is tailored to the scope of the role and the specific experience a candidate brings. Because that can vary significantly, we do not always publish a fixed salary band. We will, however, discuss compensation openly at the first stage of the process and can share an indicative range before either side invests significant time.
Key areas of responsibility
- Building services that run on edge nodes: lightweight, event-driven, and resilient to intermittent connectivity, with careful attention to memory, CPU, and storage budgets.
- Building control-plane services that coordinate fleets of devices, manage configuration and state, and integrate with backend data and analytics systems.
- Building operator-facing web interfaces for monitoring, control, and decision support, including UIs that remain usable when underlying data is stale or partial.
- Designing and implementing APIs that work well over intermittent connections: idempotent, versioned, tolerant of partial connectivity, and clear about state.
- Wiring up streaming and messaging pipelines between edge and core, choosing the right protocol and the right semantics for each link.
- Integrating with sensors, payloads, and hardware-connected systems, often through unconventional protocols and constraints.
- Contributing to test coverage, CI/CD, and shared engineering practices that keep delivery fast and the codebase healthy.
- Working directly with users to validate that what you've built actually solves the operational problem in front of them.
Key skills, experience and behaviours
Essential
- Strong full-stack experience: comfortable building production frontends (React or similar, TypeScript) and production backend services (Go, Python, Node.js, or similar).
- Solid API design experience, both REST and event-driven, with an understanding of where each fits.
- Practical experience with message brokers, streaming, or pub/sub systems (MQTT, NATS, Kafka, or similar).
- Experience working with containers and deploying into orchestrated environments.
- Comfortable on Linux: navigating systems, debugging across the stack, reading logs that nobody curated for you.
- Sound software engineering fundamentals: clean code, automated testing, and a feel for when to optimise and when to leave it alone.
- Awareness of secure software development practices and a proactive approach to identifying and mitigating risks.
- Experience building software that handles sensitive data or operates in security-conscious environments.
- Experience building software for constrained or embedded targets (Raspberry Pi class, single-board computers, IoT, ruggedised hardware).
- Experience with offline-first or intermittently-connected applications, including conflict resolution and reconciliation.
- Familiarity with edge-style stacks: container orchestration at the edge, lightweight messaging, time-series data, telemetry.
- Experience in regulated sectors delivering complex connected systems, such as defence, national security, telecommunications, financial services, or automotive industries.
- Curious and adaptable: Our work crosses domains and you should be comfortable picking up new technologies, languages, and problem spaces.
- Ownership: You finish what you start and you care about the user.
- Pragmatic: You choose solutions that work in practice, and you know when to use the standard tool and when the problem genuinely needs something different.
- Collaborative: You share knowledge generously and you're happy to step into someone else's part of the stack when it helps.
- Resilient: You're comfortable in a fast-paced environment where requirements evolve as we learn more about the operational problem.
- Quality-driven: You take pride in building software that holds up, particularly in environments where retrying is not free.
