In the old days you could create an application that automated one aspect of your business process and that was fine. And in a lot of exercises and assignments in school, that is how we are taught to do things. But that is not good enough anymore. Most everything has already been automated in isolation, but now the problem is that these silos don’t talk to each other. Here is an example:
I was talking to a co-worker. He travelled a lot and had a ton of points with a hotel chain. He decides he wants to use some of those points to get a free hotel room for an overdue trip with his wife next week. So he logs on to the hotel web site to find a room and reserve it. He wants to pay for the room with his points. He can see the reservation, and he can see his points, but it isn’t obvious how to do the transaction with both. Then the hotel’s instructions go something like this: “If you wish to use points for your hotel stay, please call our 1-800 number to redeem your points as a paper certificate. Your certificate will be mailed to your home address in approximately 14 days. Please present the certificate upon check-in to complete the redemption process. If you wish to expedite the delivery of your certificate, click here to pay $20 for the overnight shipping charges.”
How lame is that? Not only does it cost money for the hotel chain to deal with those paper certificates, but it angers the customers they are trying to reward. Systems developed in isolation that don’t talk to each other.
So not only do our applications need to do things well within their own scope, they need to connect with everything else.
If you think about how business works, it’s really more about workflow that cuts horizontally across many areas, it’s not a vertical silo. And the workflow can start other workflows (fork), or receive input from others (join). For example, a customer order that debits inventory that orders replenishment from the manufacturer that may start a new credit request.
It’s not possible to build everything into a single application. Scope your application, but enable the data flow so that it can communicate with other systems that haven’t even been built yet.