Avoiding growth by accretion

Software has a tendency to grow by accretion - a gradual build-up of material causing what was a small and simple nucleus to become a large, complex object with many layers. It's the same mechanism by which planets form. A small clump of particles attracts other particles, and this new »

Services in the Monolith

It's become accepted that microservices, when done right, are a Good Thing - helping you keep your responsibilities nicely separated, easily share functionality between applications, and scale in a granular fashion where only the hot spots are spread across a multitude of servers. It's less commonly accepted, but even more »

The state of TDD

The state of test-driven development across our industry is terrible. This may seem a rather brazen statement, given pretty much everybody and their dog is writing tests somewhere vaguely around the same point as they write code, and you don't have to scroll far down this blog to find an »

Pass-through objects

Take a look at this class: public class ThingHandler : IThingHandler { private readonly IUnderlyingThingHandler _underlyingThingHandler; public ThingHandler(IUnderlyingThingHandler underlyingThingHandler) { _underlyingThingHandler = underlyingThingHandler; } public Thing GetThing(int parameter) { return _underlyingThingHandler.GetThing(parameter); } } I've seen variants of this everywhere I've worked. Sometimes it doesn't have the dependency injected, sometimes it catches and immediately rethrows »

Architecture Envy

My comment on a failed project: "The architecture looks like someone spent an afternoon throwing darts at the index page of Gang of Four". There's a serious point buried in this, which is that most of us will spend at least some of our time working on projects that neither »