Tim Blair

Programmer, app architect, tinkerer, husband, father, cat owner, runner, adventurer, eater of cakes, pedant, enjoyer of proper beer, frisbee thrower, guitar player, curator of unfinished and ever-growing lists…

Read this first

Software Architect 2015: Day 2

The second day of the conference sessions of this year’s Software Architect conference is over. To follow up from my overview of day 1, here’s my thoughts on day 2.

 Big Data’s Place in Microservice Architecture

By Gary Short

The morning kicked off with an excellent session discussing how Big Data(™) can fit in to a modern microservices-based architecture. Gary began by giving a primer on both microservices and big data to ensure that everyone had enough background. I didn’t find anything new in the microservices section, but I’ve not had the need to deal with any real-life Big Data, so his discussion of the background of Hadoop, as well as the different data processing mechanisms (batch + real-type processing) was useful.

The second section of the talk was giving examples of how both batch jobs and real-time processing of data can be exposed as services. For batch jobs, it’s a case

Continue reading →

Software Architect 2015: Day 1

Day 1 of the conference sessions of this year’s Software Architect
conference is over, and here’s a few brief notes from the sessions I
was in.

 Microservices: the Good, the Bad, and the Ugly

By Sander Hoogendoorn

Microservices have been a key topic of conversation within the software
architectural community for the last two years, so it naturally follows that
both keynotes on this opening day were based around the topic.

Sander kicked things off discussing his experiences with building
microservice-based architectures, covering both the benefits and the costs and
tradeoffs that have to be considered along the way.

He highlighted that microservices as a concept is somewhere on the “peak of
inflated expectations” point of the Gartner Hype Cycle, with lots of
both proponents and a reasonable number of (vocal) detractors, but the truth of
the matter, as usual, lies somewhere in the

Continue reading →

An Introduction to Go

The popularity of the Go programming language has been rising rapidly in the last few years. It’s being used in thousands of projects, and people are loving its lightweight approach to static typing, and the power that the built-in concurrency primitives provide.

This talk gives an overview of the core elements of Go that you’ll need to know to get going. It covers the type system, explaining and giving examples of the use of each type; the control structures available; the concurrency primitives, and the power that goroutines and channels give; and code organisation, workspaces and tooling.

 Slide Deck

The slide deck is available on Speaker Deck.


  • Headline One
  • Ostrich Sans Rounded
  • Hack


  • Main text: #F1F0F2, #395BA6, #202020
  • Earendel theme for code

Continue reading →

Recently Read

Like many technologists, I’m always in interested in reading articles – or listening to podcasts, or watching videos – about the software industry. I thought I’d share a few of those items that have piqued my interest recently. Not all the links are new, but hopefully you’ll find them all interesting.

 ThoughtWorks May 2015 Technology Radar

Every 6 months or so, ThoughtWorks’ Technology Advisory Board puts together a technology radar based on their experiences and opinions. While biased based on those criteria, it’s still an incredibly valuable snapshot of what’s either trending, or dropping away, in the technology sector.

The radar is split in to four quadrants (techniques, tools, platforms, and languages & frameworks), and four rings (hold, assess, trial, and adopt). The quadrant names are fairly self-explanatory, but the rings lesss so: they range from “don’t start anything new

Continue reading →

An agile approach to self-improvement

If there’s one thing I’ve learned during a career in software development it’s that both requirements and priorities change. Regularly.

Picture the scene: you’ve spent weeks gathering requirements for the upcoming Big Project™. You’ve figured everything out down to the tiniest detail, pulling together Gantt charts, resource plans (eugh, they’re people, not resources) and the perfect choice of technology stack. You’re the planning king.

But then things start going wrong. A key member of your team leaves and you have to replace both their physical presence and the knowledge they’ve accumulated. A new regulation comes in and half your remaining team is now pulled on to dealing with the work required to meet the changes. It turns out that you’d missed some of those “tiny” details, including the fact that a key piece of infrastructure just plain doesn’t work the way that trustworthy

Continue reading →

It’s time to start doing

It’s time to start doing. To start writing. To start building. To start learning. I’ve spent far too long collecting resources and ideas, and not nearly enough time in using the resources, or acting on the ideas.

My Dropbox folder is full of files with notes on half-baked projects I could do. The list of “technologies and programming languages I should look in to” has grown to multiple pages. I have days of articles and blog posts queued up on Readability, dozens of technical papers collected, and multiple trees-worth of books sitting on bookshelves in my house, all waiting to by read. Ideas and partial outlines for talks I could give at insert-conference-name-here abound. Wouldn’t it be great to build a side-project or two to gain a bit of passive income? And what about that podcast I’d love to start?

I’ve somehow got myself in to the mindset that if I’m going to do something, then it

Continue reading →

Git 102

So you’ve learned the basics of Git, and you’ve started butting up against it. Maybe you can’t quite remember all the different sub-commands and flags you use occasionally, or people have been moaning at you that your commit history is a bit messy. Ever deleted a branch accidentally and think it’s gone forever? Or maybe you’re using Git for editing text, and are fed up with diffs telling you a whole paragraph has changed when you’ve only changed a single character?

This talk gives a 100ft view of a bunch of commands and options within Git . It’s not attempting to explain exactly how to use each thing, but will hopefully act as a jumping-off point for anyone who wants to either learn a bit more about Git, or become more efficient at using it.

 Slide Deck

The slide deck is available on Speaker Deck. Some folks have asked about the make-up of the deck, so if that’s your bag, here’s the

Continue reading →

Testing pipelined HTTP requests with WebMock

We’ve just released a small gem called webmock-net-http-pipeline
(how’s that for a mouthful?) that helps us with testing Ruby code that makes
calls to external services via pipelined HTTP requests, by enabling us to mock
those requests via WebMock. Read on for more details…

 What is HTTP Pipelining?

HTTP Pipelining is a feature of HTTP 1.1. It basically provides
the ability to send multiple idempotent requests (principally GET and HEAD)
along a single HTTP connection, without waiting for each response individually.
The image below is a representation of how pipelining multiple requests can be
of benefit when trying to minimise wait time between the start of the first
request, and the end of the last response:


Pipelining allows us to minimise the time spent waiting for responses from the
external service by providing the ability to send all requests first, then
receive all the

Continue reading →

How to run a hack day

The last couple of years have seen a lot of buzz about the benefits of running
an internal hack day within your company. People like Twitter, The
Guardian, LinkedIn and Dropbox swear by the
benefits of giving developers and engineers a day (or more) of freedom to
pursue whatever technical fantasy (within reason) they can come up with.

Chances are, if you’re reading this, then you already know about the benefits
of running a hack day. So the question is no longer why?, it’s how?

Of course, every company is different, so I can’t give you a prescriptive list
of “do these things and you’ll have a great hack day,” but what I can do is
share how we approach the prospect of selling the benefits of a hack day to the
business, and then organising and running the event.

Note: this article discusses selling the idea and organisation of an
internal hack day, not an open-to-the-public affair

Continue reading →

What open-source can learn about customer engagement

Running a successful open-source project is very much like running a business: it takes skill, time and money (there may not be a direct monetary cost, but there’s an opportunity cost in everything). You need to market your product: why should people use your software rather than anyone else’s? In fact, with open-source software development, you need to explain to people why they should spend their own free time helping you make your product better.

You need to do what businesses have been doing for years: you need to engage with your customers.

You can barely walk down the street today without being told that your favourite local café now has an account on Twitter that you should follow. Thousands of articles keep popping up everywhere on how businesses can “make the most” of their presence on Twitter by monitoring what people are saying about them, and by engaging with their

Continue reading →