AlanPerlis once said “every program has (at least) two purposes: the one forwhich it was written, and another for which it wasn’t”. I take thatto mean that if you spend some time writing a non-trivial application, the oddsare good that there are any number of other uses for that functionality beyondthe primary use case you had in mind when you originally wrote the software. Theearlier you recognize this fact in the design process, the more valuable yoursoftware will be in the long term.
The line between ‘application’ and ‘development platform’is blurring. Several years ago, the distinction was very clear – Windows was‘the platform’, and you built ‘applications’ on top ofit. This is quite different from the current state of the world – what isWord, exactly? Is it an app or a platform? How about Visual Studio? On onehand, those packages are applications that deliver strong usability out of thebox. On the other, they provide a rich design surface on which to build yourown apps. You can take bits and pieces of them and mix them together with yourown code to create solutions to problems that weren’t even thought ofwhen the original software was written. There’s clearly power in beingable to integrate easily.
In 1982, Perlis also wrote: “every program is part of some other program,and rarely fits”. It’s remarkable how accurate that statement stillis today, even though there have been so many different attempts to solve thereuse problem. Service orientation is another iteration in the grand quest tomake all the pieces fit together a little bit better.
SO != Indigo. SO != WS-*. SO != <insert name of technology X>. SO is aperspective on application design. It’s about drawing explicit boundariesaround autonomous functionality. It’s about specifying your data in a waythat’s not tied to the bitwise interior of any one runtime. It’sabout the implicit acknowledgement that every non-trivial application is adevelopment platform.
If you’re going to take the time to implement an application, chance aregood that sometime in the future someone else will appreciate not havingto take the time to reinvent something you’ve already written. If you’reapp does anything interesting at all, there will come a day when someone elsewants to integrate with it. The decisions you make now can make this personslife very easy or very hard – it’s your choice. By thinking aboutservice orientation now, you provide the future opportunity for someone else touse your bits in new and powerful ways.
To quote Doug and Don, there is only one application and it’s still beingwritten. On a long enough timeline, every application will interact (directlyor indirectly) with every other program. It’s Six Degrees of Kevin Bacon,but for software. Integration is inevitable – are you going to make thateasy or hard?
