Skip to content

ROZAVEN / Engineering

Engineering that carries ideas into reality.

We turn complex problems into dependable systems through deliberate decisions, sound architecture and disciplined execution.

01 / The engineering process

  1. 01

    Understand

    We start with the problem in its real context. We study the domain, identify constraints and question assumptions before committing to a solution.

  2. 02

    Shape

    We turn what we learn into clear objectives, boundaries and measurable outcomes. We make trade-offs explicit and agree on what success should mean.

  3. 03

    Design

    We design the foundations before building on them. Domain models, system boundaries, data flows and architectural decisions take shape around the problem, not around trends or convenience.

  4. 04

    Engineer

    We build in small increments, with readable code, automated tests and useful reviews. Each change should be easy to understand, verify and integrate safely.

  5. 05

    Improve

    We observe how systems behave in production, learn from real use and keep improving them. Maintenance and evolution are part of engineering, not work left for later.

02 / Engineering principles

Six commitments guide what we build.

  • 01

    Explicit decisions

    Architectural decisions are explicit and traceable, from the problem to the running system.

  • 02

    Shared understanding

    Code review strengthens shared understanding across the team, not gatekeeping.

  • 03

    Tested behavior

    Tests protect behavior and communicate intent, so changes stay safe.

  • 04

    Automated delivery

    Delivery is automated, repeatable and observable, from commit to production.

  • 05

    Observable systems

    Systems expose what is happening inside them: logs, metrics and traces by default.

  • 06

    Security by design

    Security is part of the architecture, not an afterthought bolted on at the end.

03 / The stack

Technology, with purpose.

We choose technology for the problem in front of us, not the other way around. Our backend services are written in Java with Spring Boot, and our interfaces are built with Angular and TypeScript. Relational data lives in PostgreSQL, and graph-based systems run on Neo4j. Services run on Kubernetes. We use hexagonal architecture to keep the domain independent of frameworks and infrastructure, and event-driven architecture when it solves a real coupling problem. Newer tools earn their place only when they solve a problem better than established options.

  • 01ApplicationJavaSpring Boot
  • 02Frontend platformTypeScriptAngularTailwind CSSAngular SSRSignals
  • 03DataPostgreSQLNeo4j
  • 04Messaging & eventsKafkaRabbitMQ
  • 05InfrastructureKubernetes
  • 06Web server & hostingNginxsystemdLinux hardening
  • 07Delivery & CIDockerGitHub Actionsnpm
  • 08TestingVitestPlaywright
  • 09ObservabilityOpenTelemetryPrometheusGrafana
  • 010Identity & securityOAuth 2 / OIDCKeycloakOWASP
  • 011ArchitectureHexagonalEvent-driven
Fig. 03 · The production stack

Have a problem that deserves a serious engineering answer?

Let’s work through it