Tooling & Developer Experience (DX)

Tooling & Developer Experience (DX)

Want to propose a change, disagree with a placement, or add an interesting new technology? Please reach out to @Damian Szafranek. This Tech Radar is a living document - we keep it useful by updating it together as our projects, tools, and experiences evolve.

Scope

This section covers essential tools that enhance the developer workflow, enforce code quality standards, manage dependencies, structure projects (like monorepos), leverage AI assistance, and ensure consistent development environments.

Overview

ADOPT

Proven technologies we have high confidence in; our default choices.


ESLint

Prettier

npm

pnpm

Checkstyle

PMD

Spotless

Lombok

jirutka rsql parser

 

TRIAL

Promising technologies to explore and evaluate for adoption.


Apache Tika

CommonMark-java

json-path

ASSESS

Interesting technologies requiring investigation.


Turborepo

 

HOLD

Not recommended for new work; plan migration from existing uses.


TSLint

Technologies Breakdown

ESLint ADOPT

The standard linter for JavaScript and TypeScript code. Configure with appropriate plugins (React, TypeScript, Accessibility, etc.) and a shared configuration baseline across projects. Integrate into CI/CD pipelines and IDEs.

Essential for maintaining code quality, enforcing coding standards, and catching potential errors early. Highly configurable with a vast ecosystem of plugins and presets. Adopted as the standard linter across all frontend projects.


Prettier ADOPT

The standard code formatter for ensuring consistent code style across projects (JS, TS, CSS, JSON, Markdown, etc.). Use with minimal configuration overrides and integrate into pre-commit hooks and CI/CD pipelines.

Eliminates debates about code style by automatically formatting code according to a consistent standard. Improves readability and reduces cognitive load when switching between projects or collaborating. Adopted universally for code formatting.


npm ADOPT

The default package manager bundled with Node.js. Used for managing project dependencies (package.json, package-lock.json) when pnpm is not used or for compatibility reasons.

Comes standard with Node.js, universally understood. While pnpm is preferred, npm remains adopted as the baseline and fallback package manager.


pnpm ADOPT

The preferred package manager for managing dependencies in new projects, especially effective in monorepos. Manages dependencies via package.json and pnpm-lock.yaml.

Offers significant improvements in installation speed and disk space usage compared to npm by using a content-addressable store. Provides strictness that prevents phantom dependency issues. Adopted as the preferred standard for its efficiency benefits.


Checkstyle ADOPT

Standard Java code-style enforcement. Keeps conventions consistent across teams and projects.

Checkstyle helps prevent style drift and reduces review noise by enforcing agreed conventions automatically. Adopt it as a baseline quality gate in JVM projects, tuned to rules that support readability and maintainability rather than personal preferences.


PMD ADOPT

Static analysis for catching common Java code issues and code smells early beyond formatting and style.

PMD complements formatting and style checks by flagging problematic patterns (complexity, error-prone constructs, maintainability issues). Use it as part of the standard quality toolchain to keep technical debt from silently accumulating.


Spotless ADOPT

Build-integrated formatter that keeps code consistently formatted automatically—reducing “format wars” in reviews.

Spotless enforces formatting as part of the build, making it easy to keep style consistent across IDEs and contributors. It’s especially effective when paired with other quality gates (Checkstyle/PMD) to separate “format” from “logic” in code reviews.


Lombok ADOPT

Productivity library that reduces boilerplate in Java (getters/setters/builders, etc.) while keeping codebases readable.

Lombok can significantly cut repetitive code and make models and DTOs cleaner. Use it intentionally and consistently, and be mindful of team conventions and IDE/tooling setup so the generated code remains transparent to contributors.


jirutka rsql parser ADOPT

A pragmatic standard for parsing RSQL filter expressions. Useful for building flexible REST filtering/search without inventing custom query syntaxes.

jirutka rsql-parser provides a well-known, reusable foundation for “advanced filtering” endpoints (e.g., search screens, admin panels). It helps keep APIs consistent across services and avoids each team reinventing filtering logic and grammar.


Apache Tika TRIAL

A proven toolkit for extracting text and metadata from many file formats. Useful when systems need to “read documents”.

Tika shines when you receive heterogeneous files (PDFs, Office docs, images with embedded text/metadata, etc.) and need a unified extraction approach. It’s in TRIAL so we can standardize patterns (performance, security scanning, handling malformed files) before recommending it broadly.


CommonMark-java TRIAL

Markdown parsing and rendering for JVM services - helpful for safe, predictable Markdown handling in backend workflows.

CommonMark-java supports standardized Markdown behavior (CommonMark spec), making it a good choice when services need to transform or sanitize Markdown consistently. It’s in TRIAL while we confirm usage patterns and ensure it fits our rendering/safety needs.


json-path TRIAL

“XPath for JSON” - handy for extracting values from JSON in tests, validations, and lightweight data processing.

json-path can simplify test assertions and payload inspection without writing lots of parsing code. It’s in TRIAL to validate conventions and avoid overusing it in production logic where stronger typing or clearer models may be preferable.


Turborepo ASSESS

Investigate as a potentially simpler alternative for managing monorepos, focusing primarily on optimizing build and test times through caching and task orchestration. Compare with manual scripting or other potential solutions if monorepo needs arise.

Developed by Vercel, Turborepo focuses specifically on high-performance build caching within monorepos. Assessing its capabilities, ease of use, and suitability for our potential monorepo needs, especially given its focus compared to more comprehensive tools previously assessed.


TSLint HOLD

Avoid completely. TSLint was deprecated in 2019. Projects still using TSLint must migrate to ESLint with TypeScript support (@typescript-eslint).

The project is deprecated and unmaintained. The official migration path is to ESLint, which now provides comprehensive TypeScript linting capabilities via the @typescript-eslint project. Continued use of TSLint poses risks and lacks support for modern TypeScript features.