Location
Global Remote
Job Type
full-time
Work Format
๐ŸŒ Remote Worldwide
Salary
Not specified
Posted
October 13, 2026

Job Description

Metabase is the easiest way for people to get insights from their data, from tiny startups who get up and running quickly to major corporations with tens of thousands of users. That's why people love us.   We bring data tools with the elegance and simplicity of consumer products to the crufty world of enterprise business intelligence. We provide an opinionated open source starting point for how companies should measure, analyze and share their data, which is used by tens of thousands of companies.
We’re looking for exceptional software engineers to join our team in doing the hard work that makes our users’ lives easy. We run on a mix of Clojure and JavaScript (and TypeScript), and the ideal candidate has shipped production code in one or more of these languages. You’ll be expected to ship major features end to end across our JavaScript and Clojure codebase, as well as deal with some of our trickier backend issues as they arise. Some familiarity with machine learning, compiler theory and modern big data infrastructures would be helpful. You should have strong product sensibilities and deeply care about the end user experience.   We are hiring for multiple backend software engineer positions.

๐ŸŽฏ Who is this job for?

Level: Middle to Senior backend software engineer.

Skills: Production experience with Clojure, JavaScript, and/or TypeScript; strong backend development abilities; and familiarity with machine learning, compiler theory, or modern big data infrastructure is beneficial.

Tasks: The candidate should be comfortable delivering major features end to end across JavaScript and Clojure codebases, solving complex backend issues, and making product decisions focused on excellent user experience.

๐Ÿ’ฌ Potential Interview Questions

How would you design a backend API for creating, querying, and sharing Metabase questions and dashboards?

I would define clear resource boundaries, validate inputs, enforce authorization, and return consistent error responses. The API should support pagination, filtering, versioning where needed, and efficient database access while preserving a simple user experience.

How would you implement a parameterized query safely in Clojure?

I would use parameter binding rather than string concatenation, validate parameter types and allowed values, and ensure the query execution layer handles escaping appropriately. I would also add authorization checks and tests covering malicious and unexpected inputs.

What are the main challenges of supporting multiple databases in a BI application?

Different databases have varying SQL dialects, type systems, connection behavior, and feature sets. I would isolate database-specific behavior behind a common abstraction, use capability detection, and test queries against representative database engines.

How would you diagnose a slow backend query used by a dashboard?

I would inspect application metrics, request traces, generated SQL, database execution plans, and connection-pool usage. Depending on the cause, I might add indexes, optimize query generation, reduce unnecessary data retrieval, introduce caching, or improve asynchronous execution.

How would you design caching for frequently accessed dashboard results?

I would define cache keys using the question, parameters, user permissions, and relevant database identity, then apply a suitable expiration or invalidation strategy. The cache must not expose data across users or permission boundaries, and stale data behavior should be explicit.

How would you structure a Clojure service to keep it testable and maintainable?

I would separate pure domain logic from side effects such as database access, HTTP calls, and configuration. Dependencies should be passed explicitly or managed through clear system components, with unit tests for pure functions and integration tests for external boundaries.

What considerations are important when building asynchronous jobs for data synchronization or query execution?

Jobs should be idempotent, observable, retryable, and protected against duplicate execution. I would define timeouts, backoff policies, failure handling, and limits on concurrency so that a problematic job cannot exhaust system resources.

How would you secure a backend endpoint that returns analytical data?

I would authenticate the caller, authorize access to the database and specific collections or questions, and enforce row- or field-level restrictions where applicable. I would also validate inputs, avoid leaking sensitive error details, audit access, and apply rate or resource limits.

How can TypeScript improve reliability in a JavaScript frontend communicating with a Clojure backend?

TypeScript can model API request and response contracts, reducing runtime errors caused by mismatched shapes or optional fields. Shared schemas, generated types, and contract tests can further ensure that frontend and backend changes remain compatible.

How would you approach implementing a query transformation or SQL generation feature?

I would represent the query as a structured intermediate model rather than manipulating raw SQL strings whenever possible. The transformation should preserve semantics, validate supported operations, handle database-specific differences, and include tests for correctness, security, and edge cases.

๐Ÿ“‹ Job Summary

Metabase is an open-source business intelligence company helping organizations turn data into clear, actionable insights. As a Backend Software Engineer, you’ll build major features end to end, solve complex backend challenges, and contribute across the Clojure, JavaScript, and TypeScript codebase. This is a full-time, globally remote role with a salary not disclosed. It’s an exciting opportunity to shape an elegant data product used by tens of thousands of companies while working on meaningful, user-focused technology.

Required Skills

Clojure JavaScript TypeScript

Never miss a JavaScript opportunity

Subscribe to get similar jobs and weekly insights delivered to your inbox

Hiring JavaScript developers?

Post your job to 9,200+ registered developers. Starting free.

See Pricing

Related jobs

Brazil, Poland, Romania

Senior Front-End Engineer

Transcenda

Full-time
United States

Frontend Engineer

Jobgether

Contract

Is this your listing? Claim or request removal