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,...
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...
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....
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...
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,...
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...
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...
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...
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...
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 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,...
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...
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 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 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...
Software is our passion.
We are software craftspeople. We build well-crafted software for our clients, we help developers to get better at their craft through training, coaching and mentoring, and we help companies get better at delivering software.