A software product line infrastructure is one where a set of common software components is enhanced with a set of case-specific ones to build product variants based on technical, industry or user requirements. Implementing such an infrastructure is more expensive in the short run but gives a better return on investment in the long run – especially as your product portfolio increases.
One of the Principles of the Agile Manifesto states that ‘Simplicity – maximising the amount of work not done – is essential’. This principle has effectively been simplified as ‘Over-engineering is wrong’.
While trying to explain the tension created by trying to do Product Lines and Agile at the same time, I had a personal epiphany. I’m sure other have had the same thought but it seemed new to me – it’s impossible to do just the right amount of work in Agile. We either do too little, and accumulate debt in the process – or too much work, leading to over-engineering. I think this must be because we don’t have the information to let us know which we are doing, i.e. the only way of avoiding either mistake is to have knowledge of future events.
How I feel about it now is that over-engineering is the price we pay to avoid accumulating debt and vice versa. We shouldn’t feel too badly about either because we must be doing one or the other in any given case.
What do you think? Can you ever do ‘just the right amount of work’ in Agile?