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.
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.
Sat 21 Nov 2015 13:18 EST
Sat 21 Nov 2015 12:08 EST
I need to find all the photos that I've taken in November over the last few years. I can't express this query easily in Lightroom, so I figured out how to write a Lua script that would make this query. These notes describe what I did, as someone who had never before programmed with Lua, nor used the scripting environment in Lightroom.
Thu 19 Nov 2015 10:38 EST
I now move onto the second, more awkward, section of the imperative code to refactor to an adaptive model. This shows how I need to massage both the imperative code to make it fit the model's structure better, and the model to support more capabilities. I then finish by comparing the imperative and active model approaches.
Wed 11 Nov 2015 10:55 EST
Our regular programming languages are where we usually like to keep our logic, but there are times when it's useful to embed logic into a data structure. Logic in a JSON file can remove duplication when that same logic has to run on multiple platforms that use different languages. This essay looks at how to refactor logic from imperative code into such a data structure.
Sat 31 Oct 2015 05:34 EDT
Mon 19 Oct 2015 09:37 EDT
In the software industry we hear a lot of discussion about the pros and cons of remote work, and a recent outbreak of that finally got me to write my thoughts down. I point out that there's distinct patterns of remoteness, which yield different trade-offs and varied techniques to make them work. I recognize that we lack any conclusive evidence on effectiveness, but sense that most people are more productive when co-located, but even so organizations can build more productive teams with a remote working structure.
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.
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 be 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 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.