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 other updates

ThoughtWorks recruiting event in New York

Tue 07 Feb 2012 15:17 EST

This weekend, ThoughtWorks is hold a recruiting event in New York City. The idea is to compress the whole recruiting cycle down to a single weekend. The coding problem will be on Saturday, and those that pass that hurdle will be invited back for interviews on Sunday. The idea is that we’ll get job offers to any successful candidates by Sunday evening. I’ll be there for the first couple of hours on Saturday.


Infodeck on NoSQL and Polyglot Persistence

Tue 07 Feb 2012 10:26 EST

Pramod and I have put together a short infodeck (pdf) outlining the reasons why NoSQL databases are an important new dish on the software development menu. It’s directed at non-technical managers and customers to provide an outline of why the data world has seen this new entrant and some direction as to the kinds of projects which should give them a closer look.


photostream 20

Sat 04 Feb 2012 16:54 EST

Stowe, VT


Rebecca and I will be Keynoting at QCon London

Thu 26 Jan 2012 10:24 EST

QCon invited Rebecca and I to do a keynote at QCon London (March 7). Over the last year or so we’ve been seeing more and more of a change in how organizations think about data, so that seems a natural choice to talk about. Our clients are seeing larger volumes of data, that they need to analyze more quickly and more cleverly. We’re seeing different technologies for data storage that have loosened the vice-like grip of relational databases. And we find our profession needs to start thinking about what our responsibilities are in managing all of this information.


Rebecca and I talk about DSLs on Software Engineering Radio

Thu 26 Jan 2012 09:36 EST

I’ve long been a fan of the podcast series Software Engineering Radio. The team there have built an excellent series of podcasts on various aspects of software development and I often listen to them while taking my afternoon walk. So I’m glad to get a spot on there myself. In this episode I’m on the program with Rebecca Parsons, my colleague and co-author of my DSL book to talk about DSLs. We talk about what DSLs are, the differences between internal and external DSLs, and when you should (and shouldn’t use DSLs). The episode is hosted by Markus Völter, who, of course, is a considerable expert on DSLs too - so it’s really a three way conversation on the topic.


Bliki: CharityCodeJam

Wed 25 Jan 2012 09:39 EST

Over the last couple of years several of my colleagues have been organizing code jam events where developers get together to write software for charitable causes. A good example is a regular code-jam in New York that works on RapidFTR. Chris George, a ThoughtWorker based in New York, helped organize a one-off event in New York in August 2010. The group didn't get as much done on the day as they had hoped, but in a bar afterwards decided to try to get together more regularly. Since then they've been meeting every week. It's a small group, still mostly ThoughtWorkers and friends, with a core of 3-4 people rising to a dozen when we've had a big project in town.. (Chris is happy to have more people join the group, so if you are interested drop him an email.)

Many people have found these events to an enjoyable way to use our skills for purposes that we find rather more fulfilling than many day jobs, and a way both to learn new skills and learn from a different group of people. So I thought I should share our thoughts on how to set one up.

more ...


photostream 19

Sun 22 Jan 2012 19:49 EST

Boston, MA


Bliki: AggregateOrientedDatabase

Thu 19 Jan 2012 09:11 EST

One of the first topics to spring to mind as we worked on NosqlDistilled was that NoSQL databases use different data models than the relational model. Most sources I've looked at mention at least four groups of data model: key-value, document, column-family, and graph. Looking at this list, there's a big similarity between the first three - all have a fundamental unit of storage which is a rich structure of closely related data: for key-value stores it's the value, for document stores it's the document, and for column-family stores it's the column family. In DDD terms, this group of data is an aggregate.

more ...


An open letter to Pearson opposing their support of SOPA and PIPA

Thu 12 Jan 2012 14:04 EST

Jez Humble and I have written an open letter to Pearson opposing their support of the SOPA and PIPA bills currently under consideration from the US congress.


Bliki: DiversityImbalance

Wed 11 Jan 2012 10:57 EST

Although it's easy to become accustomed to it, it's pretty obvious the software development world has some serious issues in diversity. By this I mean that we have some notable differences in proportions of people compared to the general population. One of the most obvious differences is the low proportion of women, which is true all over the world (albeit noticeably less so in China). In the US, where I spend a good chunk of my time, the lack of African-Americans is also obvious. There's a lot been written on why such imbalances might exist, and what might be done about it. But here I want to concentrate on a more fundamental question - does it matter?

more ...


photostream 18

Tue 10 Jan 2012 18:25 EST

Lindau, Germany


Bliki: NosqlDefinition

Mon 09 Jan 2012 09:30 EST

As soon as we started work on NosqlDistilled we were faced with a tricky conundrum - what are we writing about? What exactly is a NoSQL database? There's no strong definition of the concept out there, no trademarks, no standard group, not even a manifesto.

more ...



Domain-Specific Languages

I’m a serial book writer and over the last few years my writing has focused on a book on Domain-Specific Languages. DSLs are small languages targetted at a particular task. Most programmers will come across many of them (examples include regular expressions and CSS). Despite their popularity they’ve never been taken very seriously and I suspect they are underused. My aim is to explain a variety of DSL techniques so you’re better equipped to decide when and how to use DSLs in your work.


Continuous Delivery

For a long time I’ve been a champion of Continuous Integration which reduces the integration risk by integrating early and often. We’ve found CI to be a core technique at ThoughtWorks and use it almost all the time. 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 techniques to reduce this risk, moving closer to our aim of 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.

more…


Agile Software Development

I’ve been an advocate of agile methods for software development since their early days, and ThoughtWorks has applied these ideas with success for a decade. The New Methodology describes the essential characteristics of agile methods, Is Design Dead looks at the role of design. I’ve also written about the lessons we learned from doing agile on our offshore projects. For these and other pages on agile - consult my agile guide page.


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 1500 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 and Selenium, and to products. We have Mingle for project collaboration and mangement, Go for Continuous Delivery, and Twist for automated functional testing.

Despite the Great Recession, the last couple of years have been our most successful - and we are always looking for more people to join us.

Upcoming Talks
Mar
8QCon: London


tags

API design · academia · agile · agile adoption · agile history · analysis patterns · application architecture · application integration · bad things · build scripting · certification · clean code · collaboration · conference panels · conferences · continuous integration · database · delivery · design · dictionary · distributed computing magazine · diversions · diversity · documentation · domain driven design · domain specific language · domestic · encapsulation · enterprise architecture · evolutionary design · extreme programming · gadgets · ieeeSoftware · internet culture · interviews · language feature · languageWorkbench · lean · legacy rehab · metrics · microsoft · model-view-controller · 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 · web services · website · writing

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

All Content