I am an author, speaker, and loud-mouth on the design of enterprise software. I work for ThoughtWorks, a software delivery and consulting company. This site contains lots of my writing on software development, which primarily focuses on software design and agile methods. To find your way around this site, go to the intro guide.

News and Updates

My atom feed (RSS) announces any updates to this site, as well as various news about my activities and other things I think you may be interested in. I also make regular announcements via my twitter feed, which I copy to my facebook page.

Microservice Trade Offs

Wed 01 Jul 2015 09:36 EDT

Many development teams have found the microservices architectural style to be a superior approach to a monolithic architecture. But other teams have found them to be a productivity-sapping burden. Like any architectural style, microservices bring costs and benefits. To make a sensible choice you have to understand these and apply them to your specific context.

Third installment of Refactoring Loops to Collection Pipelines

Tue 30 Jun 2015 09:50 EDT

In this third installment, I show an example of making sense of a loop that marks preferred offerings from a list.

Second installment of Refactoring Loops to Collection Pipelines

Thu 25 Jun 2015 10:00 EDT

In this second installment, I show an example of refactoring a simple nested loop.

Refactoring Loops to Collection Pipelines

Tue 23 Jun 2015 10:31 EDT

I've long been a fan of the programming pattern that I call the collection pipeline. This allows me to write computation on collections in the form of a pipeline of familiar operations (eg filter, map, reduce). More and more language environments now have the language features and collection APIs to support pipelines, but since they have been limited in use for so long, more people are familiar with loops. In this article (which I'm releasing in installments) I'll take some loops and show how I'd refactor them into collection pipelines.

photostream 86

Sun 21 Jun 2015 13:05 EDT

Le Puch, Languedoc, France

A Cherry Picker's Guide to Doctor Who

Fri 19 Jun 2015 11:17 EDT

Recently I got chatting with a friend who was toying with trying out the TV series "Doctor Who", but was put off by its long history and sheer amount of episodes. So I decided to make another pass at article that helps people cherry pick some of the best episodes. With this you can enjoy many of the best bits of Doctor Who without feeling you need to see every episode.

Tor for Technologists

Mon 15 Jun 2015 09:38 EDT

Tor is in news articles a lot nowadays, but is often misunderstood - even many technologists don't see past its use for negative purposes. Ola Bini, who is one of my most active colleagues working in internet privacy, has put together an article to introduce Tor. It covers how Tor works, together with some of the tools that come with it (the browser bundle, hidden services). Anonymity is difficult, so it's important to understand Tor's limitations and the controversies about whether Tor is broken. Even if you're not an activist, Tor is useful for testing what websites look like without personalization and from different countries; it is also handy for providing secure access to servers.

photostream 85

Tue 09 Jun 2015 19:17 EDT

Burano, Italy

Don't start with a Monolith

Tue 09 Jun 2015 10:02 EDT

Stefan Tilkov is one of those pragmatic, experienced technologists that I listen to a lot when formulating my own writing. We've been talking recently about the applicability of microservices, and he disagreed with much of the recent talk I've heard in favor of a monolith-first strategy. So he's kindly written a short article arguing that you should be more inclined to begin with microservices, since monoliths rarely work out to be as well structured as you'd hope.

Bliki: MonolithFirst

Wed 03 Jun 2015 09:49 EDT

As I hear stories about teams using a microservices architecture, I've noticed a common pattern.

  1. Almost all the successful microservice stories have started with a monolith that got too big and was broken up
  2. Almost all the cases where I've heard of a system that was built as a microservice system from scratch, it has ended up in serious trouble.

This pattern has led many of my colleagues to argue that you shouldn't start a new project with microservices, even if you're sure your application will be big enough to make it worthwhile. .

more ...

Continuous Integration and Delivery

For a long time I’ve been a champion of Continuous Integration which reduces integration risk by integrating early and often, an application of the principle of Frequency Reduces Difficulty. We’ve found CI to be a core technique at ThoughtWorks and use it almost all the time. At the heart of this is a style of development that minimizes long feature branches with techniques like Branch By Abstraction and Feature Toggles.

While this is useful, there was still risk present from software that works in the development environment to getting it to work in production. As a result we developed Deployment Pipelines to reduce this risk, moving closer to our aim of Continuous Delivery: building software in such a way that we confidently deploy the latest builds into production whenever there is a business need. We find this improves feedback, reduces risk, and increases the visibility of project progress.

For more information: take a look at my guide page on Continuous Delivery.

NoSQL Databases

I’ve been involved in enterprise software for two decades and while we’ve seen huge technological change during that time, the relational database has been a constant figure. Previous attempts to dethrone relational databases have failed, but some people think the new rise of NoSQL databases will finally consign relational databases to history. While I think relational databases are going to an important part of the landscape for a long time, I do think that there is a big change coming in the database field.

I’ve been collaborating with my colleague Pramod Sadalage, on exploring and explaining this shift. For more information take a look at the nosql guide.

TW logo

I discovered ThoughtWorks in 2000: then a small American company whose philosphy of software development was remarkably similar to my own. Now we’ve grown to around 2500 people world-wide, but kept the values that make us special. My colleagues have built critical systems for many clients in that time, and I’ve learned many lessons from them. While doing this, we found we often didn’t have the tools we needed, so we started to build them. This led to open-source tools such as CruiseControl, Selenium, Frank, and Moco as well as commercial products.

I have many opportunities, but I’ve stayed at ThoughtWorks because of the quality of my colleagues, who include both well-known speakers and those who may not be famous names but do an excellent job of software delivery (and feed me the information to write about). We are inspired by working with each other and our unusual three-pillar philosophy that raises professional excellence and social justice to the same level as financial performance.

And we are always looking for more great people to join our curious company. Maybe I’ll see you in one of our offices some day.


API design · academia · agile · agile adoption · agile history · analysis patterns · application architecture · application integration · bad things · big data · build scripting · certification · clean code · collaboration · conference panels · conferences · continuous integration · data analytics · database · delivery · design · dictionary · distributed computing magazine · diversions · diversity · documentation · domain driven design · domain specific language · domestic · encapsulation · enterprise architecture · estimation · evolutionary design · expositional architectures · extreme programming · gadgets · ieeeSoftware · infodecks · internet culture · interviews · language feature · languageWorkbench · lean · legacy rehab · legal · metrics · microservices · microsoft · mobile · model-view-controller · noSQL · object collaboration design · parser generators · photography · podcast · popular · presentations · privacy · process theory · productivity · programming platforms · project planning · projects · recruiting · refactoring · refactoring boundary · requirements analysis · retrospective · ruby · scrum · software craftsmanship · talk videos · team environment · team organization · technical debt · technical leadership · testing · thoughtworks · tools · travel · uml · version control · web development · web services · website · writing

2015 · 2014 · 2013 · 2012 · 2011 · 2010 · 2009 · 2008 · 2007 · 2006 · 2005 · 2004 · 2003 · 2002 · 2001 · 2000 · 1999 · 1998 · 1997 · 1996

All Content