IT technology plays an increasing role in business. Despite the resistance of some, IT will play an ever increasing role in enterprises. Rather than being slow to embrace trends, enterprises should think at how to take advantage of the digital world to transform their customer experience and facilitate the way they do business or create new products and services. Throughout this blog entry, I will refer to these approaches as the “solution” to be developed. It will be different for each enterprise, but the principles remain the same. As start-ups and enterprises go down the path of digitization, there are a couple elements that become obvious. Let’s review them.
Speed is of the Essence
Where the older ones amongst us have grown up in an environment where things are perfect before you release them, that’s old school thinking today. Even if you only have a fraction of the complete solution you plan to offer, make it available and claim the space. Now, you better be sure your product or service is easy to use, intuitive and adds value to the user. Otherwise you will kill your brand. But claim your niche space early, as in many markets it is a “winner takes it all” approach.
Once you are out there, keep surprising your users with regular releases of new features and functions. Stick to the easy-to-use mantra, to the intuitive approach, or you will lose your customers. In fact, some innovative companies initiate the dialogue with customers, allowing them to “co-invent” your approach. Many users are eager to give you feedback.
You’ll reach users through their mobile devices, whether phone or tablet. So, make sure you develop your solution accordingly. Create a “client-server” approach, where an app, downloaded on the device, interacts with the user, and contacts a cloud resident application handling the main functionality. This application may in turn consist of multiple modules that each perform a portion of the work. The issue you will have is that the mobile application will need to support multiple form factors and multiple technologies. There are ways around that, but the user experience is critical. So, pay appropriate attention to the mobile apps first. In early stages, you’re better off limiting the actual functionality performed by the mobile app itself as you do not know what compute power you have available, but make sure the user interaction is intuitive and it links well to the back-end.
Plan for scale
As you’re expanding into new areas, audiences, and markets, you may have a much speculated guess as to how well your solution will be accepted. So you don’t know for what performance you need to plan. A non-responsive application will kill the user experience, so plan for scalability right from the start. Ensure your application can take full advantage of the cloud so, regardless of how successful your solution is, your users have a great experience. Great usability, value and experience will bring them back.
Whether your back-end applications are specifically written for this service or whether there are existing ones you “mobile-enable”, you will have to do work on ensuring they take full advantage of the cloud. Run through a number of end-to-end scenarios when you design your solution so you understand the role of each component and how they fit together. This will also allow you to identify any bottlenecks and how you can ensure the user never has to wait for information.
As a side benefit you will also be able to identify the architecture you will need and what functionality should reside in which module. If you’re starting from an existing application this will indicate the level of re-factoring you will have to do to ensure your applications provides the necessary functionality in a way that keeps the user interaction going.
Build on agile development principles
Now you can start developments. On the mobile side, design and validate the user experience using wireframes, design sketches and clickable prototypes. This will allow you to test the future application with potential users. Define how much functionality you need to embed in the mobile application, keeping in mind the potential security challenges you may have.
On the cloud side, think through the initial functionality you want to deliver. There needs to be enough of it that the user wants to come back and continue using the application, but not too much so it takes too long to develop. Build a kernel of functionality and at a later stage you’ll be able to add extra functionality around it. What is important is to carefully identify that kernel.
Using agile technologies, you build the kernel technology in subsequent iterations so you start understanding how it actually work together. Develop the mobile and back-end functions in parallel so you have a clear view of how the end product will behave.
Automate test & deployment
As I mentioned earlier, regular releases keeps evolving your solution. Automating the deployment in all phases of the lifecycle (development, testing, QA/Staging & Production) helps manage the multiple installations that will need to be performed every time the solution evolves. If we can complement this with automated testing, we can really start gaining time. You may not be able to do all tests automatically, but the more you do the more you can improve the productivity of your development teams, resulting in faster time to market.
Automating tests require the development of test scripts and the availability of test data. Test scripts should reflect closely the functionality the developers intend to include in the solution at each step in the process.
For that reason it is important to develop the test scripts in parallel with the actual functionality developments. And this requires teamwork. You do not want the developer himself to write the test script as he knows exactly how he has developed the functionality. It may be obvious for him that things are done in a certain way. But that may not be the case for others. This is where collaboration becomes so important.
Once developments have been done, the source code is checked-in in the source code repository. This should initiate a build and deploy process automatically. This automation needs to be set-up. How the application is deployed and what components it uses should be highlighted. And here is where topologies come in. Building on the TOSCA standard, (If you have about 15 minutes and want to understand the added value of TOSCA, take a look at this video), you can build application deployment topologies that are independent of the infrastructure on which you deploy. You can also develop microservices which standardize the deployment of application building blocks, also called runtime services. This does not just facilitates the deployment of your applications and solutions but also standardizes the way your middleware, databases and networking software components are installed, reducing management and operations costs.
Cloud and DevOps, the two sides of the same coin
DevOps speeds up the process of getting applications deployed, allowing you to quickly increase the functionality you deliver to your users. But these deployments need a flexible infrastructure environment to provide the servers, storage and networking required to deploy your applications. And here is where cloud complements DevOps. Together they give you the flexibility you require in todays world. Actually, should DevOps and Cloud be separated, or should any cloud environment automatically come with a DevOps component, at least the continuous deployment capabilities. Why shouldn’t we include in the cloud service the delivery of a series of microservices optimized for the platform. Using a standard such as TOSCA, interoperability is ensured. What do you think?
The original version of this blog entry was published in June 2015