• 15 years ago I specialised in content management systems.  My colleagues and I found ourselves wanting to program at a lower level and effectively reversed engineered the way that the CMS interacted with the database in order to get the desired result.
    When we gained more experience we found that the CMS supported what we wanted to do natively.  Those man weeks we had spent coding, testing and integrating could have been achieved in hours if we had known more about the CMS features.  There was also an aspect of trusting the CMS framework. 

    As developers we were too quick to dive down to the low level.  This is a pattern I have seen in many applications.  Diving down into the code/script facility of ETL tools, bypassing the features of an ORM that actually turns it into a safe productive tool (usually the letter M).  In the SQL Server world there is inappropriately writing SQL in a way to force an execution plan thus blocking any benefits that come with upgrades to the query engine.

    The level of programming that is required for standard business computing is far more accessible now than it ever was before.  Things that are simple drag/drop with simple method calls used to require serious heavy-weight programming and an uphill struggle with MFC.