DevOps is all about bringing together your Development and Operations team to build, test, deploy and maintain software in an efficient and effective way.
A DevOps methodology employs agile principles whereby code is released as it is ready, rather than waiting for the entire application to be built and then released. This approach recognises that software is always being enhanced, with additional functionalities added. As a result, the notion that an application is ever fully complete is redundant.
Instead, it’s preferable to deploy whatever code is ready into your production environment as soon as possible as this approach will help your organisation achieve a competitive edge.
There is a range of DevOps approaches and tools that can be used to help you implement agile software development methodologies which we will explore below.
Previous posts in this DevOps series: |
With multiple developers working continuously on your software, there is a risk that things can get out of control. So, it’s important to set boundaries.
You could be using a combination of custom-written and open-source code. Even the open-source code you use could require modifications to meet your specific software requirements.
In all cases, your code is likely to undergo multiple iterations before it’s ready for initial deployment.
That’s why it’s essential to maintain effective controls over your code.
With the right controls in place, you can achieve effective visibility over all iterations of the code to ensure your development team are always working on and deploying the appropriate version.
With a git repository tool, you will achieve the control you require over all the source code that underpins your software.
Git repositories track all the updates made to source-code files by your DevOps team. This way, you will have a clear record of all changes, allowing you to revert back to specific versions if needed. They also make collaboration easier as all changes made by any member of the team can be accessed by all other members of the team.
A code repository allows your DevOps team members to work on the same project wherever they are located, without having to rely on local storage for the project. |
Repositories allow for greater collaboration between numerous developers on a software project. |
It allows you to compare different versions of code side-by-side, so you can identify which code is the latest version and has fewer vulnerabilities. |
In the event that errors are made in the code, a repository allows you to revert to previous versions. |
There are two main types of code repository platforms - centralised version control systems (VCS) and distributed version control systems (DVCS). |
At the heart of agile DevOps methodology sits the idea that software needs to be continuously developed, integrated into your project and delivered. This methodology allows your DevOps team to deploy robust software more rapidly than waterfall methodologies that seek to complete the entire project before release.
Continuous Integration (CI) and Continuous Delivery (CD) pipelines are both integral to an agile DevOps methodology.
CI involves integrating all coding works of a software development project on a continuous basis, usually to a central repository. Pieces of code may have been developed by different scrums, or sub-teams, within your DevOps team. Through the use of automation tools and processes, CI can deliver new application functionality or enhancements at a far greater speed compared to traditional software development methodologies.
CD is an extension of CI which automates the release of new applications or software upgrades. When automatically released to the production environment, after initial testing, the software undergoes further in-depth testing before final public release.
In a competitive business landscape, CI/CD automated processes can help you develop and release new applications, as well as upgrades, more efficiently, giving you a competitive edge through innovation.
CI/CD helps DevOps teams deliver higher quality software, faster, for improved software deployment. |
With CI/CD automation, you can increase the speed of innovation and it allows you to compete more effectively in the marketplace. |
One of the key benefits of CI/CD automation is that it allows you to release your code sooner than traditional waterfall development methodologies. This means your code can be earning you revenue rather than sitting in a queue waiting to be deployed. Code can be released faster because CI/CD includes automated testing, rather than manual testing. |
CI/CD automation allows your development team to focus on more interesting and challenging tasks, helping you to retain talent in a competitive labour market. |
Teamwork is a fundamental part of DevOps.
However, without the right suite of tools, integrating your development and operations teams will be a challenge. In many cases, developers and operations staff will be used to using separate types of programs. So, it’s likely they have different work methodologies and practices too.
Having the right tools is essential to ensure agile DevOps teams can collaborate and function effectively.
One essential tool for any agile team is a Kanban board. These allow you to manage your project, as well as any tasks and sub-tasks. It allows you to link work items and tasks with your pipelines, giving all members of your team complete visibility over deliverables.
This is particularly important when you establish scrums, or sub-teams, that are responsible for working on individual components or functionality.
Agile tools should facilitate collaboration and communication within your DevOps team. |
With the right tool, you’ll be able to keep track of progress and ensure accountability. It should be possible to look at the history of discussions, actions, and deliverables. It should also have a reporting function on each stage of the project lifecycle, as well as the project as a whole. |
For large software development projects, being able to search within your tool will make it much easier to find what you need. |
Scalability is another important consideration when selecting a tool. Software may expand over time to include additional functionality. As new team members join the project, a scalable tool will ensure you can always keep track of the project over the long term. |
Analytics are essential to any project. They allow you to view the project in real-time and evaluate progress. The right tool will allow you to determine how long tasks take to complete and whether deliverables are being met. |
When developing a web application, many of the most common tasks can be deployed using pre-built building blocks.
Using building blocks this way can automate much of your software development pipeline, leading to greater efficiencies and faster deployments. Put simply, a task is a piece of code or script that has a defined set of associated demands that determine how the task should run.
You should consider using pre-built tasks where possible to ensure you optimise the build and deployment of your applications. However, when required, you may also need to create your own custom tasks to enable the specific functionality that your application requires.
A pre-built building block is a packaged piece of code that is available for use and carries out a particular function within the software. |
Many pre-built building blocks have been used widely, and thus have well-defined uses, interfaces and specifications. |
Multiple pre-built building blocks can be used within the software as they help expedite the development, rather than every piece of functionality being developed from scratch. |
Building blocks can be classified into either Architecture Building Blocks (ABB) or Solution Building Blocks (SBB). |
Using a hosted agent allows you to automatically run jobs, so you can test the code of your projects and make it available to others within your DevOps team.
For example, Azure Pipelines allows you to conveniently run jobs using a Microsoft-hosted agent either directly on a virtual machine or in a container. You can organise your pipeline into jobs, with each job being a series of steps that run sequentially as a unit.
Using hosted agents in this way frees you from many of the maintenance and upgrade requirements that come with running your own agent.
Many teams will find this the simplest way to run jobs as it allows you to rapidly test if code works as intended.
When opting to use a Microsoft-hosted agent, you don’t have to worry about maintenance and upgrades. These are all taken care of by Microsoft. The jobs run on either a virtual machine or container. Every time you run a job in your pipeline, you will use a fresh virtual machine which is discarded after each use. |
From a security perspective, hosted agents offer a number of security advantages. If you run code in your pipeline, it may have security vulnerabilities. It could be safer to run the pipeline on a Microsoft-hosted agent, as opposed to a self-hosted agent that resides in your corporate network. |
For many DevOps teams, using a hosted agent is the simplest way to run jobs. It allows you to easily test the build and see how it works. |
By contrast, a self-hosted agent does give you more control to include dependent software needed for your project. Machine-level caches and configurations will persist for each run, unlike a hosted virtual machine which is discarded after each run. Self-hosting also allows you to run incremental builds. |
As discussed previously, DevOps teams use a wide range of different tools.
These tools are used to track the development pipeline, run jobs, manage code and more. The challenge when using so many different tools is that they are not integrated, making it difficult to keep track of the project.
With so much data from so many tools, it’s essential to find a way to aggregate it into a single dashboard that provides you with the holistic visibility you require. This will allow you to identify potential problems in any of the tasks, whether they are at the stage of being coded, reviewed, tested, prepared for deployment or already released.
A custom dashboard will help you detect problems, bottlenecks and improve delivery processes.
Dashboards provide enhanced visibility and ensure that information from all the various scrums or teams working on your software is available whenever required. |
Dashboards help save time because you can see exactly where your project is at without having to access multiple systems. A well-designed dashboard should be easy to interpret and clear to understand. |
Keep track of your project’s Key Performance Indicators (KPIs) with a dashboard that includes all the essential data from multiple sources. A good dashboard will allow you to rapidly identify areas that require additional resources to keep your project on track. |
Any complex application requires project leaders to make decisions on a regular basis throughout the development pipeline. Dashboards help you make informed decisions quickly, so your project can progress efficiently. |
A dashboard gives you a single interface for connecting to, interacting with, evaluating and visualising data from a range of sources. |
Wikis are invaluable tools that help your teams keep track of all the documentation associated with a particular application project.
Some DevOps platforms, such as Azure, have built-in wiki templates.
Developing a wiki is an essential task that ensures all current and future members of your DevOps team, will be able to understand all aspects of the development and how it functions.
By clearly documenting the entire project in a single location, and ensuring that documentation is clearly structured, it will ensure any individual working on the project has easy access to all the information they require.
In the past, projects may have been documented using Word files which may have been saved across multiple locations. However, all too often, keeping track of documents was a challenge and many individuals working in the DevOps team would waste time searching for them.
A built-in wiki gives you greater control over the project, allowing you to document and store files, keep track of changes, all within a single web-based platform.
A wiki allows you to efficiently gather documentation and information about your software project in one central location. |
It helps collaboration among members of your DevOps team, each of whom can add to the wiki as necessary. |
Where several individuals are working on the same piece of code, a wiki can help with version control. |
Wikis have a flexible structure, so they can be adapted to suit your project requirements. |
Be aware that when multiple team members have access to edit the documents in the wiki, there is a risk that out-dated or inaccurate information may be added to it. So, it is important to have clear controls over how documents and information are added to it. |
When beginning your DevOps journey, taking into consideration these approaches and tools will help ensure a successful outcome.
You will be able to effectively integrate your development and operations teams to facilitate strong levels of communication and collaboration. The result will be a more effective and efficient software development pipeline that benefits both your customers and your organisation.