So you need to connect an application to an external system. Developers and IT architects know how to cover the technical side, with for example SOAP web services, REST APIs, or stored procedures. But there is more to integration than just a choice in technology. You also face a functional challenge: the relevant functionalities of multiple applications must seamlessly fit into each other.
Our advice? Write a functional specification for each integration point and use this as a basis for technical implementation.
An integration point is a touchpoint between applications: the junction where they have to cooperate to achieve a specific goal.
For instance, your billing application has to retrieve address information from the customer application, in order to print the correct address on invoices.
How do you write a functional specification for such an integration point? Start by answering three basic questions: Why? What? How?
Clarify the purpose and the context. An integration point is part of a bigger story: it will help to automate a step in a business process. Make a high-level overview of this business process, highlight the relevant step, and explain why the integration point is needed to automate it.
Also, write down a few specific real-life examples. These will help to explain the business process in concrete terms.
On May 2nd we calculate Alex's cell phone usage for April. We generate an invoice including his full address: Kerkstraat 234, 2000 Antwerpen, Belgium. The invoice is sent to this address. Finally, we collect the payment by asking Alex's bank to withdraw the money from his account.
An integration point is about exchanging information. Application A is the central authority for all questions regarding a specific domain. Application B (or C, D, E ...) can ask a question to application A by sending input data (= the request). Application A answers the question by sending back output data (= the response) in a specific format and with a specific meaning.
You will need a detailed understanding of the data that is exchanged. Start with an information model of application A's domain (or part of it). Such a model groups data into concepts that make functional sense and shows how they are linked to each other.
This basic model shows how Address information is represented in the customer application. It contains two concepts: Person and Address. A Person has an identification number, a first name, a last name and date of birth. A Person can have one, zero, or multiple addresses. An Address has a street name, house number, mailbox number, zip code, city and country. Furthermore, an Address can be somebody's official residence, or their correspondence address.
Here, too, it is a good idea to describe real-life examples that illustrate your model.
Person: Alex | Address 1 for Alex | Address 2 for Alex |
Alex | Kerkstraat | Broekstraat |
Cooper | 234 | 1 |
02/03/1985 | (no postal box) | b |
012354658787 | 2000 | 3000 |
Antwerpen | Leuven | |
Belgium | Belgium | |
official residence | correspondence address |
Person: Nathalie | Address for Nathalie |
Nathalie | (no known address) |
Schmidt | |
09/05/1975 | |
98731548970 |
Once you understand application A's domain, you can identify the input data that have to be provided when asking a specific question.
When the billing application wants to retrieve address information for somebody, it has to send a request containing his or her identification number.
In the same way, you can define the format of the response that will be sent back.
When the customer application answers a request for address information for somebody, it sends a response containing the identification number of the Person, and all of his/her known Addresses.
The devil is in the detail. For an integration point, the standard scenario is easily identified. You send customer information, you get back an address. But what if things do not go according to plan? You need to identify the alternative scenarios that deviate from your standard flow. Ask as many 'what if' questions as you can think of. Go through your list with real-life examples to find cases that are slightly different.
When making this exercise, also think of possible error situations. Unlike the cases above, these are scenarios where something goes wrong. This means that the request will never result in a valid response.
Decide and document how you will handle each of these cases. Where necessary, add extra data to the model of the response (e.g. an error message).
Asking why, what and how will get you started with your functional specification. Here are three more tips to consider before making it final:
Got a question about integration or want to discuss your project? Our integration experts are happy to talk.