Warming up for warmups workshop at XP Days Benelux
Marc and Rob are running a workshop on warmups at XP Days Benelux. It is a workshop to share the ways we warm up for practice. This is what I learnt from drawing warmups.
Read MoreMarc and Rob are running a workshop on warmups at XP Days Benelux. It is a workshop to share the ways we warm up for practice. This is what I learnt from drawing warmups.
Read MoreRob and I ran a workshop at Lean Agile Scotland 2023 on Stigmergy. Two groups thought about how their actions shape their environment, which in turn encourages more actions.
Read MoreWhat’s cooking in QWAN’s kitchen - September 2023.
Read MoreI went to Agile Manchester 2023 because I have a lot of things to think about. And sometimes the best way to think is to have a conversation with someone. At QWAN we like our rubber ducks to talk to, but actual people add that little extra.
Read MoreWhere to focus improvement efforts in an organisation is difficult, especially with software and multiple stakeholders. Should we bet the house on technical excellence? Let's look at it through three different feedback loops, to see if we are focusing on the 'right' stuff.
Read MoreSallyann Freudenberg once asked how do developers communicate during pair programming. Do you talk, draw, or let the code or tests talk?
Read MoreProductivity of software development teams is difficult to get a grip on, but virtually everyone wants teams to be more productive. We often talk to managers, who say they’d like their teams to be more productive, or in their words ‘go faster’. Today we write a bit more about what we see around productivity in software development, and how seeing productivity as a property of a system can help you spot symptoms, fire-fighting and work towards more durable solutions.
Read MoreNo Rules Rules - Netflix and the Culture of Reinvention by Reed Hastings (Netflix co-founder & CEO) and Erin Meyer
Read More“We have no time to improve” is something we hear regularly. Our knee jerk response is the old dutch proverb:
You don’t have time, you make time.
In our experience, improvements pay off faster than people believe, so it is worth making time to improve. See how we use flow distribution to make this visible.
Read MoreWhen you are changing an interface or API that is widely used, it can be tempting to do the change in one go and break a lot of tests at once, assuming you can just fix them. You risk ending up chasing failing tests around for hours, with lack of good feedback why they fail. Furthermore, you risk breaking something along the way, because you have created holes in your safety net!
Read MoreTo get better insights in how a team can grow and what support they need from their organization, we use the Agile Fluency® model and associated tools. In this post, we’ll share how we run an Agile Fluency team diagnostic workshop and how we use systems thinking techniques to arrive at recommendations for both the team and management.
Read MoreRecently we got asked: “How do we (as a development team or larger group) ‘sell’ technical debt to stakeholders?”
Read MoreRead MoreBeing alive
The search which we make for this quality, in our own lives, is the central search of any person, and the crux of any individual person’s story. It is the search for those moments and situations when we are most alive.
– The Timeless Way of Building, p. 41
Read MoreA heuristic is anything that provides a plausible aid or direction in the solution of a problem but is in the final analysis unjustified, incapable of justification, and potentially fallible.
As we spend more time reading code than writing it, we’d like our code to be glanceable. By glancing at the code, we want to quickly understand its intent. Glanceability is a useful property, for production code as well as test code. Test code is there to help us out, so being able to quickly grasp what the test is about will help future us, and others, keep our tests habitable.
Read MoreHow do I structure my tests, so that they are understable and focused on the behaviour of the system under test? Given-When-Then and Arrange-Act-Assert are two similar ways of structuring your test cases to make them easier to understand at a glance. This test structure also helps to keep your test focused on a single concern.
Read MoreWe do not like long test scenarios with loads of different asserts. A test case that has many expectations is difficult to understand when it fails. We then have to dig inside the test’s implementation to see what exactly went wrong where. Before we know it, we fall in to a lengthy debugging session.
Read MoreWe use test names or test descriptions to tell what the test is about: what is the action or event, what is the expected result.
Read MoreOnce we have a failing test, how do we get to green quickly? If we can get away with faking it, we do that. It is sometimes the simplest way to get the test to pass, and to remind us to write the next test case.
Read MoreWhen we have written a failing test, we try to make it work in the simplest possible way - do the simplest thing that could possibly work. We prefer baby steps, so at each step we understand precisely what we are doing, even if we have not solved the whole problem yet. Cheating and faking are allowed.
Read MoreWhere do we start when test-driving a new piece of code? All options are open, but we risk getting stuck because of the blank-piece-of-paper feeling. Because we want to take baby steps towards the end result, use the 0, 1, N guideline: we start with some ‘zero’ or edge case, then make it work for a single case, then generalize it to multiple cases.
Read MoreToday we’re writing about how simple acts improve feedback loops, which has a compounding effect in development teams over time.
Read MoreWrite the last part of your test first: start with the expectation (or the assert) and write the test bottom-up.
Read MoreWrite a test based on how you wish the object under test could be used. Then make it work. Don’t let yourself be limited by constraints and implementation details… nothing is holding you back! Just write it as you’d wish it to be.
Read MoreWhen writing a test, we don’t just think about how to formulate the test. We think about design - the design of the code-under-test and the context in which it fits. Writing a test is an act of design.
Read MoreThe practice of Test Driven Development (TDD) has been around for quite a few years. It was popularized as part of eXtreme Programming 20 years ago. It has been our favourite way of working ever since, helping us to deliver multiple software products successfully. Though it’s simple to explain, it needs practice to master and to reap its benefits.
Read MoreJez Higgins and Chris Oldwood recommended The Practice of Programming book to me when we were working on an enterprise C++ project. It is from the same vintage as Extreme Programming Explained and Refactoring, but quite different. It is multi-language, but some of the exercises are in C
(not surprising, given the authors’ backgrounds). I got started on it last year, but life got in the way, and I needed to practice my C a bit before being able to do anything meaningful in it. Now that Rob and I are prepping for a C++ TDD / Legacy code training next month, I’m in the right frame of mind to also dive deeper into C.
You are happily applying the Hexagonal Architecture pattern. You have hidden the unpredictable outside world behind ports and adapters, so you can speak your domain language. Awesome! But now your domain model grows as well. How do you keep that understandable? Imagine the inside of your hexagon was a cake. How would you slice your domain?
Read MoreIn this post, we will reflect on the practice of using feature toggles. As more and more development organizations are moving towards continuous delivery, we see them using feature toggles more and more. It is, once again, not a best practice, but one that comes with trade-offs. We are not implying feature toggles are bad, but we urge you to be aware of the trade-offs and risks involved, and to take a critical look at how you are using them.
Read MoreIn our previous post on Hexagonal Architecture in a back-end, we mentioned wrapping ID generation and timestamps in concepts of their own. This might feel a bit over-designed, but we have reasons to do so. In this post, we share the trade-offs and rationale behind wrapping the standard stuff in abstractions of your own.
Read MoreHexagonal Architecture allows us to continuously evolve a web back-end. In this post, we’ll show you how we do that. It is a continuation of a series, previous instalments demonstrated how Hexagonal architecture facilitates automated test architecture, and development of a Vue.js based front-end. In this post, we will share how we applied it in the back-end for the Online Agile Fluency Diagnostic application.
Read MoreDeciding What To Put Where is half of the work of software development. What should I put where, in such a way that me and my colleagues will be able to find it back later? Finding a good place for things in code greatly helps or hinders maintainability of the code later on.
Read MoreWe are fans of Test Driven Development (TDD). It has served us well over the years. The TDD cycle - test, fail, run, refactor - is all about getting rich feedback fast, feedback about design decisions, about the test, about your code. We thrive on fast tests. We also want to test-drive our adapter integration and UI tests. These tend to be slow and fragile with low quality feedback, so we try to keep these minimal.
Read MoreIn this next post in our series on Dimensional Planning, we will share how we applied Dimensional Planning to the Online Agile Fluency® Diagnostic application we have been working on since spring.
Read MoreIn a previous post, we introduced the Dimensional Planning technique, and shared how we used this for a product we worked on. In this post, we will go more in depth and show how you can use the roads metaphor not only for releases of a product, but for individual features as well. This provides a fine-grained mechanism for planning and delivering small, valuable increments.
Read MoreSo you want to quickly deploy a small experiment to production. How do you do that? Dokku is one way of doing that. Here are my first impressions.
Read MoreAre you regularly holding retrospectives, but they do not result in improvements? In this post we will highlight how a team can move to a virtuous cycle of continuous improvement.
Read MoreImagine your UI and end-to-end tests could run an order of magnitude faster than they are now? Oh, you don’t have end-to-end tests, because they would be too slow and brittle? I have had that too, don’t worry. Imagine then if you could have cost-effective end-to-end tests. How would that impact your product development?
Read MoreWhen we visit clients and discuss the architecture of their software systems, we often notice that people conflate different concerns under the term ‘architecture’. They tend to mix logical concerns with deployment concerns. Examples of logical concerns would be domain logic, domain dynamics, and how these are connected. Deployment concerns can be for instance REST APIs, components, microservices, and lambdas. The recent ‘cloud native’ movement has made this even worse, especially with serverless infrastructure concepts.
Read MoreUpdated 25-05-2021 - added link to the original Test Builder pattern post by Nat Pryce
Read MoreTesting a command line interface (CLI) should be just like testing a REST interface. A CLI is an adapter concern that we can test drive, separate from the business logic. In this post I’ll show an approach to test drive the command line interface of an application in Python.
Read MoreIn this post, we will explain how Dimensional Planning can work by sharing a story of how we applied it in a project and how it helped us to steer the project towards delivering its desired outcomes in time.
Read MoreI was wondering if Lean Agile Exchange on 10 and 11 September would be as much a Community of Need conference as e.g. Lean Agile Scotland or Agile Cambridge were. I was not disappointed.
Read MoreIn a previous post, we elaborated on why and how we apply Hexagonal Architecture in front end applications.
Read MoreIn this post, we will share another benefit of looking through the Hexagonal Architecture lens: it supports making decisions about the architecture of automated tests in your application landscape. It can guide you in questions like:
Read MoreFront ends tend to start out simple, often as ‘just’ a form or a grid showing data that comes from a backend. It looks like ‘just’ a visual layer on top of backend APIs. When a front end evolves and grows, it inevitably becomes more complex. We then need to take a good hard look at the UX/UI and overall architecture.
Read MoreUpaated 21 november 2020, added some more notes on Simon Wardleys segment.
Read MoreContinuous delivery is valuable, but where do you start? At the start of a greenfield development you have no software, and if you had any software, you would not know how to put it into production.
Read MoreStarting new product development with the question ‘What can we leave out?’ may seem paradoxical. We do this to start a conversation between customers and developers. As we go we develop a shared language, so that value can be delivered early and often. This is called Dimensional Planning.
Read MoreOver the years, we have done our share of UI and front end development. Long long time ago with SmallTalk, Visual Basic and Delphi, building web applications with server side rendering and React, and being involved in Angular projects at several clients. Recently we have been building front ends based on Vue.js. In a series of blog posts, we are going to share how we approach (hexagonal) architecture, test driven development, and incremental design in the front end.
Read MoreUs three, having fallen into a conversation with code:
Read MoreHexagonal Architecture, also known as Ports and Adapters, is getting quite a bit of (well-deserved!) attention recently, especially in the Domain Driven Design community. Hexagonal Architecture is not a new thing: it was originally thought up by Alistair Cockburn (of Agile Manifesto fame) in the 90ies.
Read MoreWe are sponsoring the Lean Agile Exchange Conference happening online, 10 and 11 September (UK daytime).
Read MoreEven when it doesn’t feel like it.
Read MoreI enjoyed watching Container Solutions’ Jamie Dobson present an introduction to their pattern language for strategy yesterday, titled “A framework for strategy, making decisions in turbulent times”. I recommend viewing the recording, ‘A Pattern Language for Strategy’. Below are my main takeaways.
Read MoreWork has, once again for me, become more personal. I’m getting back into writing. This is a quick, rambling, update, so you can at least get some idea of what we are up to at the moment.
Read MoreYesterday I thought I pushed out another iteration of our attempt at making the QWAN website more accessible. Turns out I didn’t. While adjusting details, reading CSS and accessibility documentation and blogposts, I missed the fact that the shiny assets pipeline I added does not actually build on github.
Read MoreHappy new year! We are restarting open enrollment courses this year. The first one up is our test driven Java course. This will take place in Utrecht, Netherlands in March 19 and 20 in 2020.
Read MoreMarc and Rob are running a Hexagonal Architecture workshop this thursday at XP Days Benelux, tickets for XP Days have sold out, but apparently there is a waitlist. So who knows, you still might be able to get a ticket.
Read MoreRob and I participated in the brand new Agile Camp NL conference, a open-space-y conference on agile. Kudos to Karlijn Moll & Thomas van Zuijlen for running the conference and creating such a nice atmosphere!
Read MoreThe QWAN site currently is not accessible for blind users. If you were to use a screen reader, the page might just as well be blank. A blind colleague mentioned to us a while ago that they could not read the home page at all. I have just started improving it.
Read MoreTo remind myself that I often find it easier to encourage others to change than to change myself, I have been using change is for other people as a mantra,
Read MoreI was planning to use my keys left for something different today, but found myself in an associative storm of tweets, possible conference sessions to be proposed and some situated software I’ve been working on for a few years, intermittently.
Read MoreFor a production application I’m using PUX, a purescript wrapper around React. In the way we use it for WeReview we are experiencing performance and usability issues, beyond the slow rendering.
Read MoreRed-Green-Refactor is broken, because the psychological reward happens at green. When you get that reward, you feel the task has been completed, and are inclined to stop. Therefore refactoring is a lot rarer than it should be.
Read MoreFeature toggles - no thank you, I would rather ship piecemeal.
Read MoreTLDR When you want others to improve how feedback loops work in your organisation, it is very effective to amplify things that work in other groups. Liz Keogh pointed this out during Elizabeth Hendricskson’s session care and feeding of feedback loops at eXtreme Tuesday Club London two weeks ago.
Read MoreHot reloading a Halogen app with Parcel requires almost no configuration. Demo
Read MoreDo you have pending tests left over from yesterday? Better delete them before they grow stale.
Read MoreA liveblog of Don Reinertsens’ Agile Cambridge keynote
Read Moreliveblog: the accidental sysadmin (starting at 28 minutes into the session)
Read MoreThis is the second part of my writeup of the session I did at XPDays Benelux and XP 2016 in Edinburgh called “Bourne Again” on bootstrapping a unit testing framework in the Bourne Again Shell (bash). This series of posts walk you through the steps I took in 75 minutes of programming.
Read MoreHere are some things we (re)found worthwile reading this week.
Read MoreHere are seven things we found interesting reading for this week.
Read MoreI did a public programming session at XPDays Benelux and XP 2016 in Edinburgh called “Bourne Again” on bootstrapping a unit testing framework in the Bourne Again Shell (bash). This series of posts walk you through the steps I took in 75 minutes of programming.
Read MoreA live blog of Mary Poppendieck’s xp2016 keynote.
Read MoreElizabeth Hendrickson keynoting on eXtreme programming at scale, XP2016 Edinburgh. Elizabeth works as VP R&D for Cloud foundry development at Pivotal.
Read MoreLast week Rob, Marc and I went to Software Circus, a new conference on programmable infrastructure.
Read MoreA Mass Pairing is a coding dojo that takes over all sessions for a slot during a conference. We’ve found it a great way to introduce participants to each other, and explore an aspect of programming at a conference. We had some pleasant suprrises, and still have some questions.
Read MoreI’m glad to be part of the organizing cabal behind FP Days London this year. I hope to have some time to go to sessions. I’ve programmed in Clojure, Scala and Haskell this year, and there’s something from all of that on the programme, and it’s cool to be able to find out more about languages I haven’t used in anger yet like F# and Erlang.
Read MoreSo we are trying a leaner way of creating conference programs . How is it going so far with /dev/summer, the free one day event for developers? We took just two weeks to advertise the program of /dev/summer. Not too bad. We’re not facing a deluge of sessions on one hand, on the other hand, we got some nice sessions coming in, so after tomorrow night we probably can put together a program without turning many sessions away. On the one hand it’s great if you can be selective, on the other hand, it feels wasteful to have people propose and review sessions and then only run half or less of them. On the other, other hand, this also enables us to give feedback fast to the presenters.
Read MoreI’ve received a few questions as to what we are exactly looking for in /dev/summer talks or sessions. Imagine you are talking to another developer about what you do (can be a tool you use or make, a practice etc.). This developer may or may not have heard about your tool, but has not had the time to explore it in depth, let alone try it out in a real situation.
Read MoreWe’ve always been active in the UK, even more so now Willem has moved to the UK (although he is doing work on the continent as well).
Read MoreI’ve been wondering for a long time if many of the review cycles for conferences are not overly long. For instance, Rob and Marc are involved in XP Days Benelux. The XP Days call for sessions opened today. The conference itself is more than half a year from now. If you propose a session today, will you be as interested in the topic half a year from now, or are you occupied by something else?
Read MoreInspired by Ollie Charles 24 days of Hackage, I decided to try my hand at writing a series of daily blog posts about my experience developing a web application in Haskell.
Read MoreA hands on tutorial at the upcoming Joy of Coding conference in Rotterdam, The Netherlands, on March 7.
Read MoreThis week Willem and I presented at the Modern Management Methods NL conference (formerly known as Lean Kanban NL). We did a presentation about applying frameworks like Cynefin to make sense of what’s happening, in your team, your project, your organisation…
Read More