There are a variety of techniques for breaking software down into pieces and making software development more efficient. Many of these techniques have been sort of... and everybody got excited about but very little benefit was actually derived once the thing was put into practice