The motivations for integration and extension are similar: In complex systems, both provide the ability to create a superior product. In some circumstances, integration and extension shift work from you to your customer. Paradoxically, this can increase customer satisfaction, much like our satisfaction with an ATM machine even though we're assuming responsibilities formerly taken by tellers. Part of the reason is that we're in control, which most of us like even when it means more work.
Motivations for Integration/Extension
Some of the strongest motivations for creating systems that can be integrated and/or extended with other systems including the ones discussed in the following sections.
You Can't Predict, But You Can Plan
In today's complex environment it is impossible to predict precisely how your customer will want your system to behave in every context. By providing customers with one or more ways to integrate or extend the system, you won't have predicted the future but you will have planned for it. Plug-in architectures, such as those in Adobe Photoshop or Web browsers, allow components to be added in well-defined ways. They are an excellent example of adding functionality that enhances an existing system.
Customers Hate To Hear, "We Can't Do That"
When you can't extend a system, you can't respond to customer needs. Ultimately, this means you'll have to eventually say no to a customer request, which, not surprisingly, customers hate to hear. A good strategy for integrating and/or extending your system will help you convert "No" to "Yes, we can do that. It might take a bit of work, but here's what we propose."
The Larger Solution Comprises Multiple Smaller Solutions
Many enterprise-class business systems are not designed to work in isolation. Instead, they work with a supply chain to solve a larger problem. One example is a Web storefront or online ordering system, which cannot work without integration. In such implementations several systems must be integrated to produce the expected product, including a catalog system, a storefront engine, a content engine, a payment processing engine, and backend order tracking and accounting systems. If you've participated in the creation any of these systems you already know that an easily integrated architecture is essential to success.
You Want Information Not In Your Own System
There are times when the only way to produce an interesting report or analysis is to integrate the data contained in one system with the data contained in another. A common example of this is when you integrate clickstream data from Web servers with customer purchase transactions.
You Want To Increase Switching Costs
Switching costs refer to what your customer will pay should they stop using your system and start using another. These costs include a number of things, such as re-integrating your solution into a competitor's. Extension and integration options don't increase switching costs until they are used by your customer. At that point switching costs dramatically increase because your customer not only has to replace your system but also has to replace all of the integrations and extensions they created on top of it. The more proprietary the extension and integration options, the greater the cost to switch.
You Want to Create A Product Ecosystem
Regardless of your company's success in creating, marketing, and selling your product, you can often achieve greater benefits by sharing your success with other companies. I think of this as creating a product ecosystem, in which various entities interoperate to achieve one or more mutually beneficial goals. A classic example of an ecosystem is the set of companies that create plug-ins for Adobe Photoshop. These plug-ins extend the product in well-defined ways, usually providing specific functions required by niche markets. Key participants in this ecosystem benefit, including Adobe, the company creating the plug-in, and, most important, the customer.
It's Common Sense
A good tarchitect will just about always add some form of API to his system to make it easier to test via a solid automated regression test framework. A good marketect will seek to leverage this technical investmentafter all, who knows what the future may bring, and all that may be needed to add this feature to the product is some documentation.
Regardless of your motivation, it is essential that the development effort embrace the notion of an API as a commitment to your customer. A customer, partner, or other entity, such as a system integrator or value added reseller (VAR) that chooses your APIs is tightly bound to your product and your company. This commitment is for the long haul.