Software development is a rapidly evolving field. With users getting used to numerous choices available before them, their expectations for any software have equally evolved. These changes require both software instructors as well as designers and developers to understand the evolving software landscape and be able to adapt to develop quality solutions meeting the user demands. This article explores the requirements of next-generation software.

Considering the rapid advancement of technology around the world, it will not be surprising if software architects and developers say that they are bewildered by this rapidly evolving software landscape. And if we include all the desktop, mobile and web applications1 along with the web services, there is an enormous amount of choice before us. This swift advancement has put tremendous pressure on software instructors as well. They must be well-informed about different available solutions as well as their pros and cons, before deciding on the topics to be included in their proposed courses.

It is not alarming that some of us are overwhelmed by the buzzwords. Just taking into consideration the last fifteen years, things have changed so rapidly. From talks about the internet, websites, web services, web applications, HTML5 to mobile phones, mobile operating systems, design, and development frameworks, we may have come across a lot of different technologies and solutions. Adding to all of these, we also saw a major shift in how we look at the different applications. We have slowly moved from talking and handling just application configuration to managing user data as well as data generated by running an application. Both software development as well as product development are now exploring data-driven approaches 2,3,4. All these advancements necessitate a proper understanding of next-generation software needs. This article takes a look at some major topics and the available possibilities.

Requirements of Software Applications

In this article, the term software application encompasses desktop, mobile and web applications, unless explicitly specified otherwise. What are the requirements of next-generation software applications? Should we build applications only for the web? Is there a need to store and manage data and if yes, where do we store them? How can an application link with other applications? Why do we need to integrate some basic search features within an application? Some of these discussions are summed up under the following topics:

  1. Online solution
  2. Data Storage and Computing
  3. User profiles
  4. Search and Recommendation
  5. Application Programming Interface (API)
  6. Community
  7. Software Evolution and Extensions

1. Online solution

Some years ago, developers used to debate on online forums whether they should focus their energies on building an online solution. As more people are now using mobile phones, the debate has moved to whether they need to build a mobile application. During all these debates, one may feel whether we have completely forgotten about desktop solutions. A vast majority of designers and developers use desktop solutions for their daily tasks. Yet, online discussions on development may give an impression that desktop development is over and the entire userbase is either on mobile devices or only using web browsers.

No doubt developing solutions for different desktop and mobile platforms is a challenging task. It is sometimes difficult for companies to build native solutions for every platform out there. In fact, this was one of the reasons that businesses shifted from desktop solutions to providing their solutions on the web. What made web different was the availability of open standards5, which ensured that irrespective of user platforms, the users will have a uniform experience. These standards also ensured that they can access services provided by companies by using web browsers on both mobile and desktops, without the need to install any application on their machines.

With all that being said, it is important to note that desktop development has not disappeared. Several games are still only available on personal computers. Thus understanding the potential userbase is important before deciding on whether one should go for a web-only solution or not. The userbase study means understanding the platform of available domain-specific software applications, their limitations and the willingness of users to switch from desktop to mobile or from desktop to online versions or in reverse.

So, what are the available options before us, if a consensus was made that the application must have a desktop as well as an online version? Programming languages for the web6,7 are not the same as those that we use for developing applications on the desktop. Therefore, much recently, web standards have been developed that allow compilation of software code written for the desktop to be translated to a portable binary code, that can be used to run these applications on the web. Approaches like asm.js8, PNaCl9 have now led to an open standard like WebAssembly10,11.

To conclude, there are several options before the developers: build native applications, i.e., applications suited for a particular platform: mobile and desktop or build online solutions based on web standards like HTML5. Desktop developers can also make use of standards like WebAssembly for web users. Additionally, developers also have the possibility to make use of cross-platform frameworks12 like Qt13, Ionic 14, React Native15 ensuring that the applications can run across all mobile platforms or all desktop platforms. While a majority of these frameworks are either targeted for mobile platforms or desktop platforms, frameworks like Flutter16 can be used to build applications that can run both on desktop, mobile and web platforms.

2. Data Storage and Computing

The next important question is whether your proposed application will produce data or manage the user or enterprise data. If the response is yes, the question of data storage is very crucial. If you have been using personal computers for more than a decade, you may have used or even maybe using them for storing a large number of your personal stuff, including images, personal notes, etc. And companies may have been asking their employees to store data on their local machines, with period backup and archiving of these data. This management of data storage requires IT professionals for regular monitoring and maintenance of the hardware and software. But with the arrival of cloud storage17, users and companies have started exploring storing some of their data on external servers (also called public cloud) managed by cloud service providers. Even though the cloud removes the task of periodic maintenance of machines, many companies are nevertheless hesitant to store their confidential data on external machines. Thus, some private cloud options18 have appeared, which has all the flexibility of handling the data, but the storage servers are managed by the companies themselves.

Application developers must therefore spend a great deal of time discussing, designing and developing this crucial component of the application. Will the application only require some configuration data? If there are other information that is produced during the execution of the application, what are the different types of data that will be produced? Is there a need to store the application usage data (e.g, logs)? What data formats should be used? Will the application re-process the produced data? Will it be processed by other external application for analysis purposes? Is local storage enough? Is there any real need for storing data on the cloud? If cloud storage is required, which of the options is relevant18: public, private or a hybrid approach making use of the public cloud for some (open) data and private cloud for confidential and sensitive information?

If your application performs computation making use of this managed data, it is essential to understand how much of data transfer is required between your data storage component and data computing component. This may seem absurd to some. Aren't the data storage modules and data-intensive computing modules on the same physical machine? There are several reasons why storage and computing components maybe miles apart. This maybe because both of these are managed by two autonomous entities, one managed internally by the company itself and the other by an external company. Take for example, in recent years, especially thanks to the surge in machine-learning platforms19, companies are dependent on external high-power computing sources, which requires that a subset of data be transferred to the computing platform. As a consequence, it is important to equally emphasize on what, how and where data are stored and exposed. Some of these data maybe confidential or may contain sensitive personal information. Therefore, storage and computing components in the same place may not be a sound solution. Nevertheless, efforts like edge computing20 work towards bringing computing (closer) to where the data is stored.

Finally, companies are making a number of decisions driven by data. Dependence on external cloud-storage solutions may seem a simpler solution in the short run. But, it is equally important to ensure that the stored data makes use of standard data formats, ensuring easier portability of data from one solution to another, in case a cloud storage or computing provider shuts down their operations. Both companies and users may wish to explore different cloud storage and computing platforms. Therefore, configurable backend for storage and computing must not be just an option, but also a necessity.

3. User profiles

Applications may or may not require the management of user profiles21. Building user profiles maybe useful to give a personalized user experience. Take for example, certain search engines may store queries made by the user and make use of this search history to automatically build a user profile, to help them with relevant search results for their future search queries. Whereas, certain other search engines may decide not to link the search queries with any user.

It may appear that only online web applications may have the need to manage user-profiles. But this is not the case. Even desktop and mobile applications may provide the option to create user profiles22,23. Users may use the same application for their profession and personal uses. And user profiles play an important role in separating the two different use cases. Sometimes, user profiles are created so that they can be shared. For example, if the users want to share their reading list, TV series list or bookmarks, they may create a specific profile. They may also make use of categories and tags to achieve this objective. Such user behavior is present on desktop, mobile and web applications, with different user strategies employed on each of these platforms.

Thus, application developers also need to question whether they need to develop a generic solution without any separate management of user information or they build a multi-user solution, where each user has the possibility to create an account to manage the application data. Multi-user applications can also support multiple profiles per user for different use cases. User-management has the additional advantage that they can be charged based on their application usage. However, building a multi-user application may also require extra care and also dedicated security components for sensitive personal data24. How can applications improve user experience, whether or not they make use of data linked to individual users, like in the case of search engines discussed above? The questions of data storage, security and user profiles are therefore vital for application management.

4. Search and Recommendation

Irrespective of the size of your application, it must have a user manual25. It is rather common to find users completely lost with the various menu options and ending up querying on external search engines and posting queries on how to achieve a particular task on the particular application. Although a number of desktop applications do come with a user manual, it is very difficult to find answers to specific queries without a search feature. Also, in many of the recent desktop applications, the documentation is only available online, which means that offline users cannot access the required information within the application. Nevertheless, there exist several formats like DocBook26 that can be used to write documentation that can be easily translated to a desktop or a web documentation.

Search engines, initially starting as a directory of information on the websites, based on topics27 from the very beginning have played a big role in helping users find required information. We may have witnessed a big change in user behavior during the last several years, where such online services have played are used for searching a website, finding information from a particular site and even searching a URL28. One would thereby wonder the necessity of integrating user manual within the application, instead of just having an online presence for the application and just letting the users make search queries to find the required information on the application website. Indeed, for this reason an integrated search engine for an application may not be considered a necessary feature by many developers. There are several advantages of having a search feature within the application29. If you decide to integrate a search feature or search manual into your application, you can quickly find the required information. Command-line users and C/C++ developers know how the command man can be used to quickly find the syntax and semantics of a given command or a function on Linux environments. IDE users can get the function syntax just by hovering their mouse on a given function.

Another interesting feature is the ability to recommend features to the users, based on their usage or search queries. You can better understand your user needs. Also, what if these feature search queries can be used to personalize the application or build a personalized application? Most users do not use or may not need all the features provided by the application. Yet, a vast majority of applications come fully packed with lots of menu options, leaving no possibility for a minimalist application. And if you have also decided to support the creation of user profiles, you can also use user search queries to improve user experience. For example, placing a frequently searched feature as a menu option.

5. Application Programming Interface (API)

As mentioned above, it is sometimes very challenging to build cross-platform applications, without knowledge and expertise in various technologies. One solution that has emerged and quite widely adopted by various companies is to expose an application programming interface (API) for their applications. These APIs expose the resources that are handled by the applications along with a set of permissible operations on them. The operations can be used to export or import data to and from external sources, access (reading) or listing all the application resources, obtaining detailed information on a particular resource, searching relevant resources with or without filters, updating and deleting partial or complete information of a resource, even analyzing and obtaining recommendation based on different needs. There can be synchronous or asynchronous approaches to access, modify and even delete these application resources. Whether or not, the companies expose a complete set of API operations that can be used to build a completely look-alike interface on different platforms is indeed a major design decision. Some companies maybe hesitant to expose the complete set of API operations and thereby provide only a limited operation set, that can only be used to extend the application.

Nevertheless, a generic application can be built that can be used to browse API of any application. Attempts like Postman30 or a graph browser31,32 are indeed appealing and are used by developers as a minimalistic resource browser for navigating the application resources as well as to access resources exposed from different service providers, especially open data providers. Such a generic widely used application by all categories of users is still missing.

Whether an API is required for your application, desktop, mobile or web may seem to be a difficult question. However, having an API has a lot of advantages. API from different applications can be used to enrich the data for a given application, by providing additional context. A Todo-list application making use of Calendar Application API can suggest whether another event is already present on the given date in the calendar, for example.

APIs are only a part of the different possible interfaces that can be exposed by applications. Several other interfaces other than the graphical user interface are also available like the command-line, a REPL33, declarative query interface endpoints, making use of query languages like SQL, SPARQL34 or other domain-specific languages.

6. Community

A number of software developers opt to share their source code hoping to get feedback from other software developers. Sharing the source code with open-source licenses opens doors for collaboration35 and may play an important role in building interesting mashups of applications. If your application has an API, it is also an occasion for interacting and discussing the likelihood of building applications for different platforms.

Communities play an important role in creating and improving software solutions. In some cases, your userbase members are also developers who can report bugs, propose interesting features and can even contribute in the form of writing technical documentation as well as writing code. But before you decide to open up your source code, you may have to decide the open-source licenses for your code and documentation as well as create a contributor agreement36, which the contributors need to adhere to. A lot of companies who were initially hesitant to open up the code have recently approached the open-source community for feedback and collaboration. Yet, managing a community is not an easy task. Therefore it is necessary to have clear documentation on what type of contributions are accepted, whether the objective is on reporting issues, or improving documentation or improving certain portions of the source code.

7. Software Evolution and Extensions

Finally, as years pass, software needs to be improved or upgraded. These improvements can be in the form of integration of new features, enhancements to the user interface, bug fixes, handling security vulnerabilities etc. If your application has an active community, this also means that several feature requests and associated software code changes are made. Often, it is difficult to decide what new features can be accepted, how often new releases will be made. Handling the evolving requirements may then take a major proportion of your development time.

What are the possible options? Taking lessons from the development of open-source software like Firefox, Chrome, Blender, Inkscape etc., one could see that these applications have been able to decide the core feature of their respective applications. However, to support the various requirements of their userbase, they built a pluggable architecture, where they have built a minimalistic core that accepts extensions to the code during runtime. Both Inkscape37 and Blender38, for example support adding scripts that can be used to draw and model exciting objects on the main display screen. If you see their release cycles, you may not find it astonishing that they are indeed long. Therefore an architecture that allows extensions can help to easily support the growing needs of the community without making frequent changes to the core architecture. Thus releases to the core architecture are made quite rarely.

Conclusion

Software development is rapidly evolving. What started as development on desktop development has now diverged to a large number of different platforms: mobile and web platforms. Development on these different platforms requires a proper understanding of the underlying technologies and associated programming languages. The last decade has seen an evolution in user behavior concerning the different platforms, from data storage requirements to community support. A proper understanding of the requirements of next-generation software applications is therefore necessary to build a solid software application, that can easily also evolve in time.

References

  1. Application Software
  2. Data-Driven Development
  3. Modern Data Oriented Programming
  4. Data-driven development: Why Porsche engineers turn to Big Data
  5. W3C standards
  6. HTML & CSS
  7. JavaScript Web APIs
  8. asm.js
  9. Google Native Client
  10. WebAssembly
  11. WebAssembly
  12. Cross-platform software
  13. Qt
  14. Ionic
  15. React Native
  16. Flutter
  17. What Is Public Cloud Storage?
  18. What are public, private, and hybrid clouds?
  19. 18 Machine Learning Platforms for Developers
  20. What is edge computing and why it matters
  21. User profile
  22. Profile Manager - Create, remove, or switch Firefox profiles
  23. How to create and manage multiple user profiles in Chrome
  24. How Privacy Laws Are Changing To Protect Personal Information
  25. Technical Documentation in Software Development: Types, Best Practices, and Tools
  26. DocBook Version 5.1
  27. The Yahoo Directory — Once The Internet’s Most Important Search Engine — Is To Close
  28. Why do users search for URLs?
  29. Give your Web site its own search engine using Lucene
  30. Postman | The Collaboration Platform for API Development
  31. Graph Explorer
  32. Wikidata Graph Builder
  33. Read–eval–print loop
  34. SPARQL
  35. 6 motivations for consuming or publishing open source software
  36. Contributor License Agreement
  37. Inkscape Extension repository
  38. Scripting & Extending Blender