The engineering of smartness in software-based systems

In the first part of this blog series, we discussed the pursuit of smartness in software-based systems and showed how context awareness often enables what is perceived by end users as “smart behavior”. In today’s post, we address the question of how smartness can be engineered.

Real smartness in software-based systems goes beyond data collection and network capabilities. Software-based systems are smart if they show intelligent behavior. Data collection and network capabilities enable this often, but not necessarily. For example, a GPS navigation system that automatically switches to a dark theme layout in low-light conditions does not require network connectivity. However, even when data collection and network capabilities are necessary, they are not sufficient: More has to be done to create and deliver context-aware functionalities.

In recent decades, we have improved our ability to collect and store large volumes of data, but the next question now is: What do we do with it? Or, more precisely, how should we process it? There are at least two answer paths, which complement each other. One refers to how to process raw or low-level data to derive high-level contextual information that is meaningful for humans. The second is how to process the context to show context-aware behavior. For example, there are many sensors in current mobile phones whose data is processed to indicate whether the user is walking or driving a car or riding a bus. Another example: raw GPS coordinates can be used to tell whether the user is at home, at work, or near a grocery store. And you can always further process lower-level contextual information to derive higher-level contextual information (for example, walking near a grocery store could have a special meaning for a certain system-supported user task in a particular domain).

Identifying contextual elements

The elicitation of context-aware functionalities requires the identification of contextual elements. A contextual element is “any piece of data or information that enables to characterize an entity in a domain” [1]. Consider, for example, Airbnb. In that system, the list of entities could include, for example, the traveler, the host, and the accommodation. Table 1 shows potential contextual elements that can help characterize these entities.

Table 1. Potential contextual elements of some AirBnB entities.

EntityContextual elements
TravelerAge, marital status, home city, traveling habits
AccommodationLocation, type of accommodation, number of rooms

Contextual elements that are relevant in one particular application domain may not be so in another. Therefore, an early (and essential) step in the design of context-aware systems is to know what contextual elements are meaningful in the application domain of interest. The identification of contextual elements is a creative process that can be positively influenced by the system designers’ experience with context awareness, which makes the identification (and eventual implementation) of context-aware functionalities a technology-driven activity. In 2016, some researchers investigated the design of context-aware systems in a set of studies and showed how the technology-driven approach works [2]. Of course, not only technology experts but also domain experts can contribute to the identification of contextual elements. Yet another study proposes an iterative process that investigates the domain context using both top-down and bottom-up perspectives [3]. While creativity is still regarded as an essential tool, the approach provides an initial systematization to specific creativity techniques (brainstorming, think out loud, and card sorting).

Using contextual elements

Now assume you want to add context awareness to your application and have already identified the relevant contextual elements for your application domain. For example, let’s say that in your application, contextual elements such as “current time”, “user location”, “weather”, “user activity”, and “user mood” are available . At this point, the question is: How can these contextual elements be used to describe context-aware functionalities? This is often a trick question because context-aware functionalities deal with implicit input and often provide users with positively unexpected (or “smart”) behaviors. During a user interaction in a traditional application, users provide explicit input to the system, which then generates output. In a context-aware application, implicit input is provided by (or sensed from) the context and influences the system behavior.

The creative process is typically associated with the “lightbulb moment”, where it starts with an insight in one’s mind (the idea). This initial idea needs additional components to nurture it (experience and knowledge). The idea is then communicated and expressed through language, and actions are taken to actually implement the idea and produce a creative product [4]. The concept of nurturing can be found in manifestations of the creative process such as Design Thinking or the Design Sprint, where experience and knowledge are brought into the process by working in multidisciplinary teams and taking time to understand users, their challenges and problems, their needs, and the context they find themselves in.

Understanding users and, especially, their challenges is key to producing creative solutions. In the first part of this series, we discussed the Kano model and the role of delighter features. These unexpected features cause the “wow effect” and are crucial building blocks for truly “smart systems”. Creativity processes are the tools one needs to employ to come up with ideas for such delighter features, as they can’t simply be elicited from users or other stakeholders.

Starting the creative process with the users and their problems in mind and further exploring them with the help of experience and knowledge of multidisciplinary teams will, when implemented properly, lead to desirable solutions. Desirability is a necessary but not sufficient attribute of the result of a successful creative process. Techniques for nurturing ideas and shaping solutions must make sure that it is actually technically feasible to implement it and the resulting solution (i.e., the smart system) is viable from a business point of view [5]. Therefore, it is important to follow an approach to creativity that brings together a thorough understanding of users, their problems, needs, and desires with the potentials and limitations of technology and business.

At Fraunhofer IESE, we created the method VIEW (Vision & Innovation Experience Workshop) for multidisciplinary teams, which utilizes several different creativity techniques and produces concrete solution scenarios for smart systems within one to one-and-a-half days. Techniques are used to discover problems and their root causes, come up with a large number of ideas, and boil them down to concrete solution scenarios. Engineering smart systems and creating desirable context-aware delighter features happens within the creative process, but not by chance. In each technique, we use explanations, examples, triggers, and constraints to stay within the boundaries of business viability and technical feasibility while ensuring that the technology-driven perspective of context awareness is an integral part of the creative process. For example, problem discovery can be steered towards the “right” problems (i.e., those that promise high potential to be solved with context-aware features) through phrasing of the task in this technique. During brainstorming, certain contextual elements can be used to ensure ideas are generated that utilize these elements (i.e., producing ideas for context-aware features). The success of this creative process lies in the tailoring of each individual creativity technique to ensure the creation of ideas for context-aware systems while also producing desirable, feasible, and viable solution scenarios.

Boosting creativity

In recent years, we have been investigating how creativity can be improved in the elicitation of context-aware functionalities, for creativity techniques alone also have their own limitations. Even for experienced requirements engineers, it may be hard to think about the various different ways in which the context may influence a given user task. To address this issue, we have been doing research on how to leverage contextual data to support the elicitation of context-aware functionalities. This will be the topic of our next and final post in this series: Data-driven smartness engineering. See you then.

Do you need support on engineering creativity to discover context-aware functionalities for your software-based systems?

Our team in Digital Innovation Design can assist you. Stay in touch with us!


[1] Vieira, Vaninha, Patricia Tedesco, and Ana Carolina Salgado. „Designing context-sensitive systems: An integrated approach.“ Expert Systems with Applications 38.2 (2011): 1119-1138.

[2] Bauer, Christine, and Anind K. Dey. „Considering context in the design of intelligent systems: Current practices and suggestions for improvement.“ Journal of Systems and Software 112 (2016): 26-47.

[3] Bauer, Christine, and Sarah Spiekermann. „Conceptualizing context for pervasive advertising.“ Pervasive Advertising. London: Springer London, 2011. 159-183.

[4] Glăveanu, Vlad P. and Kaufman, James C. “Creativity – A Historical Perspective.” in Kaufman, James C. and Sternberg, Robert J. (editors): “The Cambridge handbook of creativity”, 2nd edition, New York, 2019. 9-26.

[5] IDEO U. “How to Prototype a New Business.”, last accessed: 2023/11/28.