{"id":3035,"date":"2023-05-24T08:39:43","date_gmt":"2023-05-24T06:39:43","guid":{"rendered":"https:\/\/risc.web-email.at\/fachbeitrag-agile-software-entwicklung-mittels-devops-workflows\/"},"modified":"2026-03-10T14:23:55","modified_gmt":"2026-03-10T13:23:55","slug":"technical-article-agile-software-development-using-devops-workflows","status":"publish","type":"publication","link":"https:\/\/risc.web-email.at\/en\/technicalarticles\/technical-article-agile-software-development-using-devops-workflows\/","title":{"rendered":"Agile software development using DevOps workflows"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">from Florian Ha\u00dfler<\/h3>\n<div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<p><em>Developing and publishing software can be a time-consuming process. Manual testing, integration and publishing steps take a lot of time and are prone to errors. In the past, showstoppers have therefore often appeared very late in the course of a project, forcing everyone involved to take a few steps backwards. A CI\/CD DevOps workflow is one way of dealing with this problem.   <\/em><br\/><br\/><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-media-text has-media-on-the-right is-stacked-on-mobile is-vertically-aligned-center\"><div class=\"wp-block-media-text__content\">\n<p><strong>Contents<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Workflow<\/li>\n\n\n\n<li>Experience with pipelines<\/li>\n\n\n\n<li>CI &#8211; how: Continuous Integration<\/li>\n\n\n\n<li>CD &#8211; how: Continuous Delivery<\/li>\n\n\n\n<li>CD &#8211; how: Continuous Deployment<\/li>\n\n\n\n<li>CI &#8211; how: Continuous Improvement<\/li>\n\n\n\n<li>Advantages<\/li>\n\n\n\n<li>Author<\/li>\n<\/ul>\n<\/div><figure class=\"wp-block-media-text__media\"><img decoding=\"async\" width=\"1024\" height=\"838\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/AdobeStock_135142241-1024x838.jpg\" alt=\"Artificial Intelligence\" class=\"wp-image-1168 size-full\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/AdobeStock_135142241-1024x838.jpg 1024w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/AdobeStock_135142241-300x245.jpg 300w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/AdobeStock_135142241-768x628.jpg 768w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/AdobeStock_135142241-1536x1257.jpg 1536w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/AdobeStock_135142241.jpg 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\">Workflow<\/h3>\n\n\n\n<p>The workflow roughly explained: The developers select a ticket that has been recorded and specified by the customer. They start writing tests and then cast the feature into code (see <a href=\"http:\/\/ris.w4.at\/fachbeitrag-test-driven-development\" target=\"_blank\" rel=\"noreferrer noopener\">article on test-driven development<\/a>). All of this takes place away from the active code base of the application in a separate code area. Before the feature is integrated into the active code base after all acceptance criteria have been met, it is automatically put through its paces. Only once it has been tested is it published to the test system and subsequently to the production system. Why automated? Tests can be defined once in the automation pipelines and the associated requirements can therefore always be ensured without human intervention. Containerization also helps to make the tests reproducible. Publishing is also automated. A few minutes after implementation, a new feature is already visible on our customers&#8217; test system and is available for user tests. Due to automated tests, programming errors only very rarely make it through to the test system. This means that customers do not have to deal with these errors and can concentrate on the content of the features. This article goes on to describe what the abbreviations CI and CD stand for for the developers at RISC Software GmbH. The four strategies presented here greatly simplify the day-to-day work of developers and users.             <\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Experience with pipelines<\/h3>\n\n\n\n<p>There are several platforms for implementing such automation pipelines. At RISC Software GmbH, we have experience with Concourse, Jenkins and GitLab. The web development teams in particular have shown that they are best able to integrate GitLab into their workflows.  <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image aligncenter size-full is-resized is-style-rounded\"><img decoding=\"async\" sizes=\"(max-width: 247px) 100vw, 247px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CIuCD-git-flow.png\" alt=\"Workflow\" class=\"wp-image-2992\" width=\"185\" height=\"596\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CIuCD-git-flow.png 247w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CIuCD-git-flow-93x300.png 93w\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\">CI &#8211; how: Continuous Integration<\/h3>\n\n\n\n<p>One idea of continuous integration is to automatically integrate new features as quickly and as often as possible. This involves short feedback loops. They help developers to identify and resolve problems before the context is changed (i.e. the next task is started). The key question is: Can the developed feature be integrated into the existing application without having a negative impact on existing functions?   <\/p>\n\n\n\n<p>Put simply, developers enter their changes into our source code management system (SCM) and the CI pipeline starts to work. When it is finished, it notifies the developers of success or failure. <\/p>\n\n\n\n<p>Depending on the type of project, different tools are used in the integration pipeline. It is almost always started by running the test suites according to their position in the test pyramid (according to Mike Cohn). Unit tests form the basis of the test pyramid. The smallest possible behavioral units are tested. They ensure that the code works as expected. Integration tests are then used to ensure that the interaction between the various parts of the application or with external components (e.g. databases) also works. If a test fails, the test pipeline is aborted and the dev team receives a notification.      <\/p>\n\n\n\n<p>The last step in the RISC-Software-GmbH CI pipelines is almost always a static code analysis using an appropriate tool. This helps to identify vulnerabilities and inconsistencies with common development practices. The tool used in the RISC software contains many built-in rules for different programming languages. The result of the analysis is an assessment of the technical quality of the source code. As can be seen in the figure, the number of errors, vulnerabilities, test coverage, number of lines of code written and much more are also output. The developers receive an automated evaluation of their code.     <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full is-style-rounded\"><img decoding=\"async\" width=\"319\" height=\"236\" sizes=\"(max-width: 319px) 100vw, 319px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CIuCD-integration.png\" alt=\"CI\" class=\"wp-image-2994\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CIuCD-integration.png 319w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CIuCD-integration-300x222.png 300w\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-style-rounded\"><img decoding=\"async\" width=\"517\" height=\"340\" sizes=\"(max-width: 517px) 100vw, 517px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CIuCD-test-pyramid.png\" alt=\"Pyramid\" class=\"wp-image-2996\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CIuCD-test-pyramid.png 517w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CIuCD-test-pyramid-300x197.png 300w\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-style-rounded\"><img decoding=\"async\" width=\"519\" height=\"513\" sizes=\"(max-width: 519px) 100vw, 519px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-02-23-CIuCD-sonarqube.png\" alt=\"Analysis\" class=\"wp-image-2998\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-02-23-CIuCD-sonarqube.png 519w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-02-23-CIuCD-sonarqube-300x297.png 300w\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading\">CD &#8211; how: Continuous Delivery<\/h3>\n\n\n\n<p>Once the CI pipeline has been successfully completed and the report from the code analysis tool is satisfactory, the continuous delivery pipeline is activated manually. It pursues the goal of executing the release process automatically, quickly and reliably. The artifacts built in the CI pipeline are collected and published on the test system. This publishing step can be simple and simply copy source code to a server or more complex. The target system and the location of the target system are decisive for the complexity.    <\/p>\n\n\n\n<p>One advantage that is often mentioned in connection with continuous delivery is that the application can be released at any time. There is never a time when there is code in the active code base of the version management system that is not functional. If customers report a problem, the team can respond promptly and publish a new version. Another advantage is, of course, that classic releases are no longer necessary, but that feature by feature can be tested and approved directly by customers.   <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-style-rounded\"><img decoding=\"async\" width=\"673\" height=\"242\" sizes=\"(max-width: 673px) 100vw, 673px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CICD-Workflow.png\" alt=\"CD\" class=\"wp-image-3000\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CICD-Workflow.png 673w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-03-23-CICD-Workflow-300x108.png 300w\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\">CD &#8211; how: Continuous Deployment<\/h3>\n\n\n\n<p>Continuous Deployment takes the steps of Continuous Integration and Continuous Delivery one step further. Here, all changes that successfully pass through the CI pipeline are also released immediately. This process is fully automated and only a failed integration step prevents the changes from being transferred to the test system and subsequently to the production system. This works if there is a high level of trust in the developers, the continuous integration process and the continuous delivery process. Continuous deployment mainly has its place in the large-scale product development business; in the classic project business, the necessary prerequisites are often not economically viable.    <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large is-style-rounded\"><img decoding=\"async\" width=\"1024\" height=\"683\" sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock-602578049-1024x683.jpg\" alt=\"Research\" class=\"wp-image-3021\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock-602578049-1024x683.jpg 1024w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock-602578049-300x200.jpg 300w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock-602578049-768x512.jpg 768w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock-602578049-1536x1024.jpg 1536w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock-602578049.jpg 1920w\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading\">CI &#8211; how: Continuous Improvement<\/h3>\n\n\n\n<p>The image below shows the notification that some dev teams received the morning after the security vulnerability in the Java logging library Log4j became known. The security checks of the libraries used run automatically every night in order to provide the applications we develop with patches as soon as security vulnerabilities become known. They also help to regularly update the software libraries used in applications developed by RISC-Software Gmbh and thus keep them up-to-date. Improvements are implemented incrementally, evaluated and then further improved. The result is leaner workflows and therefore more time for the implementation of new features.    <\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-style-rounded\"><img decoding=\"async\" width=\"1024\" height=\"170\" sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-02-23-CIuCD-trivy-1024x170.png\" alt=\"CI\" class=\"wp-image-3002\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-02-23-CIuCD-trivy-1024x170.png 1024w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-02-23-CIuCD-trivy-300x50.png 300w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-02-23-CIuCD-trivy-768x127.png 768w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/2022-02-23-CIuCD-trivy.png 1139w\" \/><\/figure>\n\n\n\n<p>Through continuous integration, delivery, deployment and improvement, RISC Software GmbH has gained the ability to publish frequent releases without compromising on quality.<\/p>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading\">The advantages of our DevOps workflow for customers:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Minimized risk of errors (and errors can be corrected more quickly)<\/li>\n\n\n\n<li>Shorter response times (customer feedback can be incorporated more quickly)<\/li>\n\n\n\n<li>Lower costs for manual tests (more features for the same amount of money)<\/li>\n\n\n\n<li>Progress in the development process is visible<\/li>\n\n\n\n<li>Security gaps are quickly identified and eliminated<\/li>\n\n\n\n<li>Components, frameworks and libraries are updated more efficiently<\/li>\n<\/ul>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading\">Info<\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_e5801cebe5f53a4bbeeccd53f6534c26\">\n    <h3 class=\" inline-block \">\n        Artefakte    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_e5801cebe5f53a4bbeeccd53f6534c26\" class=\"collapse\" aria-labelledby=\"headingblock_e5801cebe5f53a4bbeeccd53f6534c26\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>Artefakte sind die Dateien, die durch den Buildprozess erstellt wurden, z.B. Docker-Images, ZIP-Files, Protokolle.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_7b4bf036645a5c11db963b34f6ddfbc1\">\n    <h3 class=\" inline-block \">\n        Akzeptanzkriterien    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_7b4bf036645a5c11db963b34f6ddfbc1\" class=\"collapse\" aria-labelledby=\"headingblock_7b4bf036645a5c11db963b34f6ddfbc1\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>Akzeptanzkriterien beschreiben, unter welchen Bedingungen eine vom Entwicklungsteam umgesetzte Anforderung als fertig entwickelt gelten soll.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_7e62625783b3b93103ba860ac05e230d\">\n    <h3 class=\" inline-block \">\n        Feature    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_7e62625783b3b93103ba860ac05e230d\" class=\"collapse\" aria-labelledby=\"headingblock_7e62625783b3b93103ba860ac05e230d\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>Ein Feature ist eine bestimmte Funktion in einer Applikation (z.B: Benutzerverwaltung, Login,..)<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_17e5e2550a30f40a8acd30e68675636c\">\n    <h3 class=\" inline-block \">\n        Pipeline    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_17e5e2550a30f40a8acd30e68675636c\" class=\"collapse\" aria-labelledby=\"headingblock_17e5e2550a30f40a8acd30e68675636c\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>Eine Pipeline in der Softwareentwicklung steht f\u00fcr die Summe alle Aktivit\u00e4ten, die von der Idee bis hin zum Betrieb dieser Idee f\u00fchren.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_64da4305b436c325db2c2df685f60da2\">\n    <h3 class=\" inline-block \">\n        Source-Code-Management-System    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_64da4305b436c325db2c2df685f60da2\" class=\"collapse\" aria-labelledby=\"headingblock_64da4305b436c325db2c2df685f60da2\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>Source-Code-Management-System (SCM) ist ein System, das zur Erfassung von \u00c4nderungen am Programmcode dient. Die aktuell verwendete Version wird im Hauptzweig abgebildet. Entwickelnde haben die M\u00f6glichkeit, Zweige (wie bei einem Baum) f\u00fcr Features zu erstellen.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_e2ab537c711a9f6f060c692c7bf3cdc8\">\n    <h3 class=\" inline-block \">\n        Testsystem    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_e2ab537c711a9f6f060c692c7bf3cdc8\" class=\"collapse\" aria-labelledby=\"headingblock_e2ab537c711a9f6f060c692c7bf3cdc8\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>Ein Testsystem ist eine Version nur f\u00fcr die Auftraggeber*innen.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_ea640c0d1ae2e79f724ce93f52d2d6bd\">\n    <h3 class=\" inline-block \">\n        Ticket    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_ea640c0d1ae2e79f724ce93f52d2d6bd\" class=\"collapse\" aria-labelledby=\"headingblock_ea640c0d1ae2e79f724ce93f52d2d6bd\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>Aufgaben unserer Entwickelnden werden in einem Ticket-System abgebildet, \u00e4hnlich wie Kund*innenanfragen bei gr\u00f6\u00dferen Konzernen.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_073f713ea47fff6ebd9cee5e7f3448eb\">\n    <h3 class=\" inline-block \">\n        Workflow    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_073f713ea47fff6ebd9cee5e7f3448eb\" class=\"collapse\" aria-labelledby=\"headingblock_073f713ea47fff6ebd9cee5e7f3448eb\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>Ein Workflow ist ein Arbeitsablauf, der die zeitliche Reihenfolge von zusammengeh\u00f6renden Arbeitsvorg\u00e4ngen bezeichnet.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\">Contact us<\/h3>\n\n\n\n<div class=\"wp-block-contact-form-7-contact-form-selector\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f663-o1\" lang=\"en-US\" dir=\"ltr\" data-wpcf7-id=\"663\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/en\/wp-json\/wp\/v2\/publication\/3035#wpcf7-f663-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"663\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f663-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<\/fieldset>\n<div class=\"form-row\">\n\t<div class=\"form-input\">\n\t\t<p><label class=\"sr-only\" for=\"your-name\">Your name <\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" id=\"your-name\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Name\" value=\"\" type=\"text\" name=\"your-name\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"form-input\">\n\t\t<p><label class=\"sr-only\" for=\"your-email\">Your email<\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" id=\"your-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"E-Mail\" value=\"\" type=\"email\" name=\"your-email\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div>\n<div class=\"form-row\">\n\t<div class=\"form-input\">\n\t\t<p><label class=\"sr-only\" for=\"your-company\">Company <\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-company\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"your-company\" aria-invalid=\"false\" placeholder=\"Unternehmen\" value=\"\" type=\"text\" name=\"your-company\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"form-input\">\n\t\t<p><label class=\"sr-only\" for=\"your-position\">Position<\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-position\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" aria-invalid=\"false\" placeholder=\"Position\" value=\"\" type=\"text\" name=\"your-position\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div>\n<div class=\"form-row\">\n\t<div class=\"form-input\">\n\t\t<p><label class=\"sr-only\" for=\"your-subject\"> Subject <\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-subject\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" id=\"your-subject\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Thema\" value=\"\" type=\"text\" name=\"your-subject\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div>\n<p><span id=\"wpcf7-69de5d46f30fb-wrapper\" class=\"wpcf7-form-control-wrap phone-95-wrap\" style=\"display:none !important; visibility:hidden !important;\"><label for=\"wpcf7-69de5d46f30fb-field\" class=\"hp-message\">Please leave this field empty.<\/label><input id=\"wpcf7-69de5d46f30fb-field\"  class=\"wpcf7-form-control wpcf7-text\" type=\"text\" name=\"phone-95\" value=\"\" size=\"40\" tabindex=\"-1\" autocomplete=\"new-password\" \/><\/span><br \/>\n<label class=\"sr-only\" for=\"your-message\"> Your message (optional)<\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-message\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea\" id=\"your-message\" aria-invalid=\"false\" placeholder=\"Ihre Nachricht an uns\" name=\"your-message\"><\/textarea><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"hcap-cf7\">\t\t<input\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tclass=\"hcaptcha-widget-id\"\n\t\t\t\tname=\"hcaptcha-widget-id\"\n\t\t\t\tvalue=\"eyJzb3VyY2UiOlsiY29udGFjdC1mb3JtLTdcL3dwLWNvbnRhY3QtZm9ybS03LnBocCJdLCJmb3JtX2lkIjo0MzZ9-c5ba05e011699d70dda36bf3838d9e02\">\n\t\t\t\t<span id=\"hcap_cf7-69de5d46f361e8.60208295\" class=\"wpcf7-form-control h-captcha \"\n\t\t\tdata-sitekey=\"3a6a81c1-2b2e-4b2a-b1eb-d9446bc09afb\"\n\t\t\tdata-theme=\"light\"\n\t\t\tdata-size=\"normal\"\n\t\t\tdata-auto=\"false\"\n\t\t\tdata-ajax=\"false\"\n\t\t\tdata-force=\"false\">\n\t\t<\/span>\n\t\t<input type=\"hidden\" id=\"_wpnonce\" name=\"_wpnonce\" value=\"c96e028190\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/en\/wp-json\/wp\/v2\/publication\/3035\" \/><\/span><input class=\"wpcf7-form-control wpcf7-submit has-spinner btn\" type=\"submit\" value=\"Senden\" \/>\n<\/p><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<h3 class=\"wp-block-heading\">Author<\/h3>\n\n\n<div class=\"contact-person\">\n      <picture>\n      \n      \n      \n      \n      <img decoding=\"async\" data-aos=\"fade-zoom-in\"\n           data-aos-offset=\"0\" class=\"w-full\" width=\"212\" height=\"293\"\n           src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/fhassler1-removebg-preview.png\"\n           alt=\"\">\n    <\/picture>\n    \n\n<h5 class=\"wp-block-heading\">Florian Ha\u00dfler<\/h5>\n\n\n\n<p>Software Engineer<\/p>\n\n  <\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\"><div class=\"posts-slider-block\" data-aos=\"fade-up\" data-aos-offset=\"0\" data-aos-anchor-placement=\"top-bottom\">\n        <section class=\"splide posts-slider\" aria-label=\"Gallery Slides\">\n            <div class=\"splide__arrows\">\n                <button class=\"splide__arrow splide__arrow--prev\">\n                    <span class=\"sr-only\">Previous<\/span>\n                    <img decoding=\"async\" loading=\"lazy\" width=\"25\" height=\"21\" src=\"https:\/\/risc.web-email.at\/app\/themes\/risc-theme\/public\/images\/icon-arrow.35d2ec.svg\"\n                         alt=\"Previous\">\n                <\/button>\n                <button class=\"splide__arrow splide__arrow--next\">\n                    <span class=\"sr-only\">Next<\/span>\n                    <img decoding=\"async\" loading=\"lazy\" width=\"25\" height=\"21\" src=\"https:\/\/risc.web-email.at\/app\/themes\/risc-theme\/public\/images\/icon-arrow.35d2ec.svg\"\n                         alt=\"Next\">\n                <\/button>\n            <\/div>\n            <div class=\"inner\">\n                <div class=\"splide__track\">\n                    <div class=\"splide__list\">\n\n                                                    <a href=\"https:\/\/risc.web-email.at\/en\/technicalarticles\/technical-article-agile-vs-classic-software\/\" class=\"splide__slide blog-post-teaser mb-1 lg:mb-3\">\n                                <div class=\"blog-image\">\n                                                                                                                                <picture>\n                                                                                        <img decoding=\"async\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/Agile-Softwareentwicklung_C_iStock-360x214.jpg\"\n                                                 alt=\"Agile vs. classic software development\">\n                                        <\/picture>\n                                                                    <\/div>\n                                <div class=\"blog-content px-2 py-3 xl:px-4 xl:py-5\">\n                                    <h3>Agile vs. classic software development<\/h3>\n                                    <div class=\"blog-post-excerpt mt-2\">\n                                        Classic approaches such as waterfall, V-model or spiral model or agile approaches such as Scrum or Kanban? At the beginning of a project, the question arises as to which of the existing process models is best suited for the current project.\n                                    <\/div>\n                                    <span class=\"inline-block mt-2 more\">mehr erfahren <span class=\"ml-1 icon-more\"><\/span><\/span>\n\n                                <\/div>\n                            <\/a>\n                                                    <a href=\"https:\/\/risc.web-email.at\/en\/technicalarticles\/technical-article-test-driven-development\/\" class=\"splide__slide blog-post-teaser mb-1 lg:mb-3\">\n                                <div class=\"blog-image\">\n                                                                                                                                <picture>\n                                                                                        <img decoding=\"async\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-494345930-360x214.jpg\"\n                                                 alt=\"Agile &amp; Test-Driven: Focus on the customer\">\n                                        <\/picture>\n                                                                    <\/div>\n                                <div class=\"blog-content px-2 py-3 xl:px-4 xl:py-5\">\n                                    <h3>Agile &#038; Test-Driven: Focus on the customer<\/h3>\n                                    <div class=\"blog-post-excerpt mt-2\">\n                                        With the use of Test-Driven-Development, the concept of agile methods is also transferred to technical development.\n                                    <\/div>\n                                    <span class=\"inline-block mt-2 more\">mehr erfahren <span class=\"ml-1 icon-more\"><\/span><\/span>\n\n                                <\/div>\n                            <\/a>\n                                            <\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n    <\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Continuous integration, delivery, deployment and improvement make it possible to publish frequent releases without compromising on quality.<\/p>\n","protected":false},"featured_media":3022,"template":"","publication-category":[49],"class_list":["post-3035","publication","type-publication","status-publish","has-post-thumbnail","hentry","publication-category-software-development"],"acf":[],"portrait_thumb_url":"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock-602578049-360x214.jpg","_links":{"self":[{"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication\/3035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication"}],"about":[{"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/types\/publication"}],"version-history":[{"count":17,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication\/3035\/revisions"}],"predecessor-version":[{"id":36136,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication\/3035\/revisions\/36136"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/media\/3022"}],"wp:attachment":[{"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/media?parent=3035"}],"wp:term":[{"taxonomy":"publication-category","embeddable":true,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication-category?post=3035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}