Distributed Applications

Internal developer platforms and the cult of Kubernetes

13 April 2023

We all agree that engineering enablement is important, but “platform teams” can often be a fig leaf for organisational anti-patterns and overly complex Kubernetes implementations.

Running serverless containers in AWS Fargate, Google Cloud Run and Azure

26 January 2020

“Serverless” containers could help you to avoid the complexity of Kubernetes, but you may struggle to leverage them for anything beyond small, predictable workloads or batch jobs.

When should you write your own message endpoint library?

14 December 2019

Enterprise messaging patterns are complex beasts that often warrant a common implementation across your endpoints. Should you ever be tempted to roll your own?

There's more to publishing external APIs than choosing an API management vendor

17 November 2019

Publishing a public API involves many considerations, from billing and metering through to documentation and on-boarding. These are likely to be addressed through a collection of solutions rather than a single all-singing, all-dancing API management platform.

Why is loose coupling between services so important?

14 April 2019

You can’t eliminate coupling between collaborating services, but you can ensure that it doesn’t prevent you from enjoying the benefits of service-based development.

Why isn't WCF supported in .Net Core?

28 October 2018

Development shops that have invested heavily in WCF have been left high and dry by the emerging .Net Core ecosystem. There are a number of good reasons why WCF for .Net Core is unlikely to make it onto any official roadmaps…

Messaging anti-patterns in event-driven architecture

12 October 2018

Event-driven integration can improve the scalability, resilience and scalability of distributed applications… but this does depend on the design of your event messages…

Hosting .Net Core containers in Service Fabric

12 September 2018

Service Fabric does support container-based applications, but it still feels more like an application server than a container orchestrator.

Building Twelve Factor Apps with .Net Core

12 August 2018

Twelve factor apps provide a methodology for building apps that are optimised for modern cloud environments. It’s only been achievable in the Microsoft world since the advent of .Net Core.

Layers, onions, hexagons and the folly of application-wide abstractions

3 June 2018

Not only are layered applications difficult to maintain, but the common abstractions they are built on tend to give rise to inflexible implementations that have serious scalability challenges.

GraphQL will not solve your API design problems

20 March 2018

If you find REST APIs difficult to design, develop and scale, then your experience with GraphQL is not going to be any easier.

Microservice preconditions: what needs to be in place before you decompose that monolith...

9 March 2018

One of the main benefits of microservices is that they reduce the cost of change. The problem is that you need to make a significant up-front investment to realise this saving. Your first few microservices are more likely to be an expensive and potentially painful undertaking.

Entity services: when microservices are worse than monoliths

13 December 2017

Finely-grained, entity-based services seem to be advocated by some pretty authoritative sources. This is unfortunate as they are something of an anti-pattern that can undermine many of the benefits of decomposing an monolith into micoservices.

Events, sagas and workflows: managing long-running processes between services

4 November 2017

An event-driven architecture can give rise to complex chains of events that are difficult to manage. These problems can be mitigated through careful design rather than resorting to shared state databases or workflow engines.

Can consumer-driven contracts manage breaking change in microservice integrations?

4 June 2017

One of the more enduring problems with service integration is managing change in service interfaces. Consumer-driven contracts can help to detect breaking changes, but this visibility comes at a price.