Architecture

My trade. Apparently. What is architecture anyway? I describe it as the wider context of solutions, data, protocols, technologies and standards and how they interact. Teams can do all this on their own, of course, but they tend to not have the necessary context, skills or experience to lead decisions in larger operations.

24 February 2019

Should teams choose their own languages and tools?

Standardisation does have a place, but it should be reserved for infrastructure and collaboration rather than languages and tools.

6 January 2019

Finding service boundaries: more than just the bounded context

When you are identifying service boundaries, it’s not enough to consider the domain model alone. There are other, more pragmatic concerns to bear in mind.

27 November 2018

Writing ArchUnit style tests for .Net and C# to enforce architecture rules

ArchUnit is a java library that provides a fluent API for creating self-testing architectures via unit tests. A similar library can be written for .Net Standard that acts on compiled assemblies rather than raw code.

12 October 2018

Messaging anti-patterns in event-driven architecture

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

12 August 2018

Building Twelve Factor Apps with .Net Core

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.

29 July 2018

Autonomous bubbles and event streams: Pragmatic approaches to working with legacy systems

It’s easy to get caught up in unrealistic notions that you can re-write a legacy system or gradually decompose it. There are other, more pragmatic approaches that can help to modernise architectures and enable new development.

10 July 2018

Kafka on Azure Event Hub – does it miss too many of the good bits?

Microsoft have added a Kafka façade to Azure Event Hubs, presumably in the hope of luring Kafka users onto its platform. This makes sense as the platforms have a lot in common, though there are some missing Kafka features that may prove critical.

18 June 2018

Using architectural “fitness functions” as a guide to system design

Fitness functions can be a useful metaphor for guiding an emerging architecture, but you do have to invest in making sure they describe the right outcome.

3 June 2018

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

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.

8 May 2018

How to decompose that monolith into microservices. Gently does it…

You’re rarely given the opportunity to focus on transitioning an architecture to the exclusion of everything else. You may have to get used to the idea that decomposing a monolith is a direction of travel rather than a clear destination.

9 March 2018

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

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.

16 February 2018

Relax. There’s no conflict between architecture and agile.

Agile teams still need to make architecture decisions, but in supporting them architects should seek “just enough” architecture over “big design up front” and practical solutions over large-scale abstract thinking.

27 January 2018

Can TOGAF and Agile really go together?

On the face of it, TOGAF describes a very different world to the agile preference for working software over documentation. That doesn’t mean that TOGAF is incompatible with agile, so long as you’re prepared to adapt its numerous building blocks.

13 December 2017

Entity services: when microservices are worse than monoliths

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.

3 December 2017

Automating Docker image deployments using Azure Container Instances

Azure’s Container Instances provides an easy and quick way to run Docker images without having to learn the various complexities of orchestration platforms such as Kubernetes.