Starting an application – getting it from a state of uselessness in the form of *.dll's sitting on the hard-drive, to a state of in-memory, ready for use, cached for performance, synchronized for scalability, etc. – takes a lot.
And yet…it's usually left to just a development process of not much more thought than fiddling till the the yellow screen of death is finally gone.
That's not a strategy.
Study after study after study clearly demonstrate that the reason for projects being unmaintainable is…making monolithic software with tight coupling.
Yet…year after year, I watch enterprise developers start new software projects choosing technologies that promote tight coupling.
Stop!
Using a Dependency Inversion Container system – such as Unity/, Ninject/ or any other is a prerequisite to delivering maintainable value to a client.
It's so important, so basic a competence, that at this time I will not lead or be involved in any way on a software project that does not use it.
Dependency Inversion solves many problems – but brings with it challenges – especially at the initialization stage.