Design patterns

Event stores and event sourcing: some practical disadvantages and problems

7 January 2017

Event stores and event sourcing are a powerful idea, but they can be vulnerable to a number of technical and operational challenges when faced with real world complexity.

What’s so bad about monoliths anyway…?!

3 October 2016

Don’t get me wrong - I am an advocate of decomposing functionality into autonomous services. My reservation is that you need to have a lot of prerequisites in place before you can start leveraging microservices.

Designing an event store for scalable event sourcing

29 July 2016

Event sourcing can scale very nicely, though this does depend on a number of key design decisions for the underlying event store.

Is “Serverless” architecture just a finely-grained rebranding of PaaS?

2 June 2016

Serverless computing makes bold promises of development without having to worry about environments, scaling or deployment. Haven’t we been here before?

What do we actually mean when we say business logic?

14 April 2016

In most cases “business logic” just refers to the poorly-defined “gloop” that sits between user interfaces and databases in layered architectures.

API gateways and the dangers of creeping middleware scope

23 March 2016

An API gateway can solve many generic problems in an API infrastructure, but you do need to define a clear remit and protect against creeping scope.

Can cross-cutting concerns really exist between services?

25 July 2015

You might be able to identify cross-cutting concerns in a monolith, but in a service-orientated world they should melt away into specific implementations.

Refactoring monoliths to microservices: the pragmatic reality

5 May 2015

Large scale rewrites of systems are loaded with risk. You can address this by preparing the ground in advance and adopting an incremental approach, but a willingness to be pragmatic is essential.

How big is a microservice?

9 March 2015

We know that micro services are small and focused by design – just how small is this in practice?

Why you shouldn’t create asynchronous wrappers with Task.Run()

3 November 2014

Many developers confuse asynchronous operations with parallel execution. The essential difference is that an asynchronous operation is concerned with which resources you consume while parallel execution is more concerned with how many.

The problem with tiered or layered architecture

9 July 2014

An architecture based on tiers or layers is too inflexible to deal with the more flexible demands of modern systems, particularly when you working with high-volume systems that require distributed processing.

Are microservices just “SOA done properly”?

12 June 2014

There’s nothing really new about many of the ideas that underpin microservices. Are they just an agile re-branding of SOA?

Eventual consistency and the trade-offs required by distributed development

4 May 2014

Developers who have been brought up on the certainties of ACID transactions often have a problem trusting eventual consistency. Once you start exploring the requirements in more depth this really so much of a handicap.

Can APX help in developing usable and accessible APIs?

19 October 2013

Given how important APIs have become in driving the reach of applications and services, it’s surprising how little investment is made in the usability of APIs as opposed to UIs. Perhaps the principals and techniques used by UX should be applied to developing more effective APIs…

Managing change and version control for service interfaces

16 July 2013

Change is an inevitable and even desirable part of distributed development. Managing the impact of that change is the difficult part, particularly when change affects the service interfaces that bind a distributed platform together.