# Context-Aware End-User Development Review
## 1 Introduction  
Internet of Things (IoT) and ubiquitous applications add context-aware techniques to accomplish the desired adaptation given the rapidly growing data produced by different resources (e.g., sensors, services, events) [1]. Traditionally, context-awareness considers end-users (i.e., non-technical people) as receivers of computational services through applications; and software experts (i.e., technical people) as enablers. However, the huge amount of data produced by the flooding of resources increases end-users cognitive load. The end-users are manipulating diverse technologies and smart devices, which increases the elements on which users have to decide. An essential aspect of context-aware systems is to provide mechanisms to augment the transparency [2, 3] while decreasing the cognitive load associated with using the system. One dimension of this load is linked to application development and can be handled by improving the usability of application building tools. Nowadays, building tools are not the only target for software experts; they empower end-users to build/personalize applications by themselves. Thereby, end-users achieve their goals when a building tool's outcome is an application that represents their intentions [4]. A primary challenge is improving usability while applying software concepts to guide application development [5, 6]. The usability targets comprehensible representations and proper human-computer interaction, such as adopting interface metaphors. Applying software concepts involves introducing techniques into existing users' workflow, managingthe unplanned, implicit, opportunistic, instinctive, and self-priority user intents [7]. Another challenge is to include advanced methods (e.g., machine learning) and cooperative work into application building tools [8]. Diverse solutions in the literature propose usable/useful building tools to empower non-software experts (Section 2). Recent application building tools adopt End-User Programming (EUP), End-User Development (EUD), and End-User Software Engineering (EUSE) for gathering intents and support development [4; 6; 9]. These EUP, EUD, and EUSE are three fields applied to development tools and are active research topics [9]:  
* EUP's central aspect is that programmers build a solution rather than a program [7] (e.g., a spreadsheet solution (i.e., a program) for managing the expenses). * EUD incorporates methods, techniques, and tools that allow end-users to create, modify, or extend software artifacts [8]. It complements EUP with additional aspects such as testing, debugging, reusing, and sharing artifacts. * EUSE addresses software quality aspects [7]. It adds systematic and disciplined activities for application development. We have conducted a literature review to analyze context-aware end-user development, i.e., how application building tools support creating context-aware applications. We applied EUP/EUD/EUSE concepts to guide our review that aims to answer the following research questions:  
1. What building techniques are applied to develop context-aware applications by end-users. Building techniques include metaphors/interaction styles (e.g., programming by demonstration) proposed for application specification, composition, and testing. 2. What are the development tools' implementation approaches? The development tool implementations include a description of the method (e.g., machine learning) to integrate, compose, and process context. We queried research databases selecting 37 relevant papers after screening based on inclusion criteria. Then, we classified the research outcome based on the application building techniques and analyzed tool implementation methods to get insights and challenges of how the tools integrate context to enhance context-aware processes. The paper is structured as follows: In Section 2, we introduce the main aspects of EUP, EUD, and EUSE applied to develop context-aware applications. Section 3 details the review method that we applied for the study.