Back to jobs

Amdaris
Actively hiring
Senior Kotlin Developer
- Workplace
- Remote
- Commitment
- Full-time
- Seniority
- Senior
- Posted
Location
Chișinău, Moldova
This is a senior individual contributor role focused on building the Android presentation layer for drone pilot software. You will own the interface, including live telemetry, video, mission state, and controls, and co-own the shared Kotlin Multiplatform core. You will shape the interface design in the absence of a dedicated designer, and validate on real hardware through field testing.
Responsibilities
- Build and own the Android presentation layer in Kotlin and Compose: flight UI, telemetry displays, video, mission planning and review.
- Shape the interface itself — layout, interaction, information hierarchy — in the absence of a dedicated designer.
- Co-own the shared Kotlin Multiplatform core alongside the rest of the team: domain model, protocol, persistence, sync.
- Render live telemetry and video streams smoothly on modest controller hardware.
- Design for the field: degraded links, stale data, gloves, sunlight, vibration, one-handed use.
- Work alongside the engineers handling the DJI SDK integration, and consume the flight state they expose — growing into that layer yourself over time if it interests you.
- Validate on real hardware. The emulator only gets you so far; expect to be part of field testing.
Requirements
- 5+ years building and shipping production software.
- Expert-level Kotlin: coroutines, structured concurrency, Flow, generics.
- Sound architecture instincts: modularization, clear layer boundaries, domain logic kept out of framework and UI code.
- Comfortable with testing and CI/CD as part of normal work, not an afterthought.
- Able to work autonomously in a fully remote, distributed team, and to communicate clearly in writing.
- Professional working proficiency in English.
- 4+ years of Android development with applications shipped and maintained in production.
- Solid grasp of the application lifecycle, foreground and bound services, process death, and keeping a long-running session alive behind the UI.
- Performance work as a habit: profiling, memory, frame timing, battery and thermal behaviour on constrained devices.
- Comfortable targeting older API levels and non-standard hardware — controller devices lag well behind mainstream Android and have no Play Services to lean on.
- Deep Jetpack Compose: state hoisting, recomposition and stability, DerivedSoft, custom layouts, Canvas drawing, animation, gesture handling.
- Sound UI architecture: unidirectional data flow, a single source of truth, Flow-driven state, no business logic in composables.
- Rendering high-frequency streams without dropping frames: telemetry arriving many times a second, backpressure, conflation, throttling to what the eye can actually use.
- Composing UI over live video and map surfaces — Surface View /Texture View interop, overlays, correct layering and lifecycle.
- Custom visual components built from scratch: gauges, attitude and heading indicators, timelines, map overlays. Off-the-shelf Material components will not cover this UI.
- Design judgment. You can take a vague requirement and produce a defensible interface: information hierarchy under time pressure, dense but glanceable layouts, high contrast for direct sunlight, touch targets usable with gloves, no reliance on subtle color cues.
- Designing for degraded states — stale telemetry, lost link, unknown position — so the screen never implies certainty the system does not have.
- Accessibility and internationalization fundamentals; UI testing (Compose UI tests, screenshot tests).
- Production experience with KMP, not just prototypes.
- Confident with expect/actual, source set layout, and Gradle multiplatform configuration — version catalogs, convention plugins.
- The KMP ecosystem in practice: Ktor client, kotlinx-serialization, kotlinx-datetime, SQLDelight or Room KMP, coroutines across targets.
- Judgment about what belongs in shared code versus platform code, and the discipline to hold that line while working in a codebase you share with others.
- Offline-first patterns: local persistence, deferred sync, conflict handling when connectivity returns.
- Experience building UI on top of a device or hardware SDK: Bluetooth or USB peripherals, cameras, IoT devices, medical or industrial equipment, vehicles, robotics.
- Handling connection lifecycle in the UI: pairing, reconnection, link loss, and communicating all of it honestly to the user.
- Live video in an app: decoding, rendering, latency, and drawing on top of a moving frame.
- Comfort with a UI whose correctness matters — where a misleading screen has consequences beyond a bad review.
Nice to have
- DJI SDK experience — Mobile SDK v5 especially, or Payload / Edge SDK. A significant plus, not a requirement.
- Any drone or autopilot exposure: MAVLink, PX4, ArduPilot, Skydio, Parrot; or hands-on flying.
- Compose Multiplatform.
- Geospatial and map UI: coordinate systems, tiling, offline map data, flight-path overlays.
- Video transport: RTMP, WebRTC, RTSP, hardware codecs.
- Design tooling and vocabulary — Figma, design systems, prototyping — given we have no designer yet.
- Server-side Kotlin (Ktor or Spring Boot), useful for the shared core.
- Android on vendor-locked or rugged hardware: device owner mode, sideloaded distribution, OTA updates for fielded units.
- A drone pilot certificate, or genuine willingness to obtain one.
Benefits
- Opportunities for certification and training
- Dual monitor setup and high-spec workstations
- English courses
- Gym allowance
- Medical Reimbursement
- Full salary covered up to 20 days of sickness
- Flexible working hours
- Loyalty scheme
- Team-building activities, special events and conferences
- UK/EU Travel opportunities
- Snacks and drinks in the office