# From DevOps to MLOps: Overview and Application to Electricity Market Forecasting
## 3 An Overview of DevOps and MLOps
### DevOps
#### 3.1.1 DevOps Workflow and Components
It is essential to implement good practices within the source control, such as pull requests, proper branching, and commit messages [87; 88; 89]. Several authors [90; 91] have shown that artifact traceability can be achieved if performed adequately with good practices. A branching strategy is used to share and collaborate the code changes among development teams. Feature-branching-based versioning and trunk-based versioning are the two most widely used branching strategies. Some versioning tools include Git, Subversion (SVN), and Team Foundation Server (TFS). Figure 3 shows a feature branching strategy with different types of branches [92; 93], while Figure 4 shows typical trunk-based versioning [94; 95]. Build  
The software build usually refers to the whole software package, consisting of the business logic, the software dependencies, and the environment [96]. A few authors refer to the build phase as the verify phase [81]. In either case, the main aim of DevOps build systems is to evaluate the correctness of software artifacts [81; 97]. Typically, three standard deployment instances are used while developing an application--development, Quality Assurance (QA), and production instances [98; 99]. The build systems in DevOps make sure that code integrity is maintained. Software build systems are highly dependent on software configuration management systems, and multiple builds are possible among these environments [97; 100], including private system builds. Several authors, including [PERSON] et al. [101], mention various build tools for DevOps. Figure 2: Typical DevOps workflow adapted from [66; 79]. Test  
In the test phase of DevOps, automated testing is performed continuously to ensure the quality of the software artifact [84; 102]. There are different ways to include test cases such as units and integration while the software is being written. One such method is to use Test-Driven Development (TDD) [103]. In this case, the developer writes the test cases first, and then the actual functionality. There is another approach called Behavior-Driven Development (BDD), which is an extension of TDD [104]. Some good practices, such as code coverage [105], are part of the DevOps pipeline, and some cloud DevOps services, such as Azure DevOps [106], provide this within the service. Figure 4: Typical trunk-based versioning adapted from [94; 95]. Figure 3: Feature branching strategy adapted from [92; 93]. Release  
Once all test cases are passed, the software is ready for deployment. By this phase, a code change has already passed a series of manual and automated tests [107]. Regular feature releases can be carried out according to a regular schedule or once milestones are met. A manual approval process could be added at the release stage, allowing only a few people within an organization to authorize a release for production [74; 78]. Deploy  
In the deployment stage, the focus is on continuously deploying or redeploying the software. The deployment varies depending on the type and nature of the application. The deployment process can be automated easily for the production environment, using virtualization or containerization as the orchestration technology. Jenkins is one of the most widely used deployment tools in the industry [53; 87]. Operate  
The operate phase involves maintaining and troubleshooting applications in a production environment. Teams ensure system reliability and high availability. They aim for zero downtime while reinforcing security [108]. Selecting the proper hardware size for scaling or implementing the scaling methods on the cloud is crucial for the application's uptime and ability to handle high loads [109; 110]. This configuration is performed in the operate phase. Monitor  
After the application is deployed and configured to handle the ever-changing load, it is essential to monitor the application to ensure that it is stable enough to handle the promised uptime [111]. The monitor phase helps perform operations such as application health tracking and incident management.