Upgrading Software Applications to New Technologies – Reencountering the Unknown

Ernani Ferrari

Reading time: 3 minutes

Updating software applications to a new technological paradigm, as were graphical user interfaces or the use of the Internet, is an intense and many times even painful experience. This is a challenge many software development teams are facing today. For them, amidst the typical hurry of such projects, an important reminder is that what is needed are finished products, not started projects—therefore, development teams should move carefully and slowly if they want to get there fast!

Currently, applications are developed for deployment in the clouds, for native use of the Internet’s capabilities, for access through mobile devices, and, in the case of commercial software, for distribution in SaaS (Software as a Service) models. However, these characteristics cannot be found in applications developed over a decade ago, which are still widely used today. They are installed on dedicated machines, use client-server access procedures, and only marginally explore what the Internet can offer, unaware of the benefits of means such as distributed processing, anywhere access or mobile-device enablement.

Whether for sales appeal, operations improvement or simply to make home-developed systems compatible with what is available on the market, software developers are again running into an old acquaintance—technology updates. Or perhaps “stranger” is a more appropriate description, given they are once again faced with, as many see it, a novel, untried, uncontrolled, untested and risky fork in the road that will lead to either success or failure.

Many mature software companies and IT departments of all kinds are still being brought out (or forced out) of their comfort zones by the new technological paradigms, in particular cloud computing, Internet resources, mobility alternatives, service-oriented architectures for software, and the challenges of a new level of demand for the overall user experience. These organizations are facing the unknown—environments, tools, and resources with which they have not yet dealt. In this reality, much of what they know is no longer useful. What they have learned, and what has worked before, is no longer applicable. What they held as certainties no longer help, and many of the tools they mastered will be of no use for the work ahead.

This new reality requires new technological infrastructures—ranging from the computing environments to new frameworks with which the new applications, and the new versions of old systems, will be developed. All of this will require new knowledge on matters such as computing architectures, data persistence, information security, load distribution in multiple processors, handling of large data volumes, access by multiple devices, web-user interfaces and personalization. Moreover, besides the technological challenges, even larger challenges may come from other aspects of such projects. These may include managing end-users’ expectations and the allocation of the personnel who will be responsible for the architecture, building and deployment of the new generation of solutions, while the “old” versions, still capable of supporting the day-to-day business of so many companies, must be kept functional. On the one hand, people on current teams need to be trained in the new resources and paradigms; on the other hand, there is no time for learning or for trial-and-error approaches, forcing organizations to bring in external resources—often less experienced than one would wish and unfamiliar with the company’s current applications, organization and business itself.

Orchestrating all the necessary technological and human resources, and consequently the required finances, demands much planning since the updating of these great systems, which were developed and grew for years or even decades, will certainly be one of the most complex projects these software organizations will face in their mature life. For them, investing in research and planning is mandatory in order to save in the execution and avoid falling into the trap of starting too early and finishing too late—or never finishing at all.