Rants

13 June 2020

Naming things is easy. Abstraction is much harder.

One of the more pervasive myths in software development is that naming things is hard.

22 April 2020

Do you really need Kubernetes?

If you are working with a lot of twelve-factor services then probably, yes. That said, you may get a creeping feeling that Kubernetes was designed to solve problems at a scale that most people never reach…?

19 February 2020

Don’t use test coverage as a target

Code coverage can be a useful technique for discovering untested parts of your code base, but it makes for a useless target.

17 November 2019

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

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.

22 June 2019

Monorepos. For when life isn’t already complicated enough.

Many of the apparent benefits of monorepos can be realised through improvements in engineering culture and architecture rather than adopting a specific approach to source code storage.

8 June 2019

The case against maturity models

Maturity models are a popular way of looking at development challenges. The problem is that they are an arbitrary and inflexible tool and they tend to encourage the wrong mindset.

23 March 2019

Why SAFe can be agile kryptonite

The problem with SAFe is that you can implement it without writing a single unit test or automating a single build…scaled agile may be an oxymoron.

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.

30 August 2018

How I learned to love the “Agile Industrial Complex”

There is a growing sense of unease around how larger organisations have implemented agile. In particular, there is a tendency towards centralised control that can be at odds with the agile preference for individuals over process.

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.

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.

18 November 2017

Technical debt is an overused and lazy metaphor

Technical debt may be a useful metaphor for describing how bad code design undermines productivity to non-technical audiences, but it does not help in understanding the longer term problems that affect code bases.

14 August 2017

Swagger is not WSDL for REST. It’s much less useful than that…

Swagger enables the same kind of automated discovery and integration that WSDL was invented to support. In doing so it undermines the design of REST APIs and doesn’t even provide adequate documentation.

19 June 2017

When does refactoring become rewriting?

Refactoring describes a very specific and controlled technique for improving code. The problem is that it is often used to describe wholesale changes to code bases that should be treated as a rewrite.

16 May 2017

API management and the return of the enterprise service bus

No self-respecting integration platform is complete without an API management story these days. Is this just a RESTful return of the enterprise service bus?