As geeks, we love to dive head first into technical challenges, and yet, we are often less interested in learning the business domain and engrossing ourselves in solving the little peoples’ pains, you know, the users. Focusing on them can have a number of negative effects on us, like having to write code that doesn’t challenge us, or even worse, “What if it doesn’t add anything new to my resume?”
So, we put on our senior engineer hat and plow to the front of our geek kingdom, asserting that we must develop significant long-term infrastructure in the system because it will save the company thousands, if not millions, of dollars down the road. The infrastructure is not needed to satisfy the agreed upon use cases for this release, but it’s so important that the team would be crazy to omit the work we are proposing from this iteration. We are so convinced of our own superior planning and genius, that we are unconcerned if no one has recognized how much pain we are saving them from yet, or that it has put the project behind schedule. They will see some day…
Throughout the industry services are often closely identified with Service Oriented Architecture (SOA). There is a wealth of quality architectural thinking within the SOA world. However, there are some fundamental issues that have propagated throughout large parts of the software development industry because of the underlying philosophies found in SOA.
A central theme of the SOA development paradigm is the focus on reuse. Software developers with even the shoddiest training have been taught to place enormous importance on reuse, where logic is modularized in a single place and used over-and-over. So, there is nothing unusual about the SOA assertion that services should be loosely coupled and designed to support numerous clients.
A major challenge is that services in a Service Oriented architecture must also be built to support clients that have not yet been formally defined through a requirements process, or even yet conceived. In seemingly countless instances, this has led to teams completely over emphasizing the reuse of the services being built, while immediate functional requirements are often missed, not completely supported, or in the worst cases blatantly ignored.
Pragmatic software architects recognize the considerable pain the industry has experienced from projects that over-accentuate one software tenet (reuse), while ignoring others. Overly generic services frequently lead to extended development schedules, and in some cases they are fatal to the entire project. The blame for this trend is not SOA itself of course, but software engineers taking a good concept and overusing it until it becomes a liability.
There are absolutely cases where reuse is the chief priority for the service implementers. A common example is creating a true, public API, such as a travel booking service developing integration endpoints for their present or future partners. Or, for an internal IT example, consider the case where the system holding the source of customer records needs to expose the data to multiple systems throughout the organization, and a reusable service is required. These cases are limited though. In particular, they are most rare in IT shops, where the insanity of completely over-emphasizing reuse can be at its highest.
Quality architects avoid this trap by working with the following understanding:
- Risks should be identified.
- The business domain should be captured through the requirements process and implemented in its own layer.
- The implementation should only include things that address specific project risks that have been identified or satisfy the functional requirements of the system.
Thus, the system should be built for the immediate needs, unless there is a priority placed on the future in the business requirements, or the project’s owners specifically dictate this as a priority.
Reality check: It is not your money! Building a software system should be focused on the urgent needs of the organization, unless the team is clearly directed to focus on other priorities, which is rare.