Agile: Why do we integrate early?
One of the inevitabilities of most projects is that at some stage there is going to need be some sort of integration.
The likes of Alistair Cockburn in Crystal Clear and Andy Hunt/Dave Thomas in The Pragmatic Programmer talk of the need to do integration early rather than letting it wait until later, but why?
Get the pain out the way
To some degree every time we try to integrate there is going to be some level of pain - for me it therefore makes sense that we take this pain early on when we have the chance to do something about it rather than leaving it until later and being surprised at the problems it causes.
We never really know that the system actually works as expected until it is fully integrated, and integration inevitably leads to situations which we didn’t know existed previously.
The potential problem we need to be careful about here is that we still deliver features with business value while doing our early integration otherwise we end up with the problem that we seem to be delivering absolutely nothing.
Code can be more example driven
When we integrate later on one problem we face is that we have to try and assume what the integration will be like rather than actually knowing.
While it is possible to somewhat isolate ourselves from other systems, at some stage we need to integrate and this can typically lead to different data flowing through, in a different format than expected and we need to handle these differences.
If we integrate late we are putting ourselves into a guessing game of what we think we are going to integrate against and this leads us down the path of assumption driven development.
This inevitably leads to us coding for some situations which won’t actually happen when we are integrated and missing out some situations which we didn’t actually know could happen until we integrated.
In lean terms inventory is a product or part of a product which is basically in a state of waiting - either waiting for something to be done to it or waiting for a customer to buy it.
I think we can find a similar analogy in terms of story cards where a part of that story is to integrate with another system for example.
When we do the integration work needed later on the additional problem we face is that we naturally lose some knowledge in the time that the story is sitting waiting.
In addition there is also wasted time as people regain the context of how the integration fits into the overall functionality of the story.