Software Engineering
Job description
About the role
Join the team responsible for building and maintaining the distributed components of the Neo4j graph database. You will work on data replication, high availability, and horizontal scaling features that enterprise customers depend on. Your code will run in production environments across financial services, pharmaceuticals, communications, and LLM context graph applications worldwide. You will own the design and implementation of core distributed systems features that ensure data integrity under adverse conditions. You will translate abstract product requirements into robust server-side architectures with a focus on long-term maintainability. You will contribute to on-call rotations to support production incidents and help define operational best practices. You will mentor junior engineers by providing code review and technical guidance on complex implementations. You will act as a technical owner for your work from initial design through deployment and post-release observation.
Key facts
What you'll do
- Refactor low-level storage engines to improve throughput while preserving strict correctness guarantees across distributed nodes.
- Implement consensus-driven replication protocols that keep data consistent during network partitions and node outages.
- Optimize state synchronization pathways to reduce latency for critical administrative operations in large clusters.
- Instrument system behavior with detailed metrics and structured logs to support rapid diagnosis of production issues.
- Collaborate with support engineers to reproduce elusive bugs and isolate failure modes in multi-tenant deployments.
- Work alongside SREs to define observability dashboards and alerting rules that reflect real user impact.
- Partner with product managers to evaluate tradeoffs between feature complexity, performance, and time-to-market.
- Explore emerging patterns in cloud-native architectures and assess their applicability to strongly consistent graph storage.
- Mentor engineers in distributed systems principles through pair programming, design discussions, and knowledge-sharing sessions.
- Navigate the extensive Java codebase to introduce improvements without disrupting stable production workflows.
- Conduct performance benchmarking to validate architectural decisions under realistic load profiles.
- Participate in on-call rotations to respond to critical issues affecting data availability or durability.
- Evaluate open-source libraries and determine whether they can be safely integrated into the existing technology stack.
- Drive the delivery of incremental milestones that de-risk long-term platform initiatives.
Requirements
- Ability to work independently in a flexible development environment with minimal supervision.
- Clear communication skills when discussing complex technical topics with both engineers and non-technical stakeholders.
- Willingness to collaborate on challenging problems that require deep analysis and creative solutions.
- Hands-on experience with distributed systems through development, administration, or extensive usage in past roles.
- Experience with or a strong interest in learning modern, high-performance, concurrent Java programming and its memory model nuances.
- Understanding of storage systems concepts such as indexing, caching, compaction, and log-structured merge strategies.
- Familiarity with networking fundamentals including protocols, serialization formats, and connection management.
- Demonstrated ability to read and modify complex codebases that span multiple services and layers.
Nice to have
- Background building stateful distributed systems such as databases, message brokers, or stream processing platforms.
- Familiarity with orchestration tools like Kubernetes and experience operating containerized workloads.
- Existing knowledge of Java, the Java ecosystem, or JVM internals including garbage collection and runtime optimization.
- Experience navigating large, established codebases with a history of careful architectural evolution.
Skills & tools
- Java and JVM-based development using contemporary frameworks and libraries.
- Distributed systems design and implementation covering consistency, fault tolerance, and scalability.
- Concurrency and networking fundamentals including threads, locks, non-blocking I/O, and message passing.
- Storage systems including persistent data structures, snapshotting, and recovery mechanisms.
- Kubernetes and cloud-native patterns for deployment, configuration, and lifecycle management.
- Distributed consensus algorithms such as Raft or Paxos and their practical tradeoffs in real systems.
Practical notes
- Neo4j recently crossed $200M in annual recurring revenue and has raised over $600M in funding at a valuation above $2B.
- The company is trusted by 84% of the Fortune 100 and 58% of the Fortune 500.
- Candidates who do not meet every listed qualification are encouraged to apply.
- Engagement is Hybrid, allowing a mix of remote and in-office work from the Malmö location.
- No specific working hours are mandated, but roles in the Distributed Systems team typically align with standard business hours for coordination with global peers.
- Travel is generally not required for this position, though occasional in-person meetings may be requested.
- No visa sponsorship information is provided at this time; candidates should verify local regulations and eligibility as applicable.
- The posting remains open until the role is filled, and early application is recommended for consideration.