As developers, we're familiar with the endless pains that result from
maintaining overly complex systems. Some complexity is accidental, so we
continually strive to remove its overhead from our application. The latest
crop of frameworks and dynamic languages has demonstrated just how far simple
implementations can go. However, many applications have an essential
complexity that cannot be further reduced without sacrificing end-user
functionality or integration.
When trying to figure out how we make our workdays easier and our programming
hours more effective, the key questions we are faced with are:
How can we reduce accidental complexity when building an application? How can
we manage the inherent complexity that's there? Solutions to this problem
surface as innovatio... (more)