Hire Me
Writing

Technical Writing

114 posts Java · Spring Boot · AWS · Betfair · Architecture
May 6, 2026 AWS
Managing Secrets Securely with AWS Secrets Manager and Spring Boot
How to load secrets from AWS Secrets Manager into Spring Boot at startup, wire IAM least-privilege access, enable automatic rotation, and avoid the common configuration anti-patterns.
Java Spring Boot AWS
May 5, 2026 Java
Optional Done Right — Patterns That Actually Improve Readability
The Optional patterns that improve readability and the anti-patterns that make code worse — covering map, flatMap, or, ifPresentOrElse, and stream() with Java 9+ additions.
Java Functional Programming
May 4, 2026 Betfair
Parsing Best Available to Back and Lay Prices from the Streaming API
How the Betfair Streaming API represents best available back and lay prices, how delta updates work, and how to reconstruct a clean order book view in Java without the full ladder overhead.
Java Betfair Trading
May 3, 2026 Spring Boot
Custom Health Indicators with Spring Boot Actuator
How to write custom HealthIndicator and CompositeHealthContributor implementations in Spring Boot Actuator — with real examples for external service checks and IAM-aware AWS dependencies.
Java Spring Boot Observability
May 2, 2026 Spring Boot
Exception Handling with @ControllerAdvice and RFC 7807 Problem Details
How to build consistent, standards-compliant error responses in Spring Boot 3 using @ControllerAdvice and the RFC 7807 ProblemDetail class.
Java Spring Boot REST API
May 1, 2026 Spring Boot
@ConfigurationProperties — Type-Safe Configuration Done Right
How to replace @Value sprawl with @ConfigurationProperties for type-safe, validated, and testable configuration in Spring Boot microservices.
Java Spring Boot Configuration
Apr 30, 2026 AWS
Provisioning Cloud Infrastructure with CDK for Java
How to define, deploy, and manage AWS infrastructure using the CDK for Java — stacks, constructs, environment separation, and the patterns that make CDK codebases maintainable at scale.
Java AWS CDK
Apr 29, 2026 Spring Boot
Real-Time Stream Processing with Kafka Streams
How to build real-time stream processing pipelines with Kafka Streams and Spring Boot — the Streams DSL, stateful operations, KTable joins, windowing, exactly-once processing, and production topology design.
Java Spring Boot Apache Kafka
Apr 28, 2026 Betfair
In-Play Trading Architecture — How Everything Changes at the Off
How the architecture of an automated Betfair trading system must change when transitioning from pre-race to in-play — latency requirements, signal sources, order management constraints, and the state machine that keeps it safe.
Java Betfair Trading
Apr 27, 2026 Betfair
Handling Market Suspension and Streaming Reconnection in Java
How to handle Betfair Streaming API disconnections, market suspensions, and state recovery correctly in Java — connection lifecycle management, exponential backoff reconnection, market status tracking, and safe order management during suspension.
Java Betfair Trading
Apr 26, 2026 Kubernetes
Health Probes and Spring Boot Actuator — Getting Them Right
How to wire Kubernetes liveness, readiness, and startup probes to Spring Boot Actuator health endpoints — and avoid the configuration mistakes that cause unnecessary pod restarts.
Java Spring Boot Kubernetes
Apr 25, 2026 Spring Boot
Distributed Locking with Redis — Preventing Concurrent Execution
How to use Redis-backed distributed locks to prevent duplicate execution across multiple application instances — with Redisson and Spring Integration.
Java Spring Boot Redis
Apr 24, 2026 Spring Boot
Graceful Shutdown — Draining Requests Before the JVM Exits
How to configure Spring Boot graceful shutdown correctly, what it protects against, and how to wire it safely with Kubernetes terminationGracePeriodSeconds.
Java Spring Boot Production
Apr 23, 2026 Betfair
Commission Modelling — Calculating True Net P&L
How Betfair commission really works — market base rate, Premium Charge, discount tiers — and how to model it correctly in a Java P&L calculator.
Betfair Trading Java
Apr 22, 2026 JPA
Performance Tuning — Solving the N+1 Query Problem for Good
How to identify and eliminate the N+1 query problem in JPA/Hibernate applications before it reaches production.
Java JPA Hibernate
Apr 21, 2026 Spring Batch
Processing Large Datasets Without Killing Your Database
A practical guide to Spring Batch for bulk data processing — chunk-based processing, JdbcCursorItemReader, skip and retry policies, restartability, and parallel partitioning at scale.
Java Spring Batch Performance
Apr 20, 2026 Spring Boot
Transaction Management Deep Dive
A thorough guide to Spring transaction management — how @Transactional actually works, propagation behaviours, common failure modes, transaction boundaries with MongoDB and JPA, and the patterns that keep complex services correct under failure.
Java Spring Boot MongoDB
Apr 19, 2026 Reflections
A Year of Java Posts — What I've Learned and What's Next
Reflecting on a year of writing about Java, Betfair trading systems, and software architecture — what resonated, what I got wrong, and what's ahead.
Java Career Software Development
Apr 18, 2026 Java
Pattern Matching — instanceof and Switch Expressions Done Right
A practical guide to pattern matching in modern Java — instanceof pattern variables, guarded patterns, switch expressions, sealed classes, and record patterns done properly.
Java Pattern Matching Modern Java
Apr 17, 2026 Betfair
In-Play Betting Automation — Latency, Execution, and Survival
The reality of automated in-play betting on Betfair — API vs Streaming API latency, market suspension cascades, hedging open positions, and building a Java system that survives the chaos.
Java Betfair In-Play
Apr 16, 2026 Betfair
BSP Starting Price — How It Works and How to Trade Around It
A practical guide to Betfair Starting Price — how the BSP algorithm works, when to use it, how to place BSP bets via the API, and how to use BSP as a model performance benchmark.
Betfair BSP Trading
Apr 15, 2026 Spring Boot
@Async — Offloading Work Without Blocking the Request Thread
How to use @Async in Spring Boot correctly — including the executor configuration, exception handling, and the proxy gotcha that trips everyone up.
Java Spring Boot Async
Apr 14, 2026 Architecture
The Twelve-Factor App Applied to Spring Boot
Applying the Twelve-Factor App methodology to Spring Boot microservices — what each factor means in practice, how Spring Boot supports it, and where developers commonly go wrong.
Java Spring Boot Architecture
Apr 13, 2026 Java
ExecutorService and Thread Pools — Getting Concurrency Right
Stop creating raw threads. Learn how to size and manage Java thread pools correctly, avoid Future.get() traps, and use CompletableFuture for everything new.
Java Concurrency Threading
Apr 12, 2026 AWS
SQS Messaging Patterns for Spring Boot Microservices
Practical SQS patterns for Spring Boot microservices — standard vs FIFO queues, @SqsListener, dead letter queues, idempotency, and visibility timeout tuning.
AWS SQS Spring Boot
Apr 11, 2026 Java
Enums as State Machines — Beyond Simple Constants
Use Java enums to build self-contained, type-safe state machines with validated transitions and behaviour attached directly to each state.
Java Design Patterns Architecture
Apr 10, 2026 AWS
Deploying Spring Boot to AWS ECS with Fargate
A practical guide to deploying containerised Spring Boot applications on AWS ECS with Fargate — Dockerfile, ECR, task definitions, ALB, Parameter Store, and GitHub Actions CI/CD.
Java Spring Boot AWS
Apr 9, 2026 Spring Boot
WebClient — Reactive HTTP Without the Complexity
How to use Spring WebClient as a modern, non-blocking replacement for RestTemplate — including when it's fine to just call .block().
Java Spring Boot WebClient
Apr 8, 2026 Betfair
Greening Up — Locking In Profits Before the Off
How to implement greening up on Betfair in Java — the maths, a GreenUpCalculator class, when to trigger it, handling partial greens, rounding, and the edge cases that catch out new traders.
Betfair Trading Java
Apr 7, 2026 Betfair
Integrating Live Sports Data Feeds with Betfair Java Systems
How to integrate live sports data feeds alongside Betfair market data in Java — correlating events to markets, consuming score signals, and meeting in-play latency requirements.
Java Betfair Sports Data
Apr 6, 2026 Java
The Java Time API — A Practical Field Guide
A no-nonsense guide to java.time — when to use LocalDate vs ZonedDateTime vs Instant, how to handle timezones correctly, formatting, Jackson serialisation, and the pitfalls to avoid.
Java Date and Time Best Practices
Apr 5, 2026 Java
MapStruct — Eliminating DTO Mapping Boilerplate
How MapStruct's annotation processor generates type-safe, compile-time DTO mapping code — removing the fragile handwritten boilerplate that breaks silently when your model changes.
Java MapStruct Spring Boot
Apr 4, 2026 Java
Foreign Function and Memory API — Project Panama Explained
How to use Java 21's Foreign Function and Memory API — MemorySegment, Arena, native function calls via MethodHandles, jextract, and when to use FFM over JNI or JNA.
Java Java 21 Project Panama
Apr 3, 2026 Architecture
The Saga Pattern for Distributed Transactions with Kafka
How to implement the Saga pattern for distributed transactions in Java with Kafka — choreography vs orchestration, compensating transactions, state tracking, and the failure modes that trip up every first implementation.
Java Spring Boot Apache Kafka
Apr 2, 2026 AWS
Lambda SnapStart — Java Cold Start Solved?
What Lambda SnapStart actually does, how to configure it for Java, what changes in your application code to make it work correctly, and whether it actually solves the Java cold start problem in practice.
Java AWS Lambda
Apr 1, 2026 Betfair
Reading Ladder Depth — Beyond the Top 3 Levels
How to read and analyse full ladder depth from the Betfair Streaming API in Java — representing the full order book, detecting iceberg orders, measuring liquidity distribution, and using depth signals that the top 3 levels miss.
Java Betfair Trading
Mar 31, 2026 Betfair
Market Liquidity Analysis — Measuring Tradable Depth in Java
How to measure real-time market liquidity on Betfair in Java — available depth, spread analysis, matched volume, liquidity build patterns, and minimum thresholds for safe automated trading.
Java Betfair Liquidity
Mar 30, 2026 Kafka
Consumer Offset Management and Commit Strategies in Spring Boot
How Kafka consumer offsets work, the trade-offs between auto and manual commit, and how to implement at-least-once and exactly-once semantics correctly in a Spring Boot consumer.
Java Kafka Spring Boot
Mar 29, 2026 Betfair
Large Order Detection from Ladder Depth in Java
How to detect large orders and sudden liquidity changes in the Betfair Exchange ladder, what the signals mean for price movement, and how to implement the detection logic in Java.
Java Betfair Trading
Mar 28, 2026 Spring Boot
Structuring a Multi-Module Maven Project
How to structure a Spring Boot application as a multi-module Maven project — parent POM, dependency management, module layout, and keeping the domain module dependency-free.
Java Spring Boot Maven
Mar 27, 2026 Betfair
Building a Backtesting Framework for Trading Strategies in Java
How to build a Betfair backtesting framework in Java — streaming data replay, realistic order fill simulation, P&L tracking, Sharpe ratio, and the limitations you must understand.
Java Betfair Backtesting
Mar 26, 2026 Architecture
Idempotency Patterns in Event-Driven Java Systems
How to implement idempotency in event-driven Java systems — idempotency keys, at-least-once delivery, the outbox pattern, Redis deduplication, and Kafka consumer patterns.
Java Architecture Idempotency
Mar 25, 2026 Java
CompletableFuture vs Virtual Threads — Choosing the Right Async Model
When to use CompletableFuture vs Java 21 virtual threads — comparing programming models, error handling, debugging, and performance for real concurrent IO workloads.
Java Java 21 CompletableFuture
Mar 24, 2026 Betfair
Multi-Exchange Abstraction — Betfair, Betdaq, and Smarkets in One Framework
How to design a Java trading framework that targets Betfair, Betdaq, and Smarkets through a common abstraction — covering adapters, data normalisation, and unified order management.
Java Betfair Betdaq
Mar 23, 2026 Betfair
Handling Non-Runners and Reduction Factors in the Streaming API
How the Betfair Streaming API signals non-runner removals, how reduction factors work, and how to update open positions and historical signals correctly when a runner is withdrawn.
Java Betfair Trading
Mar 22, 2026 Spring Boot
Consumer-Driven Contract Testing with Spring Cloud Contract
Consumer-driven contract testing with Spring Cloud Contract — covering the contract DSL, stub generation, stub runner, and integrating contract verification into CI/CD pipelines.
Java Spring Boot Spring Cloud Contract
Mar 21, 2026 Testing
BDD with Cucumber and Spring Boot
How to use Cucumber for Behaviour-Driven Development in Spring Boot — covering feature files, step definitions, Spring context wiring, shared state, and Testcontainers.
Java Spring Boot Cucumber
Mar 20, 2026 Spring Boot
Distributed Caching with Redis and Spring Cache
How to implement distributed caching in Spring Boot with Redis — @Cacheable, cache configuration, TTL strategies, cache-aside pattern, eviction, and the failure modes that catch teams out in production.
Java Spring Boot Redis
Mar 19, 2026 Betfair
Building a Market Data Recorder in Java
How to build a Betfair market data recorder in Java — capturing live Streaming API data to disk for backtesting, replay, and strategy analysis.
Java Betfair Data Recording
Mar 18, 2026 Java
SequencedCollections and Modern Collection APIs in Java 21
Java 21's SequencedCollection, SequencedSet, and SequencedMap — getFirst, getLast, reversed, and the modern collection utilities that tidy up everyday Spring Boot application code.
Java Java 21 Collections
Mar 17, 2026 Spring Boot
Spring Cloud Gateway — API Gateway Patterns
Building an API gateway with Spring Cloud Gateway — route configuration, predicates, filters, Redis rate limiting, circuit breaking, auth forwarding, and when a gateway adds value vs complexity.
Java Spring Boot Spring Cloud Gateway
Mar 16, 2026 DevOps
CI/CD for Spring Boot Microservices with GitHub Actions
How to build a production-grade CI/CD pipeline for Spring Boot microservices using GitHub Actions — build, test, Docker image publishing, environment promotion, and the patterns that keep pipelines fast and reliable.
Java Spring Boot GitHub Actions
Mar 15, 2026 Testing
Testcontainers for Kafka — Real Broker Integration Tests
How to write real Kafka integration tests in Spring Boot using Testcontainers — spinning up a real broker, testing producers and consumers end-to-end, verifying exactly-once behaviour, and structuring tests that are fast and reliable.
Java Spring Boot Apache Kafka
Mar 14, 2026 Betfair
Efficient Market Filtering and Catalogue Queries in Java
How to query the Betfair catalogue API efficiently in Java — filtering markets by event type, competition, time window, and status, caching catalogue data, and structuring queries to stay within API rate limits.
Java Betfair Trading
Mar 13, 2026 Betfair
Price Velocity and Market Momentum in Java
How to calculate price velocity and market momentum from Betfair Streaming data in Java — tracking LTP movement rate, detecting steam and drift signals, and combining velocity with Weight of Money for a composite entry signal.
Java Betfair Trading
Mar 12, 2026 Betfair
API Rate Limiting — Managing Quotas in High-Frequency Systems
How to manage Betfair API rate limits in a Java trading system — data request quotas, charge model, request batching, the Streaming API, and monitoring quota usage in production.
Java Betfair Rate Limiting
Mar 11, 2026 Architecture
Saga Pattern for Distributed Transactions in Spring Boot
Implementing the Saga pattern for distributed transactions in Spring Boot with Kafka — choreography vs orchestration, compensating transactions, failure handling, and saga state persistence.
Java Spring Boot Saga
Mar 10, 2026 Java
Performance Profiling with JDK Flight Recorder and Mission Control
Use JDK Flight Recorder and Mission Control to profile Java services in production — flame graphs, allocation hotspots, lock contention, and GC analysis with near-zero overhead.
Java Performance JFR
Mar 9, 2026 Spring Boot
Testing REST Controllers with @WebMvcTest and MockMvc
How to test Spring Boot REST controllers in isolation using @WebMvcTest and MockMvc — without starting a full server — covering request building, response assertions, and security wiring.
Java Spring Boot Testing
Mar 8, 2026 Java
Text Blocks, String Templates, and Modern String Handling
How Java text blocks and string templates clean up multi-line strings, SQL, JSON, and HTML — with practical examples for Spring Boot and API clients.
Java Java 21 Text Blocks
Mar 7, 2026 Matchbook
Integrating the Matchbook Exchange API in Java
A practical guide to integrating with the Matchbook Exchange API in Java — authentication, REST client setup, placing and managing orders, reading market prices, and the key differences from the Betfair API.
Java Matchbook Trading
Mar 6, 2026 Testing
Mutation Testing with PITest in Java
What mutation testing reveals that code coverage misses, how to configure PITest in a Java Spring Boot project, and how to act on surviving mutants effectively.
Java Testing PITest
Mar 5, 2026 Apache Kafka
Consumer Patterns — Idempotency and Exactly-Once Processing
Building idempotent Kafka consumers in Java — deduplication patterns, idempotency keys, outbox integration, and when to reach for Kafka transactions.
Java Apache Kafka Idempotency
Mar 4, 2026 Java
Immutable Design Beyond Records — Defensive Copies, Value Objects, and Wither Methods
A practical guide to immutable design in Java — when to use records, when to write manual value objects, how to handle collections correctly, and the wither pattern for clean modification.
Java Architecture DDD
Mar 3, 2026 Betfair
Market Suspension Handling in Java Trading Systems
How to handle Betfair market suspension events correctly in a Java trading system — state machines, safe position management, and re-entry logic after resumption.
Java Betfair Trading
Mar 2, 2026 Betfair
API Authentication and Non-Interactive Login from Java
How to authenticate with the Betfair Exchange API from a server-side Java application using certificate-based non-interactive login, session token management, and automatic renewal.
Java Betfair Trading
Mar 1, 2026 Spring Boot
Spring Security — JWT Authentication for REST APIs
How to implement stateless JWT authentication in Spring Boot REST APIs — filter chain, token generation, validation, refresh tokens, and role-based access control.
Java Spring Boot Spring Security
Feb 6, 2026 Kafka
Exactly-Once Semantics — What It Actually Means in Practice
What Kafka's exactly-once semantics actually guarantee, how idempotent producers and transactions work under the hood, how to configure them in Spring Boot, and when the cost is worth paying.
Java Spring Boot Apache Kafka
Jan 29, 2026 Spring Boot
The Transactional Outbox Pattern with Kafka and MongoDB
How to guarantee at-least-once event delivery from a Spring Boot service to Kafka — implementing the Transactional Outbox Pattern with MongoDB, a polling publisher, and an idempotent consumer.
Java Spring Boot Apache Kafka
Jan 23, 2026 Java
Profiling Production JVMs with JFR and JMC
How to use Java Flight Recorder and Java Mission Control to profile production JVMs — recording CPU, memory, GC, and thread behaviour without significant overhead, interpreting flame graphs, and diagnosing real performance problems.
Java Performance Observability
Dec 21, 2025 Architecture
Object-Oriented vs Functional Programming (And Why the Argument Is Wrong)
Object-Oriented vs Functional Programming in Java — a senior developer's take after 20 years building production systems. Polymorphism, immutability, and why combining both produces the best Java code.
Architecture Object-Oriented Programming Functional Programming
Dec 20, 2025 Architecture
Hexagonal vs Clean Architecture in Spring Boot
Hexagonal vs Clean Architecture in Java Spring Boot — a practical comparison from a senior developer who has applied both in production across event-driven, microservices, and government-scale systems.
Architecture Hexagonal Architecture Clean Architecture
Dec 15, 2025 Architecture
Hexagonal Architecture for Real-World Systems
How I use Hexagonal Architecture (Ports and Adapters) in Java Spring Boot systems — from Betfair trading frameworks to DWP Digital's benefit platform. Practical patterns for keeping domain logic clean and independently testable.
Architecture Hexagonal Architecture Clean Code
Oct 7, 2025 Spring Boot
Adding Robustness with Spring Retry Annotations
How to use Spring Retry @Retryable and @Backoff in Spring Boot to handle transient failures cleanly — configurable retry logic with exponential backoff, selective exception handling, and real-world examples from Java integration services.
Spring Boot Retryable Backoff
Oct 3, 2025 Java
Java Memory Management and GC Tuning for Low-Latency Systems
JVM memory management and GC tuning for Java low-latency systems — G1GC vs ZGC, key JVM flags, allocation pressure reduction, and GC monitoring with JFR for Betfair trading and financial data pipelines.
Java JVM GC
Sep 26, 2025 Smarkets
Smarkets API Integration for Java Developers
Integrating with the Smarkets Exchange API in Java — REST and streaming authentication, market browsing, order placement, and building a multi-exchange abstraction alongside Betfair.
Java Smarkets Betting Exchange
Sep 19, 2025 Spring Boot
Production Observability with Actuator, Micrometer, and Prometheus
Building production-grade observability into Spring Boot — Actuator health endpoints, custom health indicators, Micrometer metrics, Prometheus export, and instrumenting business-level metrics.
Java Spring Boot Observability
Sep 12, 2025 Betfair
Pre-Race vs In-Play Trading — Technical Architecture
The technical and strategic differences between pre-race and in-play Betfair trading — market state transitions, streaming API indicators, latency requirements, and Java architecture for both modes.
Java Betfair Trading
Sep 5, 2025 AWS
AWS Lambda with Spring Boot — Cold Start Optimisation
Deploying Spring Boot to AWS Lambda and tackling cold start latency — GraalVM native image, SnapStart, tiered compilation, and knowing when Lambda is the wrong choice for Java workloads.
Java AWS Lambda
Aug 29, 2025 Java
Structured Concurrency in Java 21
Structured concurrency in Java 21 — StructuredTaskScope, ShutdownOnFailure, ShutdownOnSuccess, how it prevents thread leaks, and where it produces cleaner code than CompletableFuture.
Java Java 21 Structured Concurrency
Aug 22, 2025 Betdaq
Betdaq API Integration for Java Developers
A practical guide to integrating with the Betdaq Exchange API in Java — authentication, market browsing, placing orders, and building an abstraction layer for multi-exchange trading systems.
Java Betdaq Betting Exchange
Aug 15, 2025 Java
Event Sourcing with Spring Boot and MongoDB
Implementing event sourcing in Java Spring Boot with MongoDB as the event store — event appending, aggregate reconstruction, snapshots, and publishing events to Kafka for downstream projections.
Java Spring Boot Event Sourcing
Aug 8, 2025 Betfair
Risk Management in Automated Betting Systems
Risk management architecture for automated Betfair trading in Java — stake limits, liability caps, drawdown monitoring, kill switch implementation, and graceful shutdown on API disconnection.
Java Betfair Risk Management
Aug 1, 2025 Spring Boot
Spring Data MongoDB — Modelling and Querying Documents
Using Spring Data MongoDB in Spring Boot — @Document modelling, repositories, MongoTemplate for complex queries, aggregation pipelines, indexing, and avoiding the N+1 problem.
Java Spring Boot MongoDB
Jul 25, 2025 Betfair
Placing and Managing Orders with the Betfair API in Java
How to place, update, cancel, and replace orders on Betfair in Java — covering placeOrders, cancelOrders, replaceOrders, listCurrentOrders, error handling, and reconciliation.
Java Betfair Exchange API
Jul 18, 2025 Resilience4j
Circuit Breakers, Rate Limiters, and Bulkheads in Spring Boot
Practical guide to Resilience4j in Spring Boot — configuring @CircuitBreaker, @RateLimiter, @Bulkhead, and @Retry annotations, and testing resilience patterns in integration tests.
Java Spring Boot Resilience4j
Jul 11, 2025 Java
Sealed Classes and Pattern Matching — Modern Java Features
Sealed classes and pattern matching in switch expressions (Java 17–21) — replacing instanceof chains with exhaustive pattern matching, guarded patterns, and record deconstruction.
Java Java 17 Java 21
Jul 4, 2025 Betfair
Building a Spring Boot Trading Strategy Engine
How to architect a pluggable trading strategy engine in Spring Boot for Betfair — strategy interfaces, event-driven signal evaluation, lifecycle management, and risk controls.
Java Spring Boot Betfair
Jun 27, 2025 Spring Boot
CQRS Pattern with Kafka and Spring Boot
Implementing CQRS in Spring Boot with Kafka — separating command and query models, publishing events, building read projections, and knowing when CQRS is worth the complexity.
Java Spring Boot CQRS
Jun 20, 2025 Betfair
Order Flow Imbalance — A Java Implementation
Order flow imbalance (OFI) as a trading signal on Betfair — what it is, how to calculate it from streaming data, and how to build a real-time OFI indicator in Java.
Java Betfair Trading
Jun 13, 2025 Architecture
Domain-Driven Design in Java Spring Boot
A practical DDD guide for Java Spring Boot developers — covering aggregates, value objects, domain events, bounded contexts, and how to keep JPA out of your domain model.
Java Spring Boot DDD
Jun 6, 2025 Java
CompletableFuture — Mastering Async Programming
A comprehensive guide to CompletableFuture in Java — covering thenApply, thenCompose, allOf, exception handling, custom executors, and the pitfalls to avoid in real-world async pipelines.
Java CompletableFuture Async
May 30, 2025 Betfair
Last Traded Price Dynamics — Reading Market Direction
How Last Traded Price data from the Betfair Streaming API reveals market momentum — building a sliding window LTP analyser in Java to calculate price velocity and identify drift patterns.
Java Betfair Trading
May 26, 2025 Java
Java NullPointerException Avoidance and Enhancement Tactics
Java NullPointerException avoidance — comprehensive guide to null-safe String handling, Objects utility methods, Optional, enum comparisons, and enhanced NPE messages in JDK 15+. Practical Java null-handling tactics for cleaner, safer code.
Java NullPointerException TimeUnit
May 23, 2025 Testing
Testcontainers for Spring Boot — Real Databases, Real Confidence
Why Testcontainers beats mocked repositories for integration testing, and how to use it in Spring Boot with PostgreSQL, MongoDB, and Kafka — with real container setup and test speed tips.
Java Spring Boot Testcontainers
May 22, 2025 Java
Pattern match Optional in Java 21
A clever Java 21 trick for combining Optional with pattern matching using instanceof — when it's useful, how it works, and why true Optional pattern matching support in a future Java version will make this obsolete.
Java Pattern Matching Optional
May 21, 2025 Apache HttpClient Classic APIs
A Quick Guide
Apache HttpClient Classic APIs in Java — complete guide to synchronous HTTP with POST, GET, PUT, PATCH, DELETE, HEAD, and OPTIONS. Response handlers, error handling, and full working examples tested against a REST API.
Java HttpClient Apache
May 16, 2025 Betfair
Weight of Money — Implementing WoM Calculations in Java
How to calculate Weight of Money (WoM) from live Betfair Streaming data in Java — including the formula, rolling trend signals, Spring Boot wiring, and when the signal is and isn't reliable.
Java Betfair Trading
May 9, 2025 Spring Boot
Deep Dive into Apache Kafka Consumers
A thorough guide to robust Kafka consumers in Spring Boot — covering @KafkaListener, consumer groups, manual commit, error handling, dead letter topics, and idempotent processing patterns.
Java Spring Boot Apache Kafka
May 8, 2025 Java
Formatting Code Snippets in Javadoc
How to correctly format code snippets in Javadoc — when to use <pre>, <code>, and {@code} for annotations, generics, and multi-line blocks. Practical guide to clean, renderable Javadoc for Java API documentation.
Java Javadoc Documentation
May 7, 2025 Java
Why I Avoid Checked Exceptions
Why Java checked exceptions cause more problems than they solve — and how to replace them with clean unchecked exceptions, custom RuntimeException subclasses, and Spring Boot’s @ControllerAdvice for global error handling.
Java Exceptions Clean Code
May 6, 2025 Java
Hashing for Secure and Efficient Code
Java hashing guide — MD5, SHA-256, PBKDF2, and bcrypt with MessageDigest, Apache Commons Codec, Guava, and jBCrypt. When to use each algorithm, how to avoid common mistakes, and practical examples for data integrity and password storage.
Java Hashing Security
May 5, 2025 Java, Spring Boot & AWS
Publisher-Subscriber Pattern Using SNS & SQS
Implementing the publisher-subscriber pattern in Java Spring Boot using AWS SNS and SQS — full working example with Spring Cloud AWS, decoupled microservices, and real-world event-driven architecture patterns.
Java AWS Spring Boot
May 4, 2025 Java
Records for Simpler, Cleaner Code
Java Records — a practical guide to replacing boilerplate data classes with immutable, concise records in Java 16+. Covers constructors, validation, factory methods, and when to use records vs classes vs Lombok.
Java Records Clean Code
May 3, 2025 Java
Functional Interfaces for Cleaner Code
Java Functional Interfaces deep dive — Predicate, Function, Consumer, Supplier, BiFunction, and more. Practical examples with lambdas, method references, and stream pipelines from real-world Spring Boot applications.
Java Functional Programming Lambda Expressions
May 2, 2025 Betfair
Understanding the Betfair Streaming API in Java
How the Betfair Streaming API (ESA) works and how to build a robust Java WebSocket client — covering the protocol, market change messages, local state caching, and reconnection logic.
Java Betfair Streaming API
May 1, 2025 Java
A Random Pitfall
java.util.Random is a hidden performance bottleneck in multi-threaded Java systems — here’s why, and how switching to ThreadLocalRandom eliminates CAS contention and restores throughput in high-concurrency Spring Boot applications.
Java Random Math
Apr 30, 2025 Java
Immutables - No Setters Allowed
Immutable objects in Java — why they matter for thread safety, how to build them correctly with final fields, factory methods, and validation, and why setters undermine everything. Practical examples from production Spring Boot systems.
Java Immutables Lombok
Apr 28, 2025 Clean Coding
Four Principles to Boost Your Team’s Productivity
Four clean code principles every Java developer should apply — rigorous testing, meaningful naming, Single Responsibility, and side-effect-free functions. Real examples from Spring Boot, Kafka, and microservices projects.
Software Development Clean Code Junit
Apr 27, 2025 Git
How to Undo Your Git Failure?
How to recover lost commits, undone resets, and dropped stashes in Git using git reflog and git reset. Step-by-step recovery guide for the most common Git disasters, with practical examples every Java developer will recognise.
Git Version Control Development
Apr 26, 2025 GitHub Flow
A Java Developer’s Guide to Streamlined Collaboration
GitHub Flow for Java developers — how the branch-based workflow keeps teams productive and main always deployable. Practical guide with branching strategy, pull request reviews, CI/CD integration, and real examples from Spring Boot projects.
GitHub Workflow Java
Apr 25, 2025 Java 21
Virtual Threads and Project Loom — A Practical Guide
Deep dive into Java 21 virtual threads — how they work, how to enable them in Spring Boot 3, where they shine for IO-bound workloads, and where they won't help you.
Java Java 21 Virtual Threads
Apr 18, 2025 Betfair
Getting Started with the Betfair Exchange API in Java
A practical Java guide to the Betfair Exchange API — covering SSOID authentication, the non-interactive login flow, listing markets, retrieving runner prices, and placing your first bet.
Java Betfair Betting Exchange
Mar 20, 2025 Digital Minimalism
Staying Focused in a Noisy Tech World
Five digital minimalism strategies that help senior developers stay in flow state — managing inbox noise, social media, notifications, and screen time so you have the mental bandwidth for deep technical work.
Social Media Minimalism Technology