Reading Lean Software Development, I stumbled upon the following quote.
As a keynote speaker at a software conference, Enrico Zaninotto, an Italian economist, pointed out that the underlying economic mechanism for controlling complexity in just-in-time systems is minimizing irreversible actions.
The notion of “minimizing irreversible actions” strikes me as a better way of capturing that whole idea than the more established “last responsible moment“. The latter suggests that you should delay making decisions for as long as you can. I feel that sends the wrong signal. You can make decisions. You must make decisions. Not making a decision is a decision in itself. Just don’t make decisions that you cannot change — keep your options open. By thinking that you must not make decisions until the “last responsible moment”, it is easy to delay the decision longer than is actually responsible.
I believe this is especially true for software architecture. In the name of “last responsible moment”, many developers avoid making architectural decisions, thinking the architecture will emerge by itself. But to quote Grady Booch in a response to a letter “The Relevance of Architecture” in IEEE Software (Volume 24 Number 5).
Every system has an architecture; some are accidental, others intentional.
Which is yours?