About the company
- Documind is a document intelligence platform: we turn the unstructured documents businesses run on into structured, trustworthy data that other systems can act on. Behind the product is a substantial backend platform that has to stay correct, secure, and predictable under real production load.
- We're a small, senior engineering team that cares about systems that hold up, where reliability and security are part of the design rather than an afterthought.
Responsibilities
- Design and build backend services on a modern JVM stack: clean APIs, well-modeled domains, and the persistence and logic underneath them, owned end to end.
- Model and evolve data with care: thoughtful schema design, disciplined migrations, and real attention to transactions and consistency.
- Build the asynchronous, event-driven parts of the platform, where reliability hinges on idempotency, ordering, retries, and graceful recovery from partial failure.
- Help own the security-sensitive paths: authentication, authorization, tenant isolation, and protecting sensitive data.
- Keep services production-ready: meaningful health, metrics, and tracing; integrations that degrade gracefully; and behavior under load that's measured rather than assumed.
Requirements
- Strong backend experience in Java and Spring (or a closely comparable stack you can bring across quickly).
- Solid relational data fundamentals: modeling, SQL, and disciplined schema evolution.
- Real experience with asynchronous, event-driven systems and a working understanding of their failure modes.
- A security-conscious mindset, comfortable owning authentication, authorization, and sensitive-data handling.
- Comfort running services in production with containers and Kubernetes, including the operational instincts that come from supporting something live.
- A testing and observability habit: you cover concurrency and integration boundaries, and you instrument systems so you can actually understand them.
Nice to have
- Experience operating multi-tenant SaaS at scale.
- A genuine interest in software architecture: weighing tradeoffs and making sound decisions with incomplete information, then revisiting them as you learn more.
- Experience shaping and evolving service boundaries as a system grows.
- Resilience and performance work: circuit breaking, backpressure, and load testing whose results actually inform capacity decisions.
Who will do well here
- You'll enjoy this if you like complex systems and the care they ask for. You think about what happens when the network blips, a job dies mid-batch, or two requests race for the same row, and you'd rather ship something correct and observable than clever and fragile.
- You're comfortable in the grey: weighing tradeoffs with imperfect information, making a call, and adjusting as you learn. You take ownership past the merge and want what you build to be something the next engineer can reason about. If that sounds like the rewarding part of the job, we'd like to hear from you.