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.

Agile Architecture

Thu 18 Dec 2014 09:45 EST

A couple of weeks ago I did a joint talk with my colleague Molly Bartlett Dishman about the interaction of agile software development and application architecture. We talk how these two activities overlap, explaining that architecture is a vital part of a successful agile project. We then move on to passing on tips for how to ensure that the architecture work is happening.

This talk was part of ThoughtWorks’s “Rethink” event in Dallas. There are also excellent talks by Brandon Byars on how enterprises should be restructured to take advantage of agile thinking and by “Pragmatic” Dave Thomas on the dangers of “agile” being co-opted by the big-methodology crowd that it was designed to oppose. (The latter is worth it just to enjoy Dave in a suit and tie.)

Molly and I will be reprising and updating our talk for the O’Reilly Architecture conference in March next year.

APIs should not be copyrightable

Tue 16 Dec 2014 11:00 EST

Last month, the Electronic Frontier Foundation (EFF) filed an amicus brief with the Supreme Court of the United States, asking the justices to review an earlier lower court decision that allows APIs (Application Programming Interfaces) to be copyrightable. I'm one of the 77 software professionals who signed the brief, although rather intimidated by a group that includes Abelson & Sussman, Aho & Ullman, Josh Bloch, Fred Brooks, Vint Cerf, Peter Deutsch, Mitch Kapor, Alan Kay, Brian Kernighan, Barbara Liskov, Guido van Rossum, Bruce Schneier, and Ken Thompson.

more ...

Replacing Throwing Exceptions with Notification in Validations

Tue 09 Dec 2014 09:41 EST

If you’re validating some data, you usually shouldn’t be using exceptions to signal validation failures. Here I describe how I’d refactor such code into using the Notification pattern.

Garmin Oregon 600

Mon 08 Dec 2014 11:28 EST

I recently bought a Garmin Oregon 600 handheld satnav (GPS) and took it on a vacation, hiking in Switzerland. I find it fun to use, a worthwhile upgrade on my earlier Garmin 60 CSx. It has a bright, clear screen, good battery life, and you can easily find decent open-source topo maps to put on it.


photostream 79

Sun 07 Dec 2014 10:57 EST

Panchgani, India

Sony a6000 with 16-70mm lens

Wed 03 Dec 2014 10:34 EST

A few months ago I bought a Sony a6000 camera because I was tired of the weight on my Canon DLSR. Here’s my informal review of the camera paired with the 16-70mm lens, which outlines why it’s now the camera I like to use most of the time.

Video of Agile Panel at goto Aarhus

Wed 03 Dec 2014 10:23 EST

At goto Denmark this year, I was on a panel discussing the past, present, and future of agile software development. I talked about the past, Prag Dave Thomas took a cynical look at the present, and Jez Humble, Katherine Kirk and Tatiana Badiceanu looked at where it was going.

Videos from XConf Manchester

Tue 02 Dec 2014 10:14 EST

I gave a suite of talks at the ThoughtWorks-organized XConf in Manchester a couple of months ago. They have now put videos up for the three talks I gave (each is around 20 minutes):

  • Agile Essence and Fluency: where I talk about the essential qualities of agile software development and the agile fluency model of Larsen and Shore
  • Continuous Delivery: what this technique is, its ingredients, how it differs from continuous deployment and its three main benefits
  • Microservices: some its common characteristics, its relationship with SOA, how big a microservice should be, the pros and cons of microservices, and the prerequisites you need to have to go live with them.

Contract and End-to-End tests for Microservices

Mon 01 Dec 2014 09:47 EST

Toby Clemson finishes his guide to techniques for testing microservices. He adds two more classes of testing: contract tests test the interface contract of a microservice, end-to-end tests verify the whole system - but are prone to many difficulties. He concludes by looking at how these various kinds of tests should be assembled into an effective test portfolio.

Speaking at ThoughtWorks Rethink in Dallas

Mon 24 Nov 2014 10:58 EST

I’ll be speaking in Dallas on Saturday December 6th for a ThoughtWorks event We have also got Dave “Pragmatic” Thomas in, to talk about the death of agile. I’ll be speaking with my colleague, Molly Bartlett Dishman, about how architecture works in an agile environment.

photostream 78

Sun 23 Nov 2014 17:06 EST

Arnold Arboretum, Boston, MA

Integration and Component tests for Microservices

Thu 20 Nov 2014 10:48 EST

Toby Clemson continues his discussion of techniques for testing microservices, with two more styles of testing. Integration tests probe the interaction a service has with its data stores and external components. Component tests provide a coarse-grained test of the entire service, which can be usefully performed both in-process and out-of-process.

Retreaded: TechnicalDebtQuadrant

Wed 19 Nov 2014 09:29 EST

Retread of post orginally made on 14 Oct 2009

There's been a few posts over the last couple of months about TechnicalDebt that's raised the question of what kinds of design flaws should or shouldn't be classified as Technical Debt.

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.

An Appropriate Use of Metrics

As with any style of process, agile software development has bred lots of interest in metrics. The thinking goes something like this, “We need a number to measure how we’re doing. Numbers focus people and help us measure success.” Whilst well intentioned, management by numbers unintuitively leads to problematic behavior and ultimately detracts from broader project and organizational goals. Metrics inherently aren’t a bad thing; just often, inappropriately used. Pat Kua, author of The Retrospective Handbook, demonstrates these issues and offers an alternative approach that uses metrics well.


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 · 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

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

All Content