Engineering journal / Notes from the workbench
The work.
And the thinking behind it.
Long-form engineering notes, architecture writeups, trade-offs, and lessons learned from real projects.
Engineering notes from the framework I'm building. Read in order, or start with the design problem you care about.
Building a Java API Automation Framework: Design Decisions in Practice
Configuration
Configuration That Fails Before Your Tests Do
How I separate configuration loading from test execution, resolve overrides, and turn a YAML catalog into a typed snapshot.
API architecture
Why My Framework Has Both an ApiClient and an HttpClient
Separating application operations, shared request preparation, and REST Assured transport without introducing an interface for everything.
Design patterns
Building an Interceptor Chain Without a God Object
How common headers, correlation, and logging wrap HTTP execution—and why ordering, continuations, and exception behavior belong in the design.
Object design
Immutable Requests, Flexible Overrides: Designing with Builders
Using defensive copies and explicit defaults to make request construction predictable without preventing unusual test inputs.
Negative testing
A Test Framework Must Let You Send Bad Requests
Why typed DTOs need a deliberate raw-body escape hatch, and why response mapping must never discard the evidence from a negative test.
Test isolation
Parallel Tests Need State Ownership, Not Just Thread Safety
Separating suite configuration, per-invocation correlation, and thread-local logging so parallel execution does not share the wrong state.
Observability
Useful API Logs Without Dumping Everything
Designing request and response logs around correlation, bounded body formatting, redaction, and the limits of what a formatter can protect.
Authentication
Authentication Without Tokens in Every Test
How I separated token acquisition from request authentication, modeled named profiles, sourced secrets, and made refresh safe for parallel tests.