Zen Slapped

Moments of enlightenment, delivered abruptly

Surviving SOA With Continuous Delivery (and WireMock)

| Comments

I gave a talk at the London Continuous Delivery meet-up about a recent client project involving the rescue of a UI application build that a previous team had failed to make much progress with. The rest of the system was built on an old-fashioned, heavyweight, big-vendor SOA stack, and although the development process was ostensibly Scrum, we found that in practice it lacked many of the attributes necessary for effective agile delivery.

In the talk I summarised the challenges we faced the techniques we used to isolate ourselves from dependencies, manage quality and integration risk, and deliver working code in regular, small iterations.

Microservices and Monoliths - Is There a Third Way?

| Comments

TL;DR: Microservices vs. monolith is a false dichotomy.

Microservices are gaining a lot of interest at the moment as an antidote to the limitations of monolithic application architecture. But as with all things in software (and life in general) they come at a significant cost. Arguably, monoliths and microservices occupy extreme points in a design space, and I’ve recently been wondering about other strategies that could yield similar benefits but with different tradeoffs.

All-in-one Test Environments With JUnit

| Comments

A major benefit of building on the JVM is the wide range of infrastructure built natively for it. Combined with first-class support for threading this allows entire scaled-down environments to be run in-memory for testing. There are numerous advantages to this, including:

  • Faster feedback
  • Consistent environment across the team
  • Easy debugging – set breakpoints anywhere in the stack
  • Write and run integration tests for your adapters (as in Ports and Adapters) without needing a full environment

Introducing WireMock – an HTTP Service Stubbing Library

| Comments

WireMock is a tool that allows HTTP exchanges to be stubbed and verified. It does this by creating an actual HTTP endpoint, rather than by stubbing or mocking the HTTP client class. It can be used directly from within JUnit (or your weapon of choice), run as a standalone process or deployed into a container with the aim of covering off a wide range of testing scenarios. It has a JSON API so you don’t have to be working in JVM language to make use of it, although there is a also a fluent Java API available if you are.