Valuable Products

The problem with talking about the “value” of software is that it is often perceived differently by people using it and people building it. Users increasingly expect software to change. However, when building software products, we (the creators) often fail to accommodate these expectations, focusing instead on the elusive “finished” product. That creates a tension between what users want and what we deliver.

Read More

The Innovation Slider

Every time I meet a client to discuss their new project plans, I encounter the same question: "I want my software to be unique and different. How much will it cost?”. The problem is that unique products and true innovation are difficult to estimate, and even harder to accurately budget for. Helping a business find the balance between the innovation they need, and the predictability they want led me to create the Innovation Slider, a tool you can use to harmonise the split between innovation and predictability in software projects.

Read More

Economy of Tests

A common complaint with teams that first try their hand at automated testing, is that it is hard, costly, and not worth the effort. On the other hand, supporters say that it saves them time. In this post, we’ll try to add some nuance to the discussion. We’ll take a look at how different levels of automated testing affect the cost of development, both in the short and the long term, for both greenfield and brownfield projects. Finally, we’ll look at a simple strategy for introducing tests and migrating them across test levels, in order to reduce maintenance costs.

Read More

Introducing Modelling by Example

For the last year I have been experimenting with the new approach to a Behaviour-Driven Development, which could be summarised as "Ubiquitous Language is a thing again". The core premise of this approach is that if you take Ubiquitous Language seriously and push for it in your scenarios, you open the door to doing a Domain-Driven Design while you're doing Behaviour-Driven Development's red-green-refactor cycle. By embedding Ubiquitous Language in your scenarios, your scenarios naturally become your domain model, which you can use to develop the most important part of your application - a core domain.

Read More