Reuse Engineering for SOA
An anonymous reader writes "In most development organizations, software reuse occurs on a regular basis in at least an ad hoc manner. Code is shared across projects in an informal manner. SOA provides the mechanism for more formal reuse. So what are the issues? This article examines some of the challenges associated with the creation and usage of reusable services."
Software reuse is overrated, every one claims to be able to resue software with components and objects, but at the end of the day, we all write our own version that we understand.
SOA - Service-Oriented Architecture
Would it kill submitters to expand acronyms? Or give a little background on the "frammazazz project" for those of us who have no idea what it is? I read some of these summaries and am even stupider than when I started. And that's saying something.
Too many managers are trying to jump on the SOA bandwagon. SOA is basically "runtime" reuse. But there are plenty of valid ways to do code reuse before runtime, hence functional decomposition, OO design, or componentized architectures. Don't fall for the marketing hype about SOA being able to fix every problem that ails you.
If you have a large company with a bunch of legacy or disjoint applications, SOA could be a great way to solve some of your business needs. If not, then keep an open mind and look for the right solution (and don't trust vendors).
And that's why software will never be an engineering discipline.
Service Oriented Architecture (SOA), etc.
:)
In my limited experience, there are a lot of "software methodologies" out there, all claiming to make software better (i.e. more scalable, efficient, better re-use, etc.). Of course it all comes down to modular programming, good documentation, and agreement among the developers in an organization on a plan for how everyone is going to do things so that everyone is on the same page.
Also in my experience, more than half the developers at any reasonably sized organization are not really capable of dealing with abstractions like SOA, OOP, or whatever. No matter how well laid your intentions are, and how many rules you create, there will always be some new hack straight out of some college course who dives in and gets the job done, but manages to totally screw up the whole system you and the senior programmers had in place. Then it either goes unnoticed until it becomes a problem (when the next change has to be made), or you have to spend half a day undoing the damage they did, and doing it correctly. Either way, the new guy looks like a genius for getting it done in half the time it would have taken one of the older guys, and you look like an inflexible nimrod that's just getting in the way of productivity.
You want an acronym that works? Here it is: PR (peer review). Find some other smart guys in your company, and team up to review each others' work, share ideas, and build a common set of best practices. Don't let people outside that group touch your code.
"I have never let my schooling interfere with my education." - Mark Twain
see, software reuse is definatly why we all love microsoft :-D
Organizational impediments -- e.g., developing, deploying, and supporting systematically reusable software assets requires a deep understanding of application developer needs and business requirements. As the number of developers and projects employing reusable assets increases, it becomes hard to structure an organization to provide effective feedback loops between these constituencies.
Economic impediments -- e.g., supporting corporate-wide reusable assets requires an economic investment, particularly if reuse groups operate as cost-centers. Many organizations find it hard to institute appropriate taxation or charge-back schemes to fund their reuse groups.
Administrative impediments -- e.g., it's hard to catalog, archive, and retrieve reusable assests across multiple business units within large organizations. Although it's common to scavenge small classes or functions opportunistically from existing programs, developers often find it hard to locate suitable reusable assets outside of their immediate workgroups.
Political impediments -- e.g., groups that develop reusable middleware platforms are often viewed with suspicion by application developers, who resent the fact that they may no longer be empowered to make key architectural decisions. Likewise, internecine rivalries among business units may stifle reuse of assests developed by other internal product groups, which are perceived as a threat to job security or corporate influence.
Psychological impediments -- e.g., application developers may also perceive ``top down'' reuse efforts as an indication that management lacks confidence in their technical abilities. In addition, the ``not invented here'' syndrome is ubiquitous in many organizations, particularly among highly talented programmers.
"In my limited experience, there are a lot of "software methodologies" out there, all claiming to make software better (i.e. more scalable, efficient, better re-use, etc.). Of course it all comes down to modular programming, good documentation, and agreement among the developers in an organization on a plan for how everyone is going to do things so that everyone is on the same page."
Software Factories
SOA in the wikipedia.
--
Superb hosting 4800MB Storage, 120GB bandwidth, ssh, $7.95
Picaday!!! Strange & sexy pictures (Some NSFW!).
Hosting 20G hd, 1Tb bw! ssh $7.95
Neither the synopsis nor the article bothered to enlighten us plebes as to what exactly SOA stands for, so I googled it for the benefit of others:
A Service-Oriented Architecture is a collection of services that communicate with each other. The services are self-contained and do not depend on the context or state of the other service.
At least, I think it's that one. Then again, maybe it's this one"
Baldurs Gate II: Shadows of Amn.
Maybe they use multi-player mode to define the problem: "Okay, so the database is the castle, right? And the balrog is a stored procedure that we all need to be able to kill - uh, run, but we only have one magic sword, uh interface to do it with...."
Okay, maybe not.
Crumb's Corollary: Never bring a knife to a bun fight.
Warning, opinion ahead, intended for discussion, but some may see as flamebait. That's ok; flame me if you want.
For those who don't know the acronym, SOA means "Same Old Architecture."
It's a clever way for the folks who brought us distributed objects to resell "new" solutions and consulting. What you have is basically distributed objects, with the design patterns that anyone who had half a brain would have already implemented if they were using distributed objects. In the end, you'll probably end up marshalling all your data around via XML over protocols originally intended for other things, like serving up web pages, maybe getting to implement synchronous semantics over asynchronous protocols (or vice versa), all the while trying to keep things nice and reusable & decoupled, etc.
And you'll run into all the same problems you would have hit before, except your CIO will be cool with that because its SOA, you know, and that's hip.
I loved hearing a first rung manager at a bank insist on doing online trading transactions with an external partner over HTTP using XML back in 2000. What a visionary.
But hey, go ahead and explain to me how SOA solves all the old problems. People who couldn't implement robust services and reusable interfaces using CORBA aren't going to magically have all their problems solved with SOA.
eom.
The big one is simple: "There's no such thing as reusable code, only code that has been reused.". It's very difficult to design code to be reused and get it right until after you've actually tried to reuse that code somewhere else and found all the problems. All code makes assumptions about how it's going to be used, and you usually don't realize which ones are true showstoppers until you go to use that code in a different way and get smacked in the face by them.
The rest of the problems with SOA are the same ones that've been around ever since someone throught up remote procedure calls. If you aren't familiar with RPC and XDR, what makes you think you won't make the same mistakes and face the same problems this time around?
"Neither the synopsis nor the article bothered to enlighten us plebes as to what exactly SOA stands for, so I googled it..."
Here is the very first sentance of the article:
Explore the inhibitors to software reuse as they apply to Service-Oriented Architecture (SOA) and learn how reuse engineering can make a positive impact in realizing the value of SOA.
1. Creating good interfaces is hard. Really hard. Most programmers create lousy interfaces that nobody but them wants to use. I know; I've written quite a few of them. Good APIs take thought, creativity, and a lot of effort, none of which are allowed in a typical business environment.
2. Reusing code will not necessarily save work. See point one for the first reason. The second reason is that it is often faster to reimplement the functionality and then refactor. This generates more code than reusing someone else's library, but may save development time. Saved development time is a good thing in the type of business that is always in crunch time.
I work in a large shop where the lead "architects" have confused SOA with serialization. The result is like watching a train wreck in slow motion. Even though it is a homogeneous MS shop and all services are internal, the standard is that typed-objects (even data only objects) shall not be passed between services. Instead all methods on all services shall have exactly 1 parameter which must be a proprietary, untyped "business object" serialized into byte array, thusly in one fell swoop violating almost every best practice known to mankind. Imagine 100+ services mapped to 1000+ databases with no objects, no datatypes, no schemas, and no versions. Just method calls with a single parameter byte-array parameter from which the caller must extract data by name then cast it to the appropriate datatype.
At least the consultants will get rich re-writing the whole mess when it gets thrown out.
Software designed for re-use will likely never ship, or ship far later than software designed to do something.
pooptruck
With that said, service oriented architecture strikes me as little more than the latest in a long string of TLAs so beloved by IT management and such (I.e. PHBs), but with very little in the way of real content behind it. The whole point of pretty nearly any software ever written is to provide some a service a user, so pretty clearly being "service oriented" is roughly as new as dirt.
Ignoring that, however, and taking web-service oriented software as somehow being revolutionary (even though it's really not) we're still left with a serious question about how in the world this would relate to software reuse. I'm reasonably certain the answer is that PHBs feel a need to sell their PHBs on the latest TLA, and IBM has thrown together a web page that tries to help them in that regard.
When you get down to it, however, the web page contains virtually nothing in the way of real information. It basically says that reuse is good. Whether you agree with that or not, the fact is they haven't really told you anything about how to facilitate reuse in general, or how SOA is supposed to contribute to that. They cite the usual reasons for reuse not working out well (e.g. lack of education and lack of software suitable for reuse). They go on to give the usual ideas that mentoring, careful analysis, etc., will help yield ideas for software to write that's worth reusing and more ability to reuse it.
Five years ago this article would have said "XP" instead of "SOA". Fifteen years ago, it would have been "OOP" instead. Twenty five years ago that would have been "structured programming". I wasn't around at the time to know for sure, but my guess is that if you looked carefully you could find something from the 1950's (or maybe even late '40s) talking about how the macro capability of the new assemblers wasn't resulting in as much code reuse as some people hoped, mostly due to 1) lack of education and 2) lack of macros worth reusing.
To make a long story short, "code reuse" has a long history of over-promising and under-delivering. Now, that may make it sound like I consider software reuse a lost cause, or something on that order, but that's just not true. The fact is that macros allowed some reuse of a fair number of (mostly) relatively small pieces of code, as long as there wasn't too much variation between the uses.
Structured programming helped a bit more, particularly by helping readability so you might be able to figure out what something did more easily than writing it all over again.
Likewise OOP allowed more reusability as well. Despite being the newest TLA on the block "SOA" is really little more than modular programming, with the modules in this case being relatively large. There's been a bit of work done on standardizing the interfaces between the modules, so it's a bit easier (at least in some cases) to plug them together, but in software that's pretty much what most architecture boils down to anyway -- designing interfaces.
Now, having that interface pre-designed (to at least some extent) undoubtedly makes it a bit easier to reuse a bit more software with less design specific to the problem at hand, and that's probably a good thing in general. OTOH, Brooks was right: there probably is no silver bullet, and even if there is, SOA isn't it. SOA will probably provide an incremental improvement over previous methods, at least in a few places under a few circumstances (given the amount of effort that's been put into designing the SOA interface "stuff", we'd better hope so, because it needs to help some people quite a bit to even break even).
Articles will be published crediting it with saving company X from total oblivion, triumphing over their opposition, etc. Other articles will be published blaming it
The universe is a figment of its own imagination.
A Service Oriented Architecture (SOA) is a software implementation that delivers information services via loosely coupled interfaces that are accessible by non-proprietary tools and products.
--- -- - -
Give me LIBERTY, or give me a check.
SOA is a "hot" acronym for an old and valuable idea. An SOA approach emphasizes a loose coupling between components of a system. When done right, the result is a solution that is more adaptable to changes because a change in one component does not necessitate changes in others. (Examples of tight couplings include systems where SQL queries are embedded throughout all components. Change the database and you need to change a lot.)
The most obvious example of SOA is Web Services, but that is just using specific set technologies to deliver an SOA solution.
Something special about the Web Services approach is that the vehicle for the loose coupling between components is XML. Unlike some other technologies, it is possible to involve subject matter experts rapidly and usefully in XML design because this can be done with minimal instruction. (We are not talking about creating DTDs or XSDs here, just the functional content and hierarchy of the communications.)
>>Find some other smart guys in your company, and team up to review each others' work, share ideas, and build a common set of best practices.
Getting smart people collaborating on a project is a great idea no matter what the methodology. (Methodologies are a poor substitute for talent.)
--- -- - -
Give me LIBERTY, or give me a check.
The title of this article does read a little strange for Dutch native speakers.
Google search on "Dutch SOA" http://www.google.com/search?q=dutch+soa shows what I mean.
The problem I find with trying to make something generic is that every new usage tends to need somewhat different features that have to be added. After a while the generic thing becomes a huge packrat of features, yet the quantify of features used by any one usage stays roughly the same. Thus, the interface and implementation grows too huge to be practical. It becomes easier to borrow code as-needed rather than deal with the maintanence of a huge generic thing.
Table-ized A.I.
yet the quantify ...
Should be "quantity" not quantify
Table-ized A.I.
Most recent language platforms are designed around code reuse. Ruby, Python, Java, C++, PHP, Perl. Classes, OOP. It's simple, really. You just have to be willing to learn something new.
The benefit of OOP / reusable code design doesn't always come in dragging a big blocky module from one app to another. It comes in smaller elements of reusable code. Check out 'Design Patterns' - it's sort of a guide to developing modern reusable code.
Recently at PDC this topic was raised to these folks: Gregor Hohpe, David Ing, Tony Redmond, Steve Swartz and their response was exactly what you've read in these posts.
It's true that management loves this term. Have you seen the latest tech-management publications sitting on their desks? Headlines read: "Leverage SOA Now!" and such. Now, if you're someone that is held accountible for major architectural decisions and you're the one that the department manager poses these questions to, it's a fantastic opportunity to recalibrate expectations for things that you already do or have been told in the past that you cannot do because of time/cost limitations.
On the topic of code reuse, here's, humbly, how I've seen the most benefit:
My 2-cents.
http://www.inboxlist.com
Dammit, last time I checked, SOA was "Start of Authority"... and I didn't understand how the HELL DNS was tied in with this programming crap! :D Wasn't this "eXtreme Programming" last year?
Hey, Slashdot Editors and Submitters: ETFTLA*s, please?
*Expand The Fucking Three Letter Acronyms
My opinion, the greatest drawbacks are:
1.) Versioning. Project A wants to add a feature to the service. Now we have to coordinate and test with projects B, C, D, and E. Two of which have no funding. The other is run by a moron.
2.) Reliability. I have 10 services on different machines run by different groups. All have to be up for my app to work. If they all have 99% uptime, mine is significantly less than that.
3.) Speed. Serializing data and calling across the network is slower than local. Period.
4.) Interacting with a 3rd party. If you are on a project and dependent on another group with different priorities and management, you are in for a few headaches and delays.
I could go on. I work at a large financial institution, so we have a lot of architects that prefer SOA. It has its place, but I hate to see people push it, when they don't back it up by detailing how they will mitigate the drawbacks that come with it.
Indeed. Something generic should be applicable to problems you haven't thought of, but not to everything. And the fewer methods an API demands that you implement, and the less they do, the more problems you can apply it to...
Are you adequate?
SOA is basically programming for managers. It pushes the level of reuse up to a management level.
Mark my words, SOA is only valuable if you can identify the business value in each of your components. SOA is not for software architects alone to create - it must be made hand in hand with your business analysts and executives. Otherwise, its just a software play. And like many of you have pointed out, another layer of software is no silver bullet.
SOA can be applied to a human bank teller service as well as it can be applied to an information service: Modularizing any company, weather through software interfaces or business unit interfaces, makes it more agile. Supposedly, if done right, SOA can bring about a very profitable merge between software and the business.
Developers: Reuse Engineering for Society of Actuaries
An anonymous reader writes "In most development organizations, software reuse occurs on a regular basis in at least an ad hoc manner. Code is shared across projects in an informal manner. The Society of Actuaries provides the mechanism for more formal reuse. So what are the issues? This article examines some of the challenges associated with the creation and usage of reusable services."
Warning: The intelligence of this post may be larger than it appears.
JM
Oink, Oink!!
... I think you're overreacting. There's a lot of reason to be skeptical and critical of SOA, especially given the hype. Having said that, since SOA is an IT-management focused opportunity, Slashdotters are not particularly inclined to really value or understand it, nor should they.
.500.
The market is around US$10B this year, and according to Gartner (IIRC), it'll be US$95B in the next decade or so. That's Billion with a B.
That estimate, IIRC, is for the entire integration marketplace -- SOA or no, and I believe it's projected a few years out. It's also a bald-faced estimate, also known as a crap shoot. And Gartner's batting average is certainly not above
Reuse under SOA is virtually guaranteed - because the tools are graphically assembling the underlying services.
Working for one of the aforementioned software vendors in the SOA marketplace, I make a living talking to CIO's about this stuff. I would get thrown out by my ear in 5 seconds if I suggested that reuse is due to some kind of drag 'n drop GUI. That's patently ridiculous, and almost a cliche'. Angle-brackets and better data transformation / routing tools aren't going to bring about the reuse nirvana; you're just going to have a more maintainable set of "web services" that are marginally re-usable.
To get to re-use, you need to sort out tremendous business process, organizational, political, governance, semantic, and data quality issues. It's a slog along very non-technical lines. Sure, the newer products help, and it's arguably the last roadblock to make it palatable to the visionaries -- but It's going to be the long slog that enterprise data warehouses were in the early to mid 90's, which I believe was the last successful wave of business-oriented re-use.
Recall that most organizations failed to build out an enterprise data warehouse, they just wound up popping marts & cubes everywhere, except for the cream (Amazon, Best Buy, Wal-Mart, a few Telcos, a handful of Banks). Similarly, not many orgs are going to succeed in changing their IT departments to a services-oriented world view; those that do will take years and it will be due a lot less to product or consultants than to the vision of their leaders.
-Stu
This subject, SOA, always makes me grin.. since in Dutch it's the abbreviation which is equivalent to the English 'STD'.
;)
Reusing engineering for sexually transmitted diseases? The things they come up with noways
Service-oriented architectures is basically the UNIX philosophy: lots of little tools, often implemented as little servers. Yes, it helps with reuse, it helps with limiting the effects of errors, and a whole set of other problems. What else is new.
It's funny that this is now becoming popular among the UNIX haters (you know, like many object oriented developers, Windows developers, mainframe programmers, and all those guys). But, of course, they couldn't simply just use the approach, they needed a new acronym, massive amounts of new syntax and protocols, a constant stream of hot air, and preferably gigabytes of memory to implement it all.
Code written intentionally for reuse (for example, the Java libraries) can be re-used again and again and again, without a problem: coupling is low, interfaces are clean and consistent, documentation is good.
Code written in the context of an application can not easily be reused, due to the couplings with that particular type of application.
The problem is even harder in commercial and enterprise application environments, where requirements change daily: the end code is usually a very high performance but poorly constructed piece of software in software engineering terms, and thus it can not be easily reused.
SOA can not help you if the code to be reused (even if in the form of services) does not fit 100% with your requirements.
I can't imagine what sort of nitwit is going to try to use the same language and coding construct across all the systems in an enterprise, which is what code reuse will require. Maybe the best way to code your web app is in python, but the RFID system needs to be written in C, and the business process monitoring is a Mercator or Unwired Orchestrator dashboard. You can either put developers into bondage and mandate .Net for everything, which will yield universally mediocre results but excellent code re-use, or you can use the best tool for the job at hand and worry about service architectures rather than development minutae. Guess where the best business value lies? Guess where you end up creating a dynamic, interesting and challenging development shop that doesn't swap out key staff every 18 months?
IBM usually has their head on straight with SOA, so I'm rather surprised with this article. Seems like some of their people have wandered off the reservation and fallen into a deep ravine.
If you find yourself needing a special "testing" cycle, you're doing it wrong. Without continuous testing and feedback you'll just keep digging yourself into the hole; deeper and deeper.
Umm... no. First of all, testing cannot fix problems. Testing cannot guarantee the absense of defects. All testing does is tell you how good your software is, quality wise. If your testers find 100 defects per hour of test effort, then your software is total crap. Even if you fix all the bugs the testers find, there's still tons left, and you'll never "fix" them all. If your testers find very few defects per unit effort, then you know your software is very good, and is ready to be released into the wild for your customers to use.
Second, the parent was correct; it may be faster in terms of development time to rebuild rather than reuse, but it is definately not faster in terms of your product's overall lifecycle. For every hour you spend implementing something, you spend either a few hours elsewhere in design and code inspection, or in a company like yours, several hours in test and repair. All you have to do is not insert defects into your codebase to begin with, and then you really won't have to spend much time in test at all. This is very easy to do.
If you're not catching the bulk of your defects long before you reach test, then either you are in a very high margin buisness, you need some serious process improvement, or else you should just save yourself the trouble and pack up shop now, before you hemorage any more cash.
Disclaimer: I must admit that I have had to maintain some of the most god-awful Perl ever imagined... suffice to say the author's previous experience was 40 line NT batch files and some crippled home-computer BASIC that made a lot of use of GOTO. *shudders at the memory*...
I wonder if that code's still being used to test and release that mega-corp software vendor's anti-virus product signature updates...
"None are more hopelessly enslaved than those who falsely believe they are free." -- Goethe