Take advantage of the inversion of control pattern to loosely couple the components of your application and make them easier to test and maintain. Both inversion of control and dependency injection ...
A few weeks ago, I wrote about how a good software team will defer decisions as long as possible. Smart teams will design and build systems that don’t lock them into any particular implementation ...