I’ve been meaning to write about a comment I saw late last year: "Program simply, but design with complexity." That phrase caught my attention: it seemed to me a good description of the Force.com platform, which is stunningly complex where you can’t see it so that it can behave simply where it matters.
The developer winds up being able to think about what the application should do, not how to manipulate the technology to make that happen. Simpler technologies require more continual effort on the part of the developer to use them appropriately, or even just use them correctly.
Complexity is not the goal, but neither is it the Ground Zero of application development that programmers should flee before the inevitable explosion. Complexity is a cost, to be sure, and it should be put in the place where it costs least to have it — in the same way that it makes sense to use electric cars if you can use a waterfall, somewhere far away, to generate the electricity and thereby avoid polluting cities’ air.
In the world of Platform as a Service, complexity may become more OK — as long as you only have to incur that complexity in one place to make its benefits available to thousands (or tens of thousands) of customers.