In the last few weeks I've had a few discussions and meetings to explore new opportunities. Several of them were related to software products and services. It made me also realize how in recent years the priorities in software architecture have shifted.
Years ago when you had a good idea, probably technology driven (not that this is really relevant), you created a great value proposition. The value proposition would define the functionality and feature set of your product. Once this was clear you as quickly as possible build and application to expose the functionality to your customers and users. The application in many situations was very technology driven and for the user interface, at best, the Microsoft Windows guidelines would be followed to create some consistency. You start to generate some income, collect user feedback and the application evolves. It gets a bit more complex and new requirements for usability and integration are slowly emerging. You address the usability with primarily an adjusted graphic design and small adjustments, because the architecture is a bottleneck for safely making larger changes. The integration is covered by adding a extra layer, we would call it an SDK in these days. The product is successful and you need to think about cloud and web adoption.
Today the starting point for a web/cloud based product or service is still a great value proposition defining the functionality. However a key change from the early days is that a product or service can only be successful with a very targeted and specific user experience for the different users in your target audience. The web and consumerization of IT have raised the user expectations and they are changing and becoming higher and higher quicker than the functional changes. You are challenged to constantly deliver updated and improved experiences to fulfill the expectations of your customers and users. You need to incorporate these new requirements for adaptability into your architecture. You solve this by isolating the functionality and provide and API to this functionality. On top of the API you can now build excellent experiences for very specific users and easily integrate your product or service with others. An easily accessible API, preferably build on open standards, allows you to become much more agile towards your user experiences and quickly scale the number of specific experiences.
This has completely changed the priorities you need to give to your software architecture.
It brings also new challenges, especially for existing applications. How are your dealing with these?
Image: Barbara Agnew