Abstraction came back to mind recently, when I tried some first experiments with a fenomenon that’s been around for a while - Domain Specific Modeling. Creating a domain modeling language, based on real life concepts for a domain and generating code directly from models created in that language gives a whole new meaning to ‘using abstraction to make things easier’. This is in line with Simonyi. I promised to get back to this, and I guess now I am - Domain Specific Modeling is very much kin to the software factories he first defined at Microsoft.
Using the right level of abstraction is subject to long discussions, or at least it can be. However, DSM seems to take an approach where it works. The domain specific language, combined with an underlying framework allows you to discuss an application with a customer and directly generate demonstrable code from it. It takes an initial effort to get there, but with a properly choosen domain and DSL, it can really work. Check out http://www.metacase.com for real examples.