← Latest posts

Engineering notes

Page 2 of 4

·5 min read

A GitHub Actions Pipeline, With the Seconds Attached

A workflow that really runs, quoted as it is, with the per-step timings from a real run — where 84 seconds go, what caching buys, and the two lines that matter.

Cloud & DevOps
·4 min read

Docker Compose and Spring Boot: Let the Application Start the Database

Spring Boot can drive Docker Compose itself — verified with the log where it waits for the container to go healthy, in a project holding no datasource config.

Containers
·7 min read

A Spring Boot Microservices Example, and the 22 Seconds Nobody Shows You

Two services, one HTTP call, measured — including what the caller does when the other service is stopped, and when it is merely slow.

Distributed Systems
·4 min read

Spring Boot Logging: JSON Is One Property, and the Guard You Still Need

Structured logs without a logback file or an extra dependency, MDC keys as real JSON fields, and a measurement correcting what you were told about placeholders.

Cloud & DevOps
·5 min read

Spring Boot Actuator: Only One Endpoint Is On By Default

What Actuator actually exposes on a fresh application, why /actuator/info comes back empty, and the endpoint that changes a log level without a restart.

Cloud & DevOps
·4 min read

Spring Boot Pagination and Sorting, and the Page You Should Not Return

Pageable and Page in two lines — then the runtime warning Spring Data logs about returning Page from a controller, and the COUNT query every page costs.

Backend & APIs
·5 min read

Java Optional: The Methods Worth Knowing, and the One That Fools Everyone

Optional's useful methods with real output — and a measurement showing orElse runs its fallback even when the value is present, while orElseGet does not.

Java
·5 min read

Java Stream API Examples, and Four Ways They Surprise You

Complete stream examples with real output — grouping, flattening, collecting to a map — plus four behaviours that cause bugs not looking like stream bugs.

Java
·6 min read

HashSet vs HashMap: One Is Built Out of the Other

The difference is not two designs but one — javap shows a HashSet holding a HashMap. Every behaviour, and every failure mode, follows from that.

Java