{"id":1227873,"url":"https://alion.io/job/piano-senior-backend-engineer-customer-data-platform","title":"Senior Backend Engineer, Customer Data Platform","company":{"id":1754906,"name":"Piano","domain":"piano.io","url":"https://alion.io/company/piano-io","size_band":"51-200","is_staffing_agency":false,"employer_type":"direct","is_intermediary":false,"listed_via":null,"ats_vendor":"BambooHR","truth_index":{"grade":"B","score":75,"open_postings":3,"ghost_share":0,"stale_share":1,"repost_share":0,"time_to_fill_p50_days":null,"computed_at":"2026-09-27T05:45:00Z"}},"role":"Backend","role_family":"Backend","seniority":"senior","employment_type":"full_time","work_mode":"on_site","remote_scope":null,"remote_scope_basis":null,"remote_working_hours":null,"hiring_geo_confidence":"explicit","locations":["Warsaw, Poland"],"countries":["PL"],"hiring_countries":[],"hiring_countries_total":0,"salary":null,"salary_estimate":{"min_usd":65000,"max_usd":103000,"period":"year","method":"role_seniority_country_remote_cell","sample_n":207},"experience_years_min":null,"visa_sponsorship":true,"relocation_package":false,"has_equity":false,"technologies":[{"name":"Apache Kafka","optional":false},{"name":"Claude","optional":false},{"name":"Claude Code","optional":false},{"name":"Datadog","optional":false},{"name":"ElasticSearch","optional":false},{"name":"FluxCD","optional":false},{"name":"GitLab CI","optional":false},{"name":"GitOps","optional":false},{"name":"Helm","optional":false},{"name":"Jest","optional":false},{"name":"Kubernetes","optional":false},{"name":"Mocha","optional":false},{"name":"Model Context Protocol","optional":false},{"name":"Node JS","optional":false},{"name":"PostgreSQL","optional":false},{"name":"TypeScript","optional":false},{"name":"Aerospike","optional":true},{"name":"ArangoDB","optional":true},{"name":"ClickHouse","optional":true},{"name":"gRPC","optional":true},{"name":"Java","optional":true},{"name":"JavaScript","optional":true},{"name":"pnpm","optional":true},{"name":"Redis","optional":true},{"name":"Testcontainers","optional":true}],"status":"live","first_seen_at":"2026-09-07T00:00:00Z","employer_posted_date":"2026-09-07","last_verified_at":"2026-09-28T02:05:14Z","board_verified":true,"closed_at":null,"days_open":21,"trust":{"level":"ok","repost_count":null,"flags":[],"days_open":21},"description":"Piano Overview\nPiano’s Digital Experience Cloud empowers organizations to understand and influence customer behavior. By unifying customer data, analyzing behavior metrics and creating personalized customer journeys, Piano helps brands launch campaigns and products faster, strengthen customer engagement and drive personalization at scale from a single platform. Headquartered in Philadelphia with offices across the Americas, Europe and Asia Pacific, Piano serves a global client base, including Air France, the BBC, CBS, Kirin Holdings, Jaguar Land Rover and more. Piano has been recognized as one of the fastest-growing, most innovative technology companies in the world by World Economic Forum, Red Herring, Inc. and Deloitte. For more information, visit piano.io.\nAbout the Role\nYou will join the Customer Data Platform team as a senior individual contributor, working from our Warsaw office. The team is headquartered in Kyiv. CDP spans many mostly Node.js/TypeScript services: a high-throughput event pipeline, a query and search layer over Elasticsearch, scheduled background processing, and sandboxed execution of customer-authored logic.\nThis team is AI-first. Claude Code is the primary development environment and hand-written code is being phased out as the default. Our repositories carry CLAUDE.md context, .claude/ agents, commands and skills, and internal MCP servers. Daily experience working this way is a requirement; agent-written code carries the same accountability as any other.\nAbout a third of what we merge is platform custodianship - dependency and TypeScript upgrades, static analysis, CVE migrations, CI, legacy teardown. Much of it suits agents well, and that share is not optional.\nWhat You'll Do\nDeliver through Claude Code and raise the team's bar on it: better context, better agent tooling, better evaluation of agent output.\nOwn event-pipeline services under load spikes and pathological traffic: backpressure, load shedding, circuit breakers, retries, dead lettering.\nOwn the Elasticsearch query and search layer: deep pagination, behavior under memory and rate limits.\nOwn sandboxed execution of customer logic, and integrations with other Piano products and third-party systems, including their API contracts.\nDrive integration work across team boundaries: negotiate technical contracts with other Piano engineering teams and coordinate rollouts spanning services you don't own.\nScope epics and trade-offs with technical, product and business counterparts, and turn the outcome into decision records other teams build against.\nReview teammates' work with depth scaled to risk, and test determinism as the bar.\nRun production changes end to end through Helm and FluxCD GitOps.\nTake a recurring on-duty rotation: alerts, P1/P2 triage, hotfixes, and root cause communicated to enterprise customers.\nWhat We're Looking For\nMust-have\nDaily, fluent Claude Code practice on production code, and sharp judgment about where an agent can be trusted and where it must not be.\nStrong Node.js and TypeScript: ESM, strict tsconfig, Jest/Mocha.\nDeep Elasticsearch 8.x: mappings, reindex, sort and range semantics, deep pagination, backpressure.\nKafka at scale: partitioning, consumer concurrency and lag, dead-letter handling, topic lifecycle.\nProduction ownership as a habit: on-call, evidence-backed root cause, Datadog instrumentation, toggle-gated rollouts, and profiling-driven performance work.\nPostgreSQL with an ORM: migrations, indexing, transaction semantics.\nWillingness to own Kubernetes, Helm, GitOps and GitLab CI, plus dependency and CVE triage.\nClear technical English and the ability to hold a technical position with product and business stakeholders.\nNice-to-have\nBuilding MCP servers, agent skills, or other internal tooling that makes coding agents more effective.\nEfficient JavaScript execution: V8 isolates, timeouts, resource limits.\nClickHouse, Aerospike, ArangoDB, Redis.\ngRPC, Testcontainers, WireMock; de-flaking time-dependent tests.\nLarge-repository tooling such as Rush and pnpm workspaces.\nHigh-volume, multi-tenant data platforms.\nMaintenance-level Java on an existing end-to-end test suite.\nWhy Piano\nReal ownership of systems global media brands depend on, from design through production.\nReal influence over the tech stack and the freedom to choose your tools.\nGenerous token usage budgets, with a focus on getting value from coding agents.\nFlexible working hours, competitive compensation and benefits, and a laptop of your choice.\nPiano is an equal opportunity employer. Applicants must be authorized to work in Poland without sponsorship from Piano.","description_format":"text","description_chars":4614,"description_truncated":false,"requirements":{"experience_years_min":null,"management_years_min":null,"team_size_min":null,"manages_managers":false,"education":null,"security_clearance":false,"languages":[]},"benefits":["Flexible schedule"],"hiring_locations":[{"name":"Poland","iso":"PL","kind":"country"}],"hiring_excludes":[],"relocation_offered":false,"industries":["Subscription Commerce","Web Analytics & Tag Management","Customer Data Platforms (CDP) & Reverse ETL"],"lifecycle":[{"event":"open","at":"2026-09-25T13:40:18Z"}],"liveness":{"score":50,"band":"ok","label":"Likely open","p_open":1,"p_active":0.664,"p_room":0.75,"age_days":20,"expected_fill_days":24,"reasons":["conf:5","win:late"],"computed_at":"2026-09-27T05:45:00Z"},"pay":null,"html_url":"https://alion.io/job/piano-senior-backend-engineer-customer-data-platform","json_url":"https://alion.io/job/piano-senior-backend-engineer-customer-data-platform.json","meta":{"generated_at":"2026-09-28T05:21:45Z","cache_seconds":300,"methodology":"https://alion.io/methodology","terms":"https://alion.io/terms","contact":"https://alion.io/contact","api":"https://alion.io/developers","usage":{"tier":"crawler","counted_by":"address","units_charged":1,"used_today":3578,"day_limit":5000,"remaining_today":1422,"minute_limit":60,"resets_at":"2026-09-29T00:00:00Z"}}}