I hold the opinion that Services (as in SOA) should, where at all possible, be delivered as separately budgeted and planned work from functional enhancement projects to avoid First Project Syndrome.
To understand what First Project Syndrome is let’s take a look at some graphs (bear with me…).
As you can see from figure 1. the assertion is that the cost of delivering the first project with a service is higher than for the first project using a point solution (by point solution, I mean grabbing data from source data stores or replicating data into your database or any number of data sync techniques). The reason why this costs more for the first project is:
- there are overheads with creating a service such as following their prescribed best practise
- creation of infrastructure to run the service
- some expert knowledge in SOA practices
However from the first project onward the savings are realised. The reasons why point solutions cost more from the second project onward are because:
- a point solution often starts from scratch each time, the work has to be redone and redone slightly differently for each specific scenario
- point solutions layer complexity upon complexity (e.g. tables accessed by many unknown systems, various extract files created for many systems, data shunted to and from multiple undocumented systems)
- it’s very hard not to make mistakes when syncing data
- syncing data causes all sorts of edge cases when trying to modify it
Point solutions are almost always more expensive to manage, with a service built correctly and to specification the operational costs are lower: day one. They are easier to manage, monitor, failover and so on. The significant reason why they have these qualities is because they are conforming to set of good practises that specifically give these qualities. They leverage the wealth of investment made on previous service developments within the organisation. Each service then stands as a container for future enhancement in its particular business domain allowing functionality to be added and still providing the operational characteristics demanded.
More often than not the first project does not consider, in detail, the operational cost of managing the solution on-going or may not have the budget/resource/time to seriously take this in to account. Typically the projects have the more immediate concern of getting the solution shipped to the business.
Other Common Pit Falls
There are a number of other pitfalls of delivering services as part of the first project. In no particular order:
- the first project’s scope determines the scope of the service making it less suitable for other consumers
- freezing of the project causes the service to also be frozen where that service would have had wider benefits to the business. The case for the project didn’t stack up and so the assumption would be that the service’s case didn’t either.
- compromises in the design of the project solution force compromises in the service design
To all these points I would posit that the first business project that requires a service should not be the project that delivers that service. This does, of course, mean that the business case should stack up against more than one business facing project (and if it doesn’t then it probably isn’t worth building).
You wouldn’t try to create a power station as part of the build of a house but every house needs one to function.