Monday, 27 October 2014

Is Your Team Responsive to Change?

Change is a constant in software development and business. Successful organizations are often highly responsive to change. As a developer, you play a crucial role in providing this vital capability.

A company needs to keep pace with the latest innovations and be able to quickly deploy and iterate their own innovations. That’s why it can be super-important to be responsive to external changes - like competitor innovations or customer demand, and internal changes - like new insights and innovations that have more potential than existing items on the product road map.

Unfortunately it’s not enough to assume that your *agile* process will magically make you responsive. In fact I encourage you to reflect on your culture, and your software delivery process, and be honest with yourself; is your process really just waterfall software development masquerading as cargo-cult agile?

I’m going to list a few indicators that help me to understand whether a team’s culture engenders responsiveness. You can use them to ask questions about your team. But first I want to elaborate on why responding to change is important to you as an individual and the companies you work for.

Monday, 22 September 2014

A Stakeholder's Thoughts on Developers, Collaboration, and DDD

As my career has progressed I have gradually grown from a programmer into a person who uses collaboration and technology to solve business problems. Learning about Domain Driven Design was one of the most important steps I took in achieving this, because it taught me to focus on business problems and collaboration with non-technical people.

In this post you'll see some insights that may help you to grow into a (better) leader and business problem solver. They come from a recent interview I gave to Sarah - a product owner and travel & holidays domain expert.

Sarah shares her thoughts on collaborating with developers, and provides insights into what she perceives as a good developer. I hope you find this information useful and are encouraged to spend more time learning about problem domains and business priorities.

Thursday, 21 August 2014

Conference Video Recommendations

I love watching conference videos, and certainly find it's a great way to learn and keep upto-date on a diverse range of topics. In this post I'll share a few of my favourite talks, and give you links to all the conferences I am aware of.

Normally I pack my tablet full of these talks and watch them during my commute. So you don't have to find lots of time each week, you could try and make productive use of your journeys to and from work like I do.

Please let me know if you have any suggestions or recommendations... I hope you find this list useful.

Sunday, 27 July 2014

Continuous Delivery with Thoughtworks GO and Docker

I'm finding Thoughtworks GO and Docker to be a great combination for managing the building, testing, and deploying of applications. A nice bonus is that both of these tools are completely free and OSS.

GO provides an attractive GUI that lets you see your build and deployment history or trigger manual deployments. When did you last deploy to live? what git commit did you deploy? who deployed it? GO helps you to answer all of these questions very easily.

When it comes to running tasks, like tests, delegating to Docker removes a whole category of installation and configuration headaches. All I need to install on a GO agent is Docker - any dependencies needed by an application are installed within a container. You never need to touch the host OS.

Thursday, 26 June 2014

How I've Been Learning Python

How do you learn a new programming language quickly and efficiently? Often it’s not just the language; familiarity with frameworks, tooling, community, and culture is also crucial if you want to be effective. This post skims over how I’ve addressed those concerns whilst learning Python over the past months.

Python's official logo

Thursday, 29 May 2014

A Strategy for Building a Software Team

Software development is hard. Putting together a team of people who can do a good job of it is no easier. Having spent time with a few companies, though, I have seen certain approaches that appear to correlate with high-performing teams.

This post is my team-building strategy based on those ideas I've seen work... and a few of my own.

How do you build a winning team?
(with permission from

Monday, 26 May 2014

Come and Join the Innovative DDD Community

Domain Driven Design went out of programming fashion a long time ago, but in my experience many of its principles and practices can provide significant benefits to most software projects. That’s why DDD still has a passionate community who are continually evolving the way development and the business can work ever more synergistically.

In this post I am going to skim over some DDD innovations to show how being part of the DDD community can enhance you as a developer and compel you as an innovator.

Since the inception of DDD there have been stunning developments on both the social and technical sides of DDD. Alberto Brandolini has conjured up Event Storming - an efficient collaboration technique enabling technical and non-technical people to rapidly explore domains.

On the technical side, respected figures like Greg Young and Udi Dahan have been showing us ways to make DDD applications scale to huge loads, using event-centric techniques like distributed pub/sub and Event Sourcing.

DDD Connects Business and Technical