Java Staff Engineer
Job Description
TheHive, incident response platform used by thousands of security analysts worldwide, is evolving.
To support the next generation of capabilities, the backend platform is being progressively redesigned and migrated from Scala to Java. This is not a simple rewrite. It is a deliberate architectural redesign of a production system used in demanding operational environments.
The goal: cleaner service boundaries, better observability, more predictable performance, and unlock new product capabilities our users need the most.
As a Staff engineer (hands‑on architect) you will own the technical vision for this migration. You'll work with other senior engineers. You code, you decide, you challenge, and you're accountable for outcomes.
This is brownfield in the truest sense: real architectural ownership, from day one, with real constraints to navigate.
This is not a "come implement our architecture" role. It is a "come define it, defend it, collaborate and build it" role. The constraints are real but the design space is wide. You will have direct influence over every foundational decision.
If you've been waiting for a role where architecture is genuinely a first‑class concern, this is it.
Responsibilities
- Define and evolve the target Java architecture, layering, modularity, API design, persistence strategy; balancing ambition with real delivery constraints.
- Lead the POCs phase: evaluate architectures, migration options, Java frameworks, validate patterns, and make opinionated calls with documented trade-offs.
- Establish engineering standards: code structure, testing strategy, observability, and CI/CD patterns that the team will actually follow.
- Work within existing database and infrastructure constraints (graph database JunasGraph, on‑premise client deployments, existing API contracts) and know when to push back on them or make them change.
- Onboard and technically mentor other engineers, while staying hands‑on yourself.
- Engage early in features' conception: understand user and business needs, challenge requirements, and surface constraints before they become problematic. You understand that architecture exists to serve users, not only to be elegant for its own.
- Integrate AI tooling into the team's daily workflow (Copilot, Claude code, etc.)
Requirements
Ownership & Accountability- A pragmatist mindset: you choose tools because they solve problems, not because they're fashionable. You can argue for boring technology when it's the right call.
- Comfort with ambiguity: You help shape requirements, not just fulfill them.
- Proactive: you flag problems early, propose solutions, and follow through.
- You have at least 10 years of experience in development.
- Architectural deep expertise (clean, hexagonal, etc.) and demonstrated architectural work: you've made real design decisions, lived with their consequences, and learned.
- Pattern experience (CQRS, strangler fig, etc.)
- Experience with development methodologies like TDD, ATDD or property‑based testing, etc.
- Modern Java expertise (17+), concurrency, performance.
- Experience with complex domain modeling, graph or document stores, and event‑driven or async architectures.
- You care about how the product is used, not only how it is implemented.
- You connect technical decisions to user workflows, operational realities and business impact.
- You understand when engineering perfection improves the product and when pragmatic solutions are required.
- You connect technical decisions to system‑level consequences, other teams’ impacts, performance, reliability and cost.
- Strong opinions, loosely held: you argue your case, listen to pushback, and adapt.
- Clear and direct communicator.
- Comfortable working across multiple product and engineering teams simultaneously.
- You challenge requirements constructively.
- Genuinely enthusiastic about AI, both as a development tool and as a product dimension to explore.
- Technically curious beyond your current stack: you experiment, form opinions, and bring what you learn back to the team.