Skip to content
Yassir Halaoui

Uses

The tools,
and why.

A working list rather than a wish list. Everything here is something I have shipped with in the last two years, across regulated enterprise systems and two SaaS products I run alone.

Backend

Where most of the risk lives, so the choices are deliberately conservative.

Java 21
Virtual threads, records, pattern matching. LTS matters when the deploy target is a bank.
Spring Boot 3.5
Boring in the best sense. The ecosystem is the product.
Spring Batch
Still the right answer when the work is bounded and restartable.
Spring Data JPA / Hibernate
With keyset pagination once a table gets large.
Python + FastAPI
For anything sitting next to a model.
Flyway
Migrations in version control or they do not exist.

Data and messaging

The seams where most production problems actually live.

PostgreSQL
JSONB, WAL, replication slots. The last two matter more than people expect.
Apache Kafka
Plus Kafka Connect where the producer is something I do not own.
Debezium
Change data capture, with a heartbeat so the replication slot keeps moving.
Avro + Confluent Schema Registry
FULL_TRANSITIVE across team boundaries.
Redis
Real-time state and anything priced badly in a document database.
Elasticsearch
When the query is a search rather than a lookup.

Frontend

Server-first, with client code where a browser API genuinely requires it.

React 19
With the compiler on, so memoization stops being hand-written.
Next.js
App Router. This site is one.
TypeScript
Strict. Widening to any is a decision, not a shortcut.
Module Federation
Micro-frontends into a host portal, when the org chart demands it.
RTK Query / TanStack Query
Server state is not client state.
Tailwind CSS
v4, tokens in the theme block, no config file to migrate.

Platform

Delivery is part of the design, not something that happens afterwards.

Kubernetes + Helm
AKS in the day job, managed platforms for my own products.
Terraform
Including the Kafka topics and roles, not just the compute.
Docker
Multi-stage, non-root, minimal base.
Azure DevOps / GitHub Actions
Whichever the organization already runs.
SonarQube + Trivy
A quality gate and an SBOM, in the pipeline rather than in a report.
Datadog
APM, because the interesting failures are distributed.

Testing

The bugs worth catching live between components, so the tests do too.

Testcontainers
A real database. Mocked repositories hide transaction bugs.
JUnit + Mockito
Unit tests where the logic is genuinely isolated.
Vitest + React Testing Library
Behaviour, not implementation details.
Husky
Hooks that regenerate the type-safe API client from OpenAPI.

AI in the loop

Used daily and openly. The review standard does not change because a model wrote the first draft.

Claude Code
Most of the multi-file work.
Cursor
For edits that want an editor rather than a terminal.
GitHub Copilot
Inline completion.
OpenAI and Anthropic APIs
Parallelized calls where latency is the constraint.

Most of these show up in the field notes with the parts that went wrong attached — the Debezium replication slot being the clearest example.