# Developing Microservice-Based Applications Using the Silvera Domain-Specific Language
## 3 Silvera
### Silvera Concrete Syntax
#### 3.3.2 Service Registry Declaration
To mitigate this, we designed the task to be as simple as possible but also structured the documentation so that participants could quickly setup the environment and solve the task (see Section 5.4). InstrumentationIn Section 4.3 we showed that most of the code for the presented use-case is generated automatically by Silvera and does not need to be edited afterwards. Nevertheless, the ratio between the amount of generated code and the manually written code depends on both the developer's coding style and level of expertise. In addition, results may vary depending on the tool used to count the number of lines in the code. Furthermore, even though the presented use-case covered all concepts of Silvera, the number of manual changes may be different for a different microservice-based system. ### External Validity

SelectionWhile conducting the survey, we managed to gather only 18 participants to evaluate Silvera. That might be due to the significant time needed for participants to familiarize themselves with Silvera to complete the questionnaire. In addition, we aimed to select participants with previous experience in working with microservices, but participants' experience varied. Therefore, the survey may yield different results in the case of a larger number of participants, or in case of a larger number of more experienced participants. SettingThe complexity of the task performed by participants during the survey may also affect survey results. The task was designed to be simple but still to cover all basic concepts of Silvera (see Section 5.4). That allowed all participants to complete the task in a reasonable time. However, a simple task could affect the results in many ways. For example, whether the DSL is appropriate for the domain (\(H0_{1}\)) and DSL's usability (\(H0_{2}-H0_{4}\)) are better tested on more complex tasks. Additionally, the number of errors in simple tasks is less than in more complex tasks due to fewer LOC. Thus, how Silvera protects users from making mistakes (\(H0_{5}\)), productivity gains, (\(H0_{6}\)) and resource allocation (\(H0_{7}\)) could be better perceived in the case of a more complex task. Lack of IDE support could also affect the results of the study. Participants could use the arbitrary text editor to create Silvera programs, but since Silvera is not integrated with any of them, errors can be discoveredonly during the compilation. To mitigate this, we paid special attention to error reporting and performance (see Section 4.3) when developing Silvera. This enabled participants to quickly discover and fix errors. However, we plan to add IDE support in the future to enhance the user experience (see Section 8). Due to presented threats to external validity, we cannot claim that the results of the study can be generalized to other participant populations or settings. To mitigate this, we plan to perform more detailed studies in future (see Section 8). ## 7 Study Limitations

In this section, we discuss the limitations of the current approach and implementation. In addition, we give some ideas for future work. ### Decentralized Development

Silvera performs at its best if the whole application is described in the model. However, Silvera is not necessarily a centralized solution. Some teams may opt for Silvera during the development of MSA, whereas others may choose the manual approach. This approach has several limitations since the information about the system can be dispersed over several Silvera models or manually implemented microservices. _Lack of information about dependencies._ Microservices defined outside of the Silvera model cannot be set as dependencies of microservices from the model. Because the AEP (see Section 3.4.1) relies on dependencies, the results of the architecture evaluation will be incomplete or incorrect. Silvera generates a code for communication between the microservices based on the dependencies. In this case, such code needs to be added manually.