Found this draft post from: “Last edited on April 20, 2009 at 4:10 pm” … Wonder where I was headed? Hah, I’ll add a 2011 conclusion.
While we have enjoyed employing Separation of Concerns at many levels:
- Design Patterns
- Layered architecture
I wonder if it can go farther to assist us in developing robust applications.
I have been preaching a “Dual Architecture” for eons…
- Application architecture (features)
- Technical architecture (code, framework)
However, I think this could be taken a bit further.
We use source code, classes, tables to be an abstraction of the underlying true system being run. The source gets converted… the classes get converted, database tables get converted… to something that the machine knows how to deal with.
User gets the functionality expected, the system does the grunt work.
The user is not too worried about the “how” it works, but rather more so that it simply works.
With software, it would be nice to be able to work at a similar higher level of intention, or functional need, with less regard to the nitty gritty detail.
After all, with most business applications, the fastest moving component is technology continually changing.
A major, large-scale SoC is to separate the Functional needs from the Technology.
Users care little if the app is built on Java, .NET, Ruby, COBOL…
Of all the languages and frameworks that I have used over the past 30 years, I would say Ruby and Rails (and it’s community) with MongoDB/MongoMapper has come the closest to allowing a greater portion of development time and thought to be spent on solving the customers needs and less time on the infrastructure nuts and bolts.And it is more than the language (Ruby) and the framework (Rails). It is the entire culture and constellation of tools and gems and community that makes a difference.
In addition, it feels like I can code more to the intention of what I need the software to do, and less about the details of the language getting in my way.