Martin Fowler, Thoughtworks‘ Chief Scientist, and Jim Webber (SOA Evangelist) were speaking at QCon last night in a talk entitled “Does my Bus look big in this?” Martin Fowler’s books on software patterns, particularly Patterns of Enterprise Application Architecture, probably get the most use out of my collection, so I’m particularly interested in what he has to say.
I have personally experienced what I believe is a lot of unnecessary complexity in Enterprise software, and it is refreshing to see Martin and Jim cut through this to come up with a set of principles for effective (lightweight) delivery. I’m also pleased that ThoughtWorks are actively promoting (J)Ruby on Rails in an Enterprise context as this seems a natural successor to “traditional” Java development, and in my opinion they seem to be one of the most enlightened consultancies on how to deliver Enterprise software effectively. (They’re also agile.) Martin and Jim’s recommendations are as follows:
- Adopt an agile approach with two main notions: (1) accept change as an inevitable part of the software process, and design processes accordingly; (2) the most important part of the process is the people.
Various techniques are becoming more prevalent to support this notion (see Test-Driven Development: A J2EE Example, Pragmatic Unit Testing, Refactoring or Applying Domain-Driven Design and Patterns).
- De-risk projects by beginning with a small system that works.
- The web is middleware (and low risk): why bother with proprietary middleware when you can use the internet?; provide innovation at the edges, and “heavy hitting in the cloud”
- Services host business processes
- Business people own our architecture
- Prioritise and deliver services incrementally (it might be messy but at least it’s delivering business value)
The key to good software design isn’t to allow for everything you think you’ll want it to do (You Aren’t Gonna Need It), but to enable it to do things you haven’t thought of yet.
Some proposed alternative definitions:
SOA = databases wrapped in WSDLs being orchestrated
ESB = Erroneous Spaghetti Box
Martin and Jim don’t like ESB’s … but if you really really feel you need one, use a proxy server (e.g. Squid).