Skip to main content
Login | Suomeksi | På svenska | In English

Browsing by study line "Programvara"

Sort by: Order: Results:

  • Kuronen, Arttu (2023)
    Background: Continuous practices are common in today’s software development and the terms DevOps, continuous integration, continuous delivery and continuous deployment are fre- quently used. While each one of the practices helps in making agile development more agile, using them requires a lot of effort from the development team as they are not only about au- tomating tasks but also about how development should be done. Out of the three continuous practices mentioned above, continuous delivery and deployment focus on the deployability of the application. Implementing continuous delivery or deployment is a difficult task, especially for legacy software that can set limitations on how these practices can be taken into use. Aims: The aim of this study is to design and implement a continuous delivery process in a case project that does not have any type of automation regarding deployments. Method: Challenges of the current manual deployment process were identified and based on the identified challenges, a model continuous delivery process was designed. The identified challenges were also compared to the academic literature on the topic and solutions were taken into consideration when the model was designed. Based on the design, a prototype was created that automates the deploy- ment. The model and the prototype were then evaluated to see how it addresses the previously identified challenges. Results: The model provides a more robust deployment process, and the prototype automates most of the bigger tasks in deployment and provides valuable information about the deployments. However, due to the limitations of the architecture, only some of the tasks could be automated. Conclusions: Taking continuous delivery or deployment into use in legacy software is a difficult task, as the existing software sets a lot of limitations on what can be realistically done. However, the results of this study prove that continuous delivery is achievable to some degree even without larger changes to the software itself.
  • Kuparinen, Simo (2023)
    Web development is in great demand these days. Constantly developing technologies enables to create impressive websites and mitigates the amount of development work. However, it is useful to consider the performance aspect, which affects directly to user experience. Performance in this context means website’s load times. Front end web development typically involves using Cascading Style Sheets (CSS) which is a style sheet language and a web technology that is used to describe the visual presentation of a website. This research consist of a literature review part, which contains background knowledge about how web browsers work, performance in general, performance metrics along with CSS performance optimization and an empirical part, which includes different benchmarks presented in major software industry conferences for testing the performance of a certain CSS feature, that have a possibility to improve the performance of the website. The loading times obtained from the benchmarks are reviewed and compared with each other. In addition, a few techniques are presented that do not have their own benchmark, but which may have an effect on performance. To highlight the results, CSS performance is usually not the biggest bottleneck of performance on a website, since the overall style calculation takes about a quarter of the total runtime calculation on average. However, utilizing some particular techniques and managing to shrink the style calculation costs can be valuable. Based on the benchmarks on this research, using shadow DOM and scoped styles have a positive effect on style performance. For layout, performance benefits can be achieved by utilizing CSS containment and concurrent rendering. From other practices, it can be concluded that removing unused CSS, avoiding reflow and repaint along with complex selectors and considering the usage of web fonts a better results can be achieved in terms of performance.
  • Lång, Jone (2022)
    Test automation has a crucial role in modern software development. Automated tests are immensely helpful in quality assurance, catching bugs and giving information on the state of the software. There are many existing frameworks that are designed to assist in creating automated tests. The frameworks can have massively varying purposes and targeted applications and technologies. In this paper, we aim to study a selected group of Behavior Driven Development (BDD) testing frameworks, compare them, identify their strengths and shortcomings, and implement our own testing framework to answer the discovered challenges. Finally, we will evaluate the resulting framework and see if it can meet its requirements. As a result we’ll have a better understanding in what kind of tools there are for automating behavior driven tests, what type of different approaches have been and can be taken to implement such frameworks, and what are the benefits and suitable uses of each tool.
  • Benjami, Luolajan-Mikkola (2024)
    Context: Infrastructure as Code (IaC) extends the use of software engineering tools and methods to the management of compute infrastructure. Instead of performing changes manually, developers specify the desired state of infrastructure using text-based formats. IaC tooling is used to update the infrastructure to match these. Since the state declarations are text files like program source code, they can be stored in version control systems. IaC is currently widely used in public cloud environments but less common elsewhere due to lack of tooling. Objective: This thesis aims to identify how Infrastructure as Code support could be brought into arbitrary compute environments that do not support it out of the box. Method: Human-centric research methods such as polls and interviews are used to identify the key requirements for IaC systems. Based on these requirements, a functional prototype that can meet them in a variety of compute environments is built. The prototype is evaluated primarily by comparing it to the requirements and against other IaC systems. It is also tested by several users in a controlled setting. Results: This thesis presents Ink, a modular IaC system that has been designed to be deployed into arbitrary compute environments. A functional prototype of Ink has been implemented to validate the design. The prototype has passed the evaluation steps, indicating that Ink meets the key developer and organizational requirements. However, implementing IaC in this way requires substantial custom software development. Conclusion: IaC is not widely available outside of cloud environments, but adding support for it elsewhere is possible. Whether or not this is worth the development effort depends on the priorities and size of the organization that controls the compute environment.
  • Kaleva, Tomi (2023)
    Tutkimuksen kohteena oli lentoyhtiö Finnair. Finnair on tehnyt monia muutoksia IT-järjestelmiinsä ja johtamisessa viime vuosina. Vuoden 2020 lopussa kaikki palvelut siirrettiin AWSpilveen ja fyysisten palvelinkeskusten käytöstä luovuttiin. Tämä toimintamalli on parantanut IT-järjestelmien toimivuutta, koska pilvipalvelujen saatavuus ja käytettävyys on korkea. Silti järjestelmissä on ollut ongelmia, joiden syynä ovat olleet järjestelmätoimittajan ongelmat ohjelmiston kanssa. SIAM (Service Integration and Management) on lähestymistapa useiden palveluntarjoajien hallintaan ja niiden integroimiseen yhdeksi liiketoiminnalliseksi IT-organisaatioksi. SIAM tavoitteena on integroida saumattomasti erilaiset sisäiset ja ulkoiset palveluntarjoajat toisiinsa. SIAM on uusi termi IT-ympäristön hallinnasta. SIAM toiminnolle ei ole tarkkaa määritelmää, mutta yritykset voivat itse määritellä, kuinka käyttää sitä ympäristönsä kehittämiseen. SIAM on terminä niin uusi, ettei sille ole vielä löydettävissä parhaita käytäntöjä. SIAM toiminto voi olla yrityksen sisäinen toimintaa tai toimittajalta ostettua palvelua. Tutkimuksen kirjallisuuskatsauksessa perehdyttiin SIAM aiheiseen kirjallisuuteen ja verkkosivuihin. Tutkimuksessa havaittiin, että jonkin verran tieteellistä materiaalia oli saatavilla SIAM aiheesta. Näiden materiaalien pohjalta laadittiin yhteenveto, jota käytettiin tutkimuksen aikana. Kirjallinen aineisto auttoi tutkimuksen aikana ymmärtämään, miten määritellään SIAM toiminto. Näitä tietoja verrattiin tutkimushaastatteluissa kerättyihin tietoihin. Tutkimuksen lopuksi laadittiin selvitys kuinka hyvin SIAM toiminto saatiin käyttöönotettua Finnarilla. Arvioinnin perusteella laadittiin suosituksia jatkotoimenpiteistä ja suositus miten SIMA toimintoja tulisi edelleen kehittää.
  • Kortelainen, Esa (2022)
    Tässä tutkielmassa käydään läpi kirjallisuutta ja tutkimusta ohjelmistojen julkaisumenetelmistä sekä -tiheydestä niiden historiasta alkaen. Tarkemmin tutustutaan etenkin uusimpiin julkaisutiheyden lähestymistapoihin, jotka ovat jatkuva tuotantoonvienti (continuous deployment) ja jatkuva toimitus (continuous delivery). Tutkielmassa etsitään näiden lähestymistapojen käyttöönotosta odotettavissa olevia hyötyjä sekä ohjelmistotuotanto-organisaatioiden kokemuksia ja haasteita niihin siirryttäessä. Tutkielmassa etsitään myös ratkaisutapoja, joilla mahdollisia haasteita on lähestytty. Lisäksi pyritään pohtimaan esimerkiksi yrityksen toimialan, yrityksen tyypin ja muiden tekijöiden vaikutusta jatkuvan tuotantoonviennin ja toimituksen tarpeellisuuteen tai niistä saataviin hyötyihin. Kirjallisuuskatsauksen lisäksi tutkielmassa tehdään pienimuotoinen tapaustutkimus sähköisen taloushallinnon yrityksen pääohjelmistotuotteen julkaisutiheydestä ja sen tihentämisen mahdollisista menetelmistä ja odotuksista tutkielmassa löydetyn materiaalin pohjalta. Kirjallisuuskatsauksen perusteella alan kirjallisuudesta ja ohjelmistoyritysten kokemuksista saa joillain osa-alueilla yleisiä mallinnuksia ja ohjenuoria, joita tapaustutkimuksessakin tarkasteltu yritys voisi seurata mahdollisessa julkaisusyklin tihennyksessä. Jokaisen organisaation omakohtaisella kulttuurilla ja kypsyydellä on kuitenkin runsaasti merkitystä syklin tihennyksen onnistumisessa. Tarkastellun lähdemateriaalin pohjalta voidaan kuitenkin todeta, että epäonnistuneenakin pidetyn julkaisusyklin tihennysprojektin tuomat vaatimukset lisäävät helposti ohjelmisto-organisaation kuria ja sen tuotteiden kehitysprosessin laatua pysyvästi.
  • Lindholm, Roni (2022)
    Verkon avulla tarjottavien rajapintojen käyttö ja niiden tarjoaminen kolmannen osapuolen käyttäjille on lisääntynyt sovelluskehityksessä viimevuosina suuresti. Mikropalveluarkkitehtuurin yleistyminen on osaltaan lisännyt sovelluksien hyödyntämien rajapintojen määrää merkittävästi ja luonut tarpeen työkaluille ja toimintatavoille, joilla kasvanutta rajapintojen määrää voidaan hallita ja ylläpitää tehokkaasti. Tämä tutkimus koostuu kahdesta erillisestä osasta. Ensimmäisessä osassa kartoitetaan kirjallisuuskatsauksen avulla API-hallinnan tavoitteita. Toisessa osassa tutustutaan tapaustutkimuksen avulla, kuinka kirjallisuuskatsauksessa tunnistettuja tavoitteita on toteutettu ja kuinka ne koetaan käytännön sovelluskehityksessä. Tutkielman keskeisenä tuloksena on joukko API-hallinnan tavoitteita ja käsitys siitä, kuinka niistä merkittävimmät ovat toteutettu tapausorganisaatioissa. API-hallinnan käytäntöjen lisäksi haastattelujen avulla selvitettiin, kuinka nämä käytännöt koetaan sovelluskehittäjien keskuudessa. Tuloksien perusteella API-hallinta voi lisätä sovelluskehittäjien työmäärää, mutta samalla se koetaan suurien organisaatioiden tuotteiden parissa lähes välttämättömänä toimintatapojen yhtenäistäjänä. Yhteenvetona tutkielman perusteella API-hallinta tarjoaa tarpeellisia työkaluja ja toimintatapoja rajapintojen kanssa työskentelyyn, kun rajapintoja on suuri määrä tai kun niitä tarjotaan organisaation ulkopuolisille sovelluskehittäjille. Käytännössä tapausorganisaatioiden rajapintojen hallinta on toteutettu vaihtelevin käytännöin eikä sitä koeta aivan pienessä organisaatiossa lähtökohtaisesti mielekkääksi.
  • Keski-Hynnilä, Olli (2022)
    The COVID-19 pandemic moved the work force to work from home (WFH). This is also true for the internal startup Toska, who started the development of a new course feedback system (CFS) during the pandemic. This thesis compares existing literature about lean software development (LSD) and remote working to the results gained from the interviews of the people who worked on the CFS. This thesis explores previous work on topics of lean software development, remote working and work from home during COVID-19. Developers and other personnel of the CFS project were interviewed to gain insight into how COVID-19 and remote working in general affected the project. After taking a look into previous work, the study design of the thesis is discussed after which the results gained from the interviews are analyzed. Finally the interview results are compared to the previous work to see if the CFS project produced similar results. At the end of the thesis the limitations and future work of the project are discussed. The results gained from the interviews indicate similiarities and differences between other studies which are discussed in the background chapter. Similarities include things such as the developers missing the face-to-face interactions with each other and the ability to have ad-hoc discussions around a whiteboard when discussing. The project was considered a success by everyone working on it and based on the results lean software development and remote working are tools that should be taken into consideration when discussing how to do a software development project. Remote working in most cases improves the work-life balance of people and lean software development methods help empower the development team.
  • Lahtinen, Sami (2022)
    Background: The splitting of functionality into multiple inter-communicating services has created a need for managing the APIs that these services are using to talk to each other. They also present an easy avenue for faults to be introduced into the system as these services are updated over time, especially in the absence of extensive testing, such as in rapid prototyping contexts. Aims: The study aimed to find a light-weight method for detecting API breakages between services, which requires as little manual labor from developers as possible. Method: The method used for the study was design science research focused around the iterative de- velopment and validation of the method through using it in synthetic and practical use-cases. Results: The study identified the possibility of using self-documenting services and machine- readable API documentation as a means to automatically detect API breakages either via naive or more complex approaches, with complex approaches providing more granular fault detec- tion and ability to create dependency graphs between services. Conclusion: Use of more automation seems a viable approach to detecting faults in network-based communication be- tween services. With further study, these approaches could be developed into developer-friendly systems, which allow not only automated fault detection, but also visual impact analysis for complex architectures spanning multiple services.
  • Sokka, Jari (2024)
    Introduction: The need for sustainable development across sectors, including ICT, is essential today to conserve natural resources, maintain biodiversity, and ensure basic living conditions for everyone. Despite growing awareness and regulatory initiatives, software engineering practices lag in integrating sustainability. This gap highlights the call to develop software engineering to embrace sustainability principles, challenge is increasingly recognized but not yet resolved. Objective: To bridge the knowledge gap in software engineering, by identifying key concepts, methodologies, and challenges related to the integration of sustainability into software engineering. Methods: A systematic literature of academic literature with an automated search was conducted. The review included studies published between the year 2011 and 2023. The review covers 31 papers. Results: Integrating sustainability into software engineering is complex and varies widely across different contexts, as sustainability dimensions are dynamic and context-dependent. This complexity hinders the establishment of universal characteristics and underscores the need for common standards. Despite the numerous models for integrating sustainability, there is no direct solution for how to efficiently integrate sustainability into software engineering. The focus of these models tends to be more on the development of sustainable software rather than on the sustainability of the processes themselves, which limits their ability to support comprehensive integration. Additionally, various risks and challenges in integrating sustainability have been identified, with the lack of standardization as one of the biggest challenges at the moment. Conclusions: To effectively achieve sustainability in software engineering, it is crucial to integrate sustainability aspects comprehensively across the entire organizational structure, including development teams, management, and supporting departments.
  • Väänänen, Ollipekka (2022)
    Tiedonhallinta on oleellinen osa nykypäivän tietotyötä, tämä maisterintutkielma tarkastelee tietojohtamisen ja tiedonhallinnan käsitteiden avulla projektinhallintaa. Projektinhallinta on käsitteenä laaja ja tässä työssä sitä tarkastellaan rakennushankkeiden johtamisen ja eri osapuolien tiedonhallinnan näkökulmasta. Rakennushanke koostuu useasta erilaisesta sidosryhmästä, joiden tavoitteena on yhteistoimin rakentaa ja tai korvata jotakin olemassa olevaa. Rakennushankkeissa tiedonhallinta on kriittistä, sillä päätöksillä on suoranainen vaikutus projektin onnistumiseen. Työ käsittelee datan mallinnuksen merkitystä sekä sen hyödyntämistä matalan kynnyksen ohjelmoinnissa, jonka hyödyntäminen yrityksissä on kasvanut viime vuosina merkittävästi. Työn tavoitteena on tutkia kuinka rakennushankkeiden tiedonhallintaa voisi kehittää rakennushankkeiden projektityöskentelyssä. Tavoitteena on tutkia, soveltuuko Microsoft Power Platform sekä Teams viestintä- ja yhteistyöalusta tietojohtamisen työkaluksi projektinhallintaan tiedonhallinnan näkökulmasta sekä voiko kyseisillä tuotteilla ratkaista eri toimijoiden yhteistoiminnan haasteita. Case esimerkkinä matalan kynnyksen ohjelmointiin liittyen tutkitaan erästä rakennushankkeiden johtamiseen liittyvää prosessia nimeltä työmaakokous. Työn tuloksena on havaittu, että tiedonhallinta sekä työssä tarkasteltu matalan kynnyksen ohjelmointialusta soveltuu rakennushankkeen projektinhallintaan tuoden läpinäkyvää tiedonhallintaa sekä hallittavuutta projekteihin.
  • Karttunen, Jarkko (2023)
    The topic of API governance is important because of the ubiquity of cross-component interfaces in microservice systems. Tasks such as documenting interfaces manually can be a laborious and error-prone task, and the quality of said documentation can vary greatly. A large software system may also incorporate multiple protocols, programming languages, and development teams, further complicating the topic. Due to this, it is important to find ways to automate tasks such as this to ensure quality standards are met. In this thesis, we inspect the problems within the topic of API governance, and present the structure of an enterprise microservice application as a problem setting, and set out to design an automated system to handle parts of API governance. First, we set out the requirements of this system, after which we review literature and technological solutions on the subject. After these, we present two approaches for achieving the design goals, and develop a proof-of-concept implementing parts of one of the designs. While the presented designs remain abstract in some areas, they can act as starting points for future research and development.
  • Heino, Leevi (2022)
    Tässä tutkielmassa käsitellään sovellusten huoltovarmuutta: tutkimuksen kohteena oli Yleisradio Oy:n verkkouutiset, eli Uutisvahti– ja Yle–sovellukset, sekä yle.fi–verkkosivusto. Tutkimuksessa selvitettiin, onko verkkouutiset tärkeä viestintäväline viranomaisviestinnässä. Lisäksi selvitettiin, miten huoltovarmuus toteutuu Yleisradion verkkouutisissa. Tulosten perusteella verkkouutiset on tärkeä väline viranomaisviestinnässä. Lisäksi verkkouutisten huoltovarmuus on tulosten perusteella pääosin hyvällä tasolla. Suurin uhkatekijä verkkouutisten huoltovarmuudelle on riippuvuus ulkomaailman internet–yhteyksistä sekä kolmansien osapuolien pilvipalveluista.
  • Kauhanen, Janne (2022)
    Legacy software systems, which refers to old and likely outdated software applications and practices, are a reality that most software development companies have to contend with. Old practices and technologies are often at fault for slowing down development and deployment of software, as they can have compatibility, security, scalability and economic issues with their continued use, among other issues. Software modernization, reengineering and refactoring can alleviate the issues stemming from legacy systems, whether it be in the form of altering practices, updating technologies or changing platforms. There are many technologies and methods that can facilitate the modernization of a software system, including a move to using different architectures, specific newer technologies and changing the methods of working and developing the software system. These technologies and methods, and modernization in general, come with their own risks and challenges that must be considered for a successful modernization to take place; These strategic considerations are a key factor in modernization. This thesis will explore software modernization in general through literature reviews and as a case study for a specific company using data from surveys and the case company’s logs, with a look into the technologies, concepts and strategies required for a successful modernization, and what kinds of effects modernization can have on the software system being modernized, both from a user perspective as well as from a developer perspective. The end-result of this exploration reveals that modernization is a complex subject with many challenges, but that also offers benefits to the software system being modernized. These results are best used as a guideline on what issues should be concentrated on during modernization, with a mindful consideration for the limited scope of the case study represented within.
  • Koskelin, Jukka (2023)
    Infrastructure as Code (IaC) is one of the key components for shortening the software development cycle and enabling DevOps culture in software development teams. While the concept was introduced to the wider audience in the mid-2000s, alongside DevOps, the adoption of Public Cloud and declarative domain-specific IaC -languages has made it an integral part of software development. In this thesis, we describe the IaC as a concept and examine its history, tools, and the state of the current research. We examine Infrastructure Systems and Infrastructure Stacks as concepts for describing IaC, and different patterns for re-usable modules. We then introduce Microsoft Azure as a Public Cloud Provider, its Platform-as-a-Service (PaaS) -resources, and infrastructure deployment mechanics, focusing on Azure Resource Manager templates and Bicep domain-specific language. As a case example, we go through a real-life project for creating re-usable Azure Bicep modules, examine how its architecture evolved during the project and architectural decisions made in different parts of the project. We introduce Common Azure Resource Module Library as a reference architecture for modular Azure Bicep code, present an architecture based on a façade module pattern and perform an Architectural Trade-off Analysis (ATAM) to find tradeoffs, architecture sensitivity points and risks.
  • Kauvo, Sara (2022)
    Context: Factors that affect software team performance are a highly studied subject. One of the reasons for this is the subject’s meaningfulness to companies and software teams since anyone interested in improving team performance wants to know which factors affect positively on the team performance. What motivated us to do this thesis on this subject was our interest in both software teams and social sciences. Objective: This thesis’s aim was to better understand how the factors selected in our unofficial interviews will affect the software team performance and how big this affect is. These selected factors are psychological safety, team leader’s behaviour and team’s gender diversity. Method: We conducted a literature review with a keyword search. When we needed to specify the search by a factor we used factor-related words and if needed limit the subject area to computer science. All in all 23 reference papers were selected in the search. Results: Our analysis shows that all of our factors have a positive impact on the performance of the team, though how big this impact is depended on the factor. Psychological safety seems to have the biggest impact while the behaviour of team leader has a decent impact, not huge but not minuscule, lastly the gender diversity of the team has only a very small impact. Conclusions: Ultimately we have concluded that all three chosen factors have a positive effect on software team performance. Though from these three factors, psychological safety and team leader’s behaviour have the most significant impact on software team performance. So for software team leaders, it’s important to pay attention to these two factors, especially since they are even linked to each other.
  • Rantanen, Robert (2023)
    Manual creation of game content is often the most expensive and time-consuming part of game development. Procedural content generation offers an alternative solution, automatically generating game content with the help of algorithms. This can decrease the cost and effort of content creation inaddition to offering other benefits such as increasing the game’s replayability. This thesis investigates the current state of procedural content generation and how it is utilized in game development. A major part the thesis is investigating state-of-art open-source software that can be used for automatic generation of game content. We evaluate the usefulness and practicality of utilizing these tools in game development.
  • Padhy, Barunes (2023)
    Research in the field of life sciences is crucial for comprehending the underlying characteristics of an organism, which aids in the development of vaccines and medications as well as insights into how nature evolves and the future course it may take. Analyzing Phylogenetic trees and DNA sequences are typical techniques used in this research. New researchers often struggle with command-line usage and OS intricacies due to their lack of expertise. Even seasoned researchers are not immune to typos which, in the worst case, could take considerable debugging time. It is also important to note that due to the computationally intensive nature of running such algorithms, use cases often involve running these analyses on the cloud. This thesis aims to create a generalized web application (PhyloStreamer) that gives users the ability to create a UI for command-line tools which abstracts the technical nuances of utilizing OS commands. The thesis covers the need for such a tool, to establish domain-level knowledge in phylogenetics with examples of a few tools used, explains the general architecture of the tool, explains in detail the functionalities provided by the tool, and describes GUI creation. The results demonstrate a finished web application, which allows a user to easily create a GUI for a command-line tool, with the only caveat being that if a certain command-line tool is run via an interactive shell, for e.g, python. However, if there exists a way to run a command via the command line without the need for an interactive shell, PhyloStreamer should be able to create a GUI for it. Furthermore, noting the importance of running this on the cloud, the tool also covers the deployment of this tool on cloud.
  • Popova, Vera (2023)
    A dynamically evolving nature of software development (SWD) necessitates an emphasis on lifelong learning (LLL) for professionals in this field. In today’s rapidly changing technology domain LLL has transitioned from an exceptional practice to an essential norm, recognized as a fundamental skill within the industry. This thesis investigates a current state, trends, challenges, and best practices of lifelong learning in SWD workplaces. Our research draws on a review of literature spanning the past two decades, complemented by semi-structured interviews conducted with software professionals of diverse experience levels, all employed in the capital region of Finland. Additionally, this thesis contributes to an existing classification of learning methods utilized by software professionals and to a lifelong learning framework grounded in established research. Our findings underscore the importance of fostering a culture of continuous learning in software development workplaces, offering recommendations for employers to consider. Nurturing a learning mindset and personalized, employee-centered approach to learning increases learner autonomy and commitment, seamlessly integrating learning as a natural part of work and career development. Such a workplace culture enhances employee well-being and employer’s innovativeness and competitiveness, establishing lifelong learning as a mutually beneficial solution for both of the parties involved.
  • Valto, Kristian (2023)
    Microservices have been a popular architectural style to build server-side applications for quite a while. It has gained popularity for its inherent properties that countered the downsides of matured monoliths that are harder to maintain and further develop the larger the monoliths get. A monolithic application consists of a single unit. It usually is split into application tiers such as client, database, and server-side applications. The properties countering monoliths come from splitting a service into smaller services. These smaller services then form the server-side application by communicating with each other. The goal of a single microservice is to focus on "doing one thing well" and only that. Together they form a loosely coupled group of services to achieve larger business goals. However, the fact is that distributed systems are complex. With software architecture we can separate the complexity of distributed systems and business functions.