Senior Software Development Engineer in Test
Project description
We build an in-house trading platform covering order management, execution, and data analysis. It runs on a distributed, event-driven backend. We're hiring a hands-on SDET to own backend test automation: service, integration, contract, data, resilience and performance testing across the platform. You'll co-architect and co-own a unified testing framework with our UI SDET. It covers UI, API, messaging, data and performance tests in one place.
Responsibilities
- Co-architect and co-own, with our UI SDET, a unified testing framework that covers every area we test: ◦ Shared foundations: fixtures, test data, configuration, environments and reporting are shared across REST, WebSocket, Kafka, database, performance and UI suites. ◦ Cross-layer scenarios: one scenario can follow a workflow from the UI through services and events to the database. ◦ One quality view: results from every suite feed a single view of release quality.
- Design and build automated service, integration and contract tests for REST APIs, WebSocket services, and Kafka producers and consumers.
- Test event-driven flows end to end: message ordering, idempotency, at-least-once and exactly-once semantics, replays, offset handling, dead-letter queues, and schema evolution (Avro, Protobuf, JSON Schema, Schema Registry).
- Build harnesses with controlled test data and service virtualization so suites run consistently and can be repeated.
- Design and build isolated, on-demand test environments on Linux and AWS: ◦ Lifecycle: full service stacks (services, Kafka, databases) are created per branch or per run, start with seeded data and known state, and are torn down automatically. ◦ Isolation: test runs don't interfere with each other or with shared environments. ◦ Infrastructure: the environments are defined as code, with attention to cost.
- Write data-validation tests across relational and analytical databases. Cover reconciliation and aggregation correctness.
- Cover resilience and failure modes: broker and consumer outages, network partitions, timeouts, throttling, slow consumers and backpressure, reconnects, and authentication failures.
- Own backend performance testing: ◦ Latency and throughput: design and run load, stress, soak and spike tests on services, messaging pipelines, streaming and query APIs. ◦ Baselines and regressions: set baselines and service-level targets (p50/p99 latency, throughput, consumer lag), and catch regressions in CI. ◦ Bottlenecks: profile them down to the CPU, GC, query or network layer. ◦ Database queries: track query performance on analytical stores. Know how query shape and data volume drive response time.
- Own backend test execution in CI/CD: parallel runs, scheduled regressions, environment setup and teardown, and release quality gates.
- Make failures diagnosable: structured logs, distributed traces (OpenTelemetry), correlation IDs across services, and clear reports.
- Work with backend engineers, infrastructure, business analysts and traders to define and automate critical business workflows.
- Use AI-assisted tools where they speed up writing tests and analysing failures.
SKILLS
Must have
- 5+ years of backend or service test automation, including framework design.
- Strong Python (pytest, requests, asyncio, confluent-kafka or similar) for test frameworks, tooling and data validation.
- Strong Java (JUnit 5, REST Assured, AssertJ, or similar) for testing JVM services.
- Working TypeScript and Node.js skills: contributing to UI and cross-layer suites in the shared framework, and Node-based tooling (k6 scripts, Playwright API tests).
- Hands-on Kafka experience: producing and consuming in tests, consumer groups, partitions and offsets, serialization and schema registry, and Kafka Streams or Connect.
- Solid networking fundamentals: TCP/IP, HTTP/1.1 and HTTP/2, WebSockets, TLS, DNS, load balancers, latency and packet loss. Able to debug with tcpdump/Wireshark, curl and similar tools.
- Strong SQL and database experience (PostgreSQL, SQL Server, or similar) for test data setup, verification and cleanup. Familiarity with columnar or analytical databases.
- Hands-on performance and load testing: ◦ Tools: k6, Gatling, JMeter or Locust, including Kafka throughput benchmarking. ◦ Profiling: JVM tuning and profiling (GC, JFR, async-profiler) or Python profiling. ◦ Analysis: reading latency distributions and percentiles correctly, including coordinated omission.
- API, authentication and contract testing: OAuth/JWT flows, payload and schema validation, and service virtualization (WireMock, MockServer, Hoverfly).
- Experience building isolated test environments: ◦ Linux: strong command-line skills, with shell scripting, systemd, processes, networking and performance troubleshooting. ◦ Containers: Docker, Docker Compose and Testcontainers. ◦ AWS: EC2, ECS or EKS, S3, IAM, VPC, MSK or RDS, and CloudWatch. ◦ Infrastructure as code: Terraform, CloudFormation or CDK.
- CI/CD with Azure DevOps or Jenkins, and Git.
- Strong reliability habits: isolated tests, controlled retries, failure-mode testing, and triage of flaky tests.
- Clear communication and good documentation.
Nice to have
• Trading or buy-side experience: OMS/EMS, the FIX protocol, market data, positions, allocations, or risk. • kdb+/q, or other time-series databases used for tick data. • Contract testing with Pact. Property-based testing (jqwik, Hypothesis). • Kubernetes and Helm. • Chaos and fault-injection tools (Toxiproxy, Chaos Mesh). • Observability tools: OpenTelemetry, Grafana, Prometheus. • Experience with large-scale distributed systems.
Required Skills
Required Languages
🇬🇧 English