The raised issues regarding software engineering for MNDS indicate different types of software users. The fact that this work deals with software approaches ultimately aimed to be utilized by users, requires an analysis of the available user types to allow for efficient code development tuned to the individual requirements. Overall, three user categories are identified, those being the end user, the advanced user, and the developer.
The end user is a person who utilizes software tools and is not interested in the technical details of the tool, either due to a lack of interest, time, or skill. The end user interprets software as a black box and thus only cares about the input and output quantities. An example from academia would be a physicist who develops a mathematical model to describe a physical phenomenon. In this case the researcher is solely interested in software tools allowing to implement and to apply the mathematical model with minimum effort. Concerning the private sector, in particular the field of MNDS, the end user is typically represented by engineers, being highly skilled in a specific field. From a development perspective, the end user requires particular treatment regarding the usability, meaning that technicalities must be hidden as good as possible. Also, automatisms have to be provided, initializing certain options to reasonable default values. Overall, the effort of using the software has to be minimized as much as possible.
The advanced user is similar to the end user albeit offering additional skills and flexibility to investigate (possibly new) software tools. Overall, the advanced user requires access to technical details, either to improve the quality of the software output, to reduce the computation time, or simply out of interest. This particular type of user is primarily found in academia, as the scientific freedom associated with research positions allows to investigate available approaches, such as represented by software tools. A typical example would be a researcher with a background in semiconductor device simulation as well as mesh generation. In this particular case, the advanced user potentially wants to investigate the mesh quality prior to conducting the actual device simulation. On the contrary, the private sector rarely harbors such advanced users due to the fact that it is usually too expensive for a company to assign highly skilled engineers to investigate details on techniques and approaches required for generating results. Concerning software engineering, supporting an advanced user requires to expose technical details and customizable options.
The developer - as the name indicates - develops software used by either advanced or end users. Contrary to advanced or end users a developer is only marginally active in generating results of applications. However, he or she is highly interested in the means to generate them. In academia a developer relates to a researcher who develops or maintains software. Aside from the software responsibilities, a developer in academia usually has to publish. On the contrary, in the private sector, developers are typically represented by software engineers who have to focus entirely on the software tasks and are usually not required to publish their work. Developers require low-level access to the software, e.g., an application programming interface ( API) and corresponding documentation.