World Wide Webber


My Books
REST in Practice: Hypermedia and Systems Architecture
Now available on Rough Cuts
Developing Enterprise Web Services by Sandeep Chatterjee and Jim Webber
Amazon:
US, UK, Canada, Germany, France
Now available: Korean Edition

My Bookshelf
Programming Clojure by Stuart Halloway

RESTful Web Services by Leonard Richardson and Sam Ruby
John Moe on Guerrilla SOA
Posted: 30 October 2009 @ 14:42 UT from Seattle, US

John Moe has written up a taxonomy of various SOA styles including Guerrilla SOA. I think John's is a useful taxonomy, I completely agree that Guerrilla SOA is preferable to Gorilla SOA. Following on from John's essay, Dave Chappell argues on the SOA mailing list that much of the cost in an SOA project stems not from middleware, but from people. And that actually SOA without middleware leads to reinventing wheels which is then left behind by Guerrilla consultants.

I'll take that as a nod in my direction since last week Dave and I participated on a panel at the SOA symposium in which similar language was used. Let's start by breaking the argument down into its two constituent parts:

1. Cost of middleware versus cost of project

On the cost front, I can provide some anecdotal evidence based on recent experience. I was part of a team approached by a telecomms service provider. These folks are all about carrier grade service, and massive throughput - a challenging and frankly daunting area of computing.

Prior to our first project starting, that client had already undertaken some analysis of their future architecture (which needs scalability of 1 billion transactions per month) using a blue-chip consultancy. The conclusion from that consultancy was to deploy a bus to patch together the existing systems, and everything else would then come together.

The upfront cost of the middleware was around £10 million. Not big money in the grand scheme of things, but this £10 million didn't provide a working solution, it was just the first step in the process that would some day, perhaps, deliver value back to the business, with little empirical data to back up that assertion.

Understandably, this pitch fell flat. £10 million spent and no change in production systems was simply unacceptable. So instead the chief techies in the organisation reached out to my crew.

My (small) team spent a couple of weeks working through some analysis of the problem, including some simple mathematical models of how the problem domain scales over time, and how the solution would have to compensate. We took the time to understand how to incrementally alter the enterprise architecture to release value early, and we proposed doing this using commodity HTTP servers at £0 cost for middleware. Importantly we backed up our architectural approach with numbers: we measured the throughput and latency characteristics of a representative spike (a piece of code used to answer a question) through our high level design, and showed that both HTTP and our chosen Web server were suitable for the volumes of traffic that the system would have to support.

Armed with that empirical data, we went ahead and built the first service in the ecosystem. It took us in total around four months with a modestly sized team (less than 10 folks, day-to-day), and as we delivered software we tested it heavily against both functional and performance requirements.

I'll repeat that, because it's important: we performance tested the solution every single day to ensure that we would always be able to meet the SLAs imposed on us by the business. We were able to do that because we were not tightly coupled to some overarching middleware, and as a consequence we delivered our first service quickly and had great confidence in its ability to handle large loads. With middleware in the mix, we wouldn't have been so successful at rapidly validating our service's performance. Our performance testing would have been hampered by intricate installations, licensing, ops and admin, difficulties in starting from a clean state, to name but a few issues.

Based on the success of the first service, we  began work on the next project. Since we'd already proven the technical patterns in terms of scalability and reliability, the green light for the next service was immediate. For the next service, the problem domain was slightly more intricate, and the team slightly larger, and the software took a 5 months to go from nothing to production (that is: serving customers and earning money). Again we were able to continuously build and performance test the system, and show it running - weekly - to our stakeholders. Nothing was invisible because there was no bus which could hide problems.

When this service went into production, it immediately started to generate revenue. The combination of the two services we deployed incrementally took strain off other parts of the system, and allowed uptime to soar. The last I heard a few weeks back, the system as a whole was dealing with several hundred percent more transactions per second than before we started.

But what's particularly interesting, coming back to the cost of people versus cost of middleware argument, is this: we spent nothing on middleware. Instead we spent around £1 million on people, which compares favourably to the £10 million up front gamble originally proposed. To be explicit:

Total cost of working software in production: £0 (middleware) + £1,000,000 (staff) = £1,000,000
Total cost of middleware approach: £10,000,000 (middleware) + £? (staff)  = > £10,000,000

If Dave's point is accurate, that people cost more than software, then the minimum cost for the middleware solution would be £20,000,001, or around 20x the cost of the Guerrilla approach. And that doesn't even account for the revenue lost (or risk) with big-bang deployments as opposed to rapid release models. But I'm nice like that, so I'll let it slide - 20x is already a substantial enough differential.

2. Frameworks versus reinvention

In terms of frameworks, well I'd say I'm a big fan. I like WCF and Jersey, I like MVC and Spring, I like Jetty and Tomcat, I like the .NET framework and the JVM. In fact every piece of software I have ever delivered into production has relied on frameworks for heavy lifting - we used Jetty and Tomcat/JBoss and a bunch of mature open source libraries (thanks Apache!) for the services I described above.

What's different about the frameworks I favour, is that they don't imply a large up-front commitment (or gamble as it should be called), but instead allow choices to be deferred until a more responsible moment. Using these frameworks also allows delivery of tested and, importantly, testable code (thanks to Michael Feathers for educating us all about this!). And this is important because code which isn't tested is legacy, and legacy is risk.

The teams at the telco services company are still working in the same Guerrilla SOA way, underpinned with agile practices. And they are still delivering high-quality solutions into production, and generating revenue for their business. There's no "magic" in the system - no proprietary middleware that only some arcane specialist can deal with. They just have code and commodity frameworks which allows them to keep on delivering value to their customers.

Guerrilla SOA doesn't reinvent frameworks, it embraces them. But it only embraces those frameworks that accelerate delivery, and not those which require up-front gambles that are detached from business imperatives. The Guerrilla Consultant is all about commoditisation: using commodity/open frameworks and commodity skillsets (.NET, Java, Ruby versus specialists for products like Oracle Fusion), and all about deploying rapidly and repeatably onto commodity hardware.

It is anything but the trench warfare approach espoused by enterprise middleware.

Comments:
#

Great post! I was following your presentation at SOA09 and did like it already. But now i have a link to send to people I know.  

It seems that middelware vendors show their solutions and say that the stack is so cool and easy that everybody can use it. When for your approach it is clear that you need skilled and dedicated team.  

I would like to see a "Guerrilla SOA" curriculum and I m not talking about the member card and Julian ^^.

#

Hi Domrei, 

Julian says you still owe €20 and he knows where you live... 

Jim

#

Again, good post and (again) great session on SOA09. Had a good laugh and some new ideas on teaching SOA at the HAN University, thanks! BTW. I owe Julian nothing thanks to my "Grails"-response on your question on RoR. I actually develop and teach mainly Java.

#

Hi Rody, 

Julian isn't convinced, but he has now forcibly taken €20 from my wallet, so consider yourself covered :-) 

Jim

#

Out of curiosity, how would a guerrilla consultant deal with integrating with legacy systems and/or EDI using the above approach? Would you use some sort of EAI tool to communicate with the legacy system and build a REST service in front of it, or would you do something completely different? 

Thanks, 

Scott

#

Hi Scott, 

Assuming there's already a cost-effective framework for getting into the legacy platform, then that would be my preference.  

Whether you'd then turn it into a Web or WS-* service is a second order decision, though my preference would be to do so, such that middleware/EAI coupling is avoided. 

In that sense the legacy access framework becomes an implementation detail, which might even change over time, whereas the overall business capability the service implements changes only as the business changes. 

Jim

#

That makes sense. The more I read about Guerilla SOA, the more I like it. Most of my clients are manufacturers, which means I see a lot of ERP systems and EDI. I'm working on how best to incorporate these legacy systems into an ESB-free SOA.

#

Sounds about right. The sad thing is how many organizations pony up the £10,000,000... 

Some people, when confronted with a problem, think “I know, I'll use an enterprise message bus.” Now they have queue problems.

#

I like it. 

One more thing: 

"If Dave's point is accurate, that people cost more than software, then the minimum cost for the middleware solution would be £20,000,001" 

This means that you must spend 10x more on people when using middlware solutions - i.e. the using middleware you are 10x more inefficient.

#

Hi, Thanks for namechecking my 'Guerrilla SOA' article. I firmly believe that you can start agile without tooling up, but you will need to consider service governance sooner rather than later if you want to scale development. Still won't cost $10M though ;-) 

John Moe

#

Great blog Jim. I'm long time 'SOA' practitioner, Service Architect for quite big financial institution. So I'm actually doing all that service oriented stuff to serve Our business. Frankly I also was involved into 'implementation of one of those commercial ESBs' few Years back. I'm not proud of this, to be honest - because it went exact the way You're talking in Your great presentations. Also from my perspective, I can see exactly the same recurring pattern of 'Enormous Spaghetti Box' over and over in the companies are buying into this concept (and since I know a few... I know it very well). I drunk my cool aid, went through implementation process of an 'ESB', and only I get is this... lousy t-shirt :). I could write whole book why ESB is actually wrong way of doing stuff (ha! ESB and doing in one sentence!) but I'd like to refer to Dave statement that the people cost is the biggest cost in (nt only middleware projects). I actually agree. In the long term people generate the biggest cost. The problem is that when You buy Your shiny new, screaming 'ESB' thing You also are buying, sooner or later consultants. That's the reality. You're buying very proprietary stuff, in most cases with poor quality. From now on, You wont spend money on people doing the stuff for Your business, but rather on (much. much, much more) expensive consultants patching Your 'ESB'just to make it usable. And no, I'm not kidding. I have seeing few 'leading' implementations of ESB from different vendors and this worked exactly this way. You will have spend a bunch of additional Man Days just to get Your 'ESB' barely doing what is it suppose to do. When, after few months this process is over (if it's over!) You will start to struggle with all of limitations incurred by this stuff. You will have start to used to live with all 'don't do this', 'don't do that', 'this doesn't work this way', 'Ouch! this will work in next release' etc. So You will probably spend next few months realising how hard actually is, for example, just call Oracle stored procedure returning a Oracle specific objects and all this type of 'problems' You would never ever thought before, since the pre JDBC times... You probably will start doing dirty hacks them, having project overtime, and over-budget at this time and still having no real value, looking with desire at simple stuff like REST, JAX-RS, CXF etc. the stuff which is simple, working and it's for free. Ah and one little point - this stuff allows You develope *testable* services, which is also barely possible with 'ESB'... So to sum things up... I actually agree tha in the long term perspective people cost is significant. But havin 'ESB' makest it much, much, much more significant. You will have to spend budget on one of the most expensive consultants (forget about community - this stuff is used by up to few thousands companies over the world - so to fix even simple problems You will have to hire 'consultans'), then You will be unproductive overcoming all the limitations this stuff incurs, then You will spend months patching production systems, because You won't be able to unit test it upfront, and then You will have to train and/org hire new maintenance staff just to keep Your 'ESB' working. And this is different story... And where is this real stuff, Your business wants from You? Well nowhere yet - this is just the overhead. In the meantime You will have to implement this using all this 'productive' thing, crossing fingers that this fragile bus works as documentation says (which often is not the case). Having experienced all this 'soa process' I stick with stuff what is actually working and solving real problems, not vendor's problems.

#

We use a scheduler/file transfer tool from a smaller vendor to avoid costs and huge upfront investments but we face some issues frequently. The solution hangs sometimes. Now this financial project has very strict SLA's. We are struggling a bit. Would a more expensive solution help ? Don't know but the less expensive solution has problems that are difficult to overcome. That is my experience but I think your approach makes lot of sense. I am just not able to convince the management that a cheaper solution can be used because we are having these problems.

#

Hi Mohan, 

You can build software that fails with expensive tools over long development cycles just as easily. File transfers are notoriously flakey as an integration point - what about using HTTP instead? 

Jim

#

Jim, 

I am for your approach not because expensive tools don't work at all but because there are many open-source tools that can do the same thing. We used WebSphere portal that works but I have also seen a open-source stack built using open-source WSRP etc. that can be used to build portals. 

Our scheduler transfers files using SFTP, FTPS etc. because Visa and MasterCard use these protocols.  

Actually there is one more fundamental problem. That is the company's technology culture. Ours is not conducive to innovations. 

I am just comparing my domain and yours and yours is harder. Basically I think that delivering good SLA's means clusters, performance testing, HA etc. 

Not an expensive tool. 

So based on my experience I have this question. How did you handle bugs and convince management :-) ?

#

Hi Mohan, 

In my modest experience, management are convinced by factors like cost and risk much more than by our engineering arguments.  

I like to use spikes (short, throwaway prototypes) to provide empirical data and use that to guide my design and, if necessary, convince managers of the suitability of the approach. 

Measurements are dispassionate and objective. And it's a little bit science-y which is cool. 

Jim

#

"Importantly we backed up our architectural approach with numbers: we measured the throughput and latency characteristics of a representative spike (a piece of code used to answer a question) through our high level design, and showed that both HTTP and our chosen Web server were suitable for the volumes of traffic that the system would have to support." 

Definitely be interested in hearing more about your approach to this.

#

Hey Colin, 

That was the subject of a tech briefing I gave for ThoughtWorks last December, I'll be putting the deck on my site at http://jim.webber.name/presentations.html eventually. 

Jim

#

Following on from my previous comment, that deck is already on the Web: 

http://www.thoughtworks.com.au/pdfs/webber-architecture-qtb.pdf

#

If this can be done for a telco provider then our domain is easier. How do we measure throughput and latencies when we connect external servers managed by Visa, MasterCard etc. ? That type of simulation is hard ? 

So the point is that a tool like loadrunner is really not required ?

#

Hi Mohan, 

A crude measure: 

Your external services will have SLAs, so you know their alleged response times. You can measure your services' performance and add them together to find your overall latency, at least in a ball park way. 

A more sophisticated measure would be to use better models (e.g. Erlang models perhaps) which more accurately account for the load curves of each system involved. 

Loadrunner is a very useful tool, but it's not the only option.  

Jim

Author Name:
Email:
Author URL:
Comment:
Antispam:
Please type the following string (note that if the strings don't match, your comment will be lost... sorry!): 'XIGVI'.
 
Recent entries

Recent comments

Feeds:
RSS 2.0 Atom