• en | es

Publications

Time To Go

I'm writing that blog post I never thought I'd write. When I joined Codurance, I knew I was joining something special. I was right. Codurance is going from strength to strength, on the back of that most powerful of technologies: human beings with great willpower,...


Conversations About Conversations at SoCraTes UK 2015

OK, brain dump time. Using the Right Language What do we prioritise? What do we sacrifice? Every single product ever released has had trade-offs baked in, from the set of features to the implementation of the networking code. There were many independent discussions on and...


Crank Up The Volume And Forget Your Pomodoros

Together, Steve Lydford and I came up with a way to work that we don't think has been put to paper before. The Pomodoro technique is a great way to keep you focused, alone, in a pair, in a mob or in a meeting room....


Design Patterns in the 21st Century: Conclusion

This is part five of my talk, Design Patterns in the 21st Century. Over the past week, we've seen three examples of design patterns that can be drastically improved by approaching them with a functional mindset. Together, these three span the spectrum. The Abstract Factory...


Design Patterns in the 21st Century: The Chain of Responsibility Pattern

Here's a thing you might not see a lot. @Test public void hungryHungryPatrons() { KitchenStaff alice = new PieChef(); KitchenStaff bob = new DollopDistributor(); KitchenStaff carol = new CutleryAdder(); KitchenStaff dan = new Server(); alice.setNext(bob); bob.setNext(carol); carol.setNext(dan); Patron patron = new Patron(); alice.prepare(new Pie()).forPatron(patron); assertThat(patron,...


Design Patterns in the 21st Century: The Adapter Pattern

This is part three of my talk, Design Patterns in the 21st Century. The Adapter pattern bridges worlds. In one world, we have an interface for a concept; in another world, we have a different interface. These two interfaces serve different purposes, but sometimes we...


Design Patterns in the 21st Century: The Abstract Factory Pattern

This is part two of my talk, Design Patterns in the 21st Century. This pattern is used everywhere in Java code, especially in more "enterprisey" code bases. It involves an interface and an implementation. The interface looks something like this: public interface Bakery { Pastry...


Design Patterns in the 21st Century, Part One

I've been having a bit of trouble blogging recently. In an effort to get back into it, I thought I'd take a talk that I presented at JAX London last year, split it up into blog-sized posts as it's pretty long, and post them all...


Too Many Cooks

Last week, Sandro and I flew to Bucharest to meet Alex and Adi Bolboaca, Aki Salmi and Peter Kofler. We didn't know what to expect: the agenda was to try a "hardcore coderetreat", in which the constraints would be incredibly difficult, but when you have...


Highly Strung

This blog post is way overdue. A couple of months ago, I wrote a talk entitled Highly Strung for the Virtual Java User Group (vJUG) on when and how to use strings in your code. Spoiler: don't. So this blog post is really just to...


Highly Strung: Understanding your Type System

Highly Strung: Understanding your Type System In this video, Software Craftsman Samir Talwar discusses using your type system to make all these problems go away (at least from the core of your code). As a bonus, one will end up with a much more expressive,...


Mob Programming, and the importance of fun at work

It's been a few weeks since SoCraTes UK 2014, and I've had some time to reflect on the event and my learning experiences. Today, I want to talk about the biggest things that stood out for me. Mind. Blown. The session that really blew my...


A Software Craftsman Is

Someone who aspires to quality. Someone who considers the means as well as the ends. Alternatively, one who realises that everything has more than one outcome, and that as many of them as possible should be considered. Someone who does not build unnecessary things. Someone...


Pairing without Programming

Pairing is often associated with programming. There's a Wikipedia article about pair programming, but nothing on pairing in general. And yet, it's a fantastic technique for getting anything done well, especially when neither of you really know exactly how to approach a problem. For a...


4 Rules of Simple Design

4 Rules of Simple Design Quoting @jbrains, “A design is simple to the extent that it: Passes its tests Minimizes duplication Maximizes clarity Has fewer elements" Object-oriented principles can only get you so far in simplifying your design. Starting with a clean yet completely imperative...