Abstract
There is an increase in the development of generic software systems built to serve multiple organizations and used for different purposes. DHIS2, a generic web-based health management information system platform, is an example of such systems and the focus of my thesis. The extensible core of DHIS2 allows the development of complimentary web applications by outside parties as a way of contributing to the DHIS2 platform. The challenge here is that developing these web applications from scratch can be time-consuming and resource-inefficient when similar applications are developed. One way of addressing this challenge is by using the component-based software engineering (CBSE) approach. The main idea behind CBSE is the development of applications by reusing configurable software components. However, previous research identified several challenges that pertain to component reuse, including cataloging and distribution of reusable software components, their trustworthiness, and discoverability. My Master's project's practical aim was to design, develop, and evaluate a component repository, DHIS2 Shared Component Platform, that facilitates component reuse within the DHIS2 platform ecosystem. This project involved close collaboration with developers in HISP East Africa and the DHIS2 core team at the University of Oslo. The component repository consists of a website (built using React) that aggregates reusable components and two other modules that support the process of component certification: a command-line interface (built using TypeScript) to provide functionality for pre-certification, and a GitHub repository with an automated certification workflow using GitHub Actions workflow. This study used the Design Science Research (DSR) methodology within a pragmatic research paradigm to contribute to the body of knowledge by developing a set of theoretically and empirically grounded design principles. These principles contribute to the body of knowledge on how component repositories can be designed and developed in a context of a software platform ecosystem. The established set of design principles addresses software reuse challenges identified through empirical data analysis and challenges discussed in the literature on CBSE. These principles address component trustworthiness, component discoverability, the role of a certifier, component repository adoption, its complexity, and maintainability.