Here’s the big challenge for companies wanting to excel at software delivery: how can you foster fast development and rollouts of software tools, while supporting new deployment platforms, such as hybrid cloud environments? There’s a lot to juggle, and it won’t be easy. DevOps can help.
DevOps isn’t so much a product or toolset, as a discipline. It’s designed to break down barriers, bringing together two sets of people with traditionally opposing agendas: the development team, and the operations team.
Developers are driven by challenges like software performance, feature sets, and bug counts. They value flexibility, because they want to give their users software that evolves to fit their needs. They need to ship new features quickly in response to user demand, and they need to fix bugs that impact software function and performance.
For these developers, the cycle of work is speeding up. SaaS applications have raised their users’ expectations. They expect frequent updates on the fly, rather than sporadic point releases every few months.
On the other side of the equation, operations teams are driven by availability and performance. Their priority is keeping the engines running. Uptime is the metric of choice, and anything that interferes with that – such as regular product rollouts, for example – are a threat. No wonder that these two teams often end up butting heads.
These traditional devs and ops silos can also make for an uncompetitive business. Their employers want to significantly decrease the time, effort and expense to deploy an application – which is where DevOps comes in.
DevOps (development + operations) is a working practice that tries to bring both of these teams together. It breaks down traditional barriers between the three phases of the software application lifecycle: development, testing, and production.
It does that with tools that automate these three phases, and the transitions between them. Tasks such as source code management, regression testing, and configuration management are scripted to standardise ways of working and reduce errors. Operations staff can automate software performance monitoring in production, so that both operations and development teams can be alerted instantly for a quick fix. Automation also greatly eases the burden of compliance, security and auditing.
Agile DevOps in the Cloud
DevOps goes hand-in-hand with agile development practices that minimise the time between different feature releases and software iterations. Agile development encourages developers to test assumptions and make mistakes, and typically involve customers more intimately in the process. Agile development is a key driver for DevOps, because these automated processes help to support shorter software cycles –in other words, to accelerate time to market and make significant return on investment (ROI) gains.
Cloud computing, agile software development and DevOps are a holy trinity
If DevOps supports agile, then cloud technology supports DevOps. Cloud computing supports this working model in two significant ways. Firstly, it offers flexibility in the form of elastic resources. IT staff can spin up new virtual machines quickly, and provision more storage. Secondly, standardisation and transparent access to resources via APIs promised to break down the walls between different applications and back-end services.
Cloud computing, agile software development and DevOps are a holy trinity, then, for organisations that want to create a more joined up approach to application development and deployment. DevOps can deliver particular benefits for companies considering hybrid cloud adoption.
For many companies, hybrid cloud models offer the best of both worlds. They may be unwilling to unload commercially sensitive or mission-critical applications and data to public cloud infrastructures, choosing instead to run them locally. They may have legacy hardware and software that they can’t afford to abandon for technical or economic reasons.
They may still be interested in public cloud computing, though, because of the flexibility it offers in resources and software innovation. Platform as a service (PaaS) models often operate in a public cloud environment, and offer development teams the chance to try new application development frameworks that can cut their time to market.
Hybrid cloud environments support the distribution of applications and data where it makes sense in a production environment, and they can also prove useful in a development and testing environment.
For example, developers can keep key development assets in house when necessary, while bringing in public cloud resources at critical points like stress testing, providing some cheap muscle power. They can also test out PaaS developments in a public cloud, bringing them in-house when those applications have been proven and become more crucial to the business.
Centralising your development assets
How can you build DevOps capabilities within a hybrid cloud environment? One of the first steps is to centralise your development assets. Few companies will be implementing greenfield development, testing, and production facilities, but will be modernising existing ones. Pulling together development assets onto a single DevOps-capable platform will make the whole thing more manageable.
In recent years, several specialist software vendors have emerged such as Chef, Puppet Labs, Docker and Ansible jockeying for position with the DevOps tools stack.
Meanwhile, some of the big enterprise vendors are building their own end-to-end solutions.
IBM, for example, offers Urbancode Deploy, a platform for managing the deployment of applications across different infrastructure platforms. In a July 2015 market guide report, Gartner rated IBM as leading in automation, environment modelling and release coordination. The company also cites a Forrester April 2015 report on application release automation that found organisations using UrbanCode achieved a whopping 97 per cent reduction in the cost of releases, reduced risk of failed deployments; 15 per cent improvement in developer productivity, enabling faster time-to-market; and 75 per cent faster deployment time.
UrbanCode Deploy can provision applications to off-premise public cloud environments, and to on-premise cloud infrastructures, in unison.
UrbanCode Deploy with Patterns takes this one step further, providing application deployment blueprints to map applications and configurations to different physical or cloud environments . The process is automated, repeatable, efficient, says IBM, and this becomes particularly important in a hybrid cloud environment where multiple providers are used
The Patterns product supports templates from the OpenStack project to help define these standard mappings. OpenStack Heat templates describe the infrastructure for cloud applications in a text file that is both human and machine-readable. Heat is becoming a de facto standard for hybrid cloud deployment templates, and in turn supports Amazon Web Services’ CloudFormation template format.
UrbanCode also supports application provisioning to legacy stacks, including IBM’s own System Z. Supporting legacy infrastructure and applications solves one of the primary problems facing DevOps teams in a hybrid environment.
At the other end of the spectrum, developers can fold support for native cloud application build and deployment into the process. UrbanCode Deploy integrates with IBM Bluemix, a service that provides application build and deployment services based purely on a PaaS model.
Bluemix draws on a catalogue of cloud-based services that developers can use to bolt applications together. Already available in multi-tenant and dedicated single-tenant off-premise environments via connection to IBM DevOp Services, Bluemix is becoming available for on-premise deployment, as well.
Bake your processes
Using a single set of tools that manages the deployment process is important for DevOps. With everyone on the same page, there are no silos in the development, testing, or production process. Without a single platform to build on, it is difficult to get the real cohesion needed for the DevOps process.
Once you have that cohesion, though, it becomes possible to codify the development, testing, and production processes. Having a single playbook is critical if DevOps is to work. Even if development processes vary based on the underlying development or production platform, you can at least standardise them on a per-platform basis.
For example, using UrbanCode Deploy’s patterns-based approach lets you define standard processes for deployment on your in-house legacy platform and a dedicated private cloud off-premise.
Deployment is just one component of a DevOps solution, though. Support for the build phase is critical. Develop and teams can also connect the deployment platform with tools like IBM Rational Team Concert, the collaborative development platform based on Bluemix, to fold the build and test phase into the process.
Ultimately, the goal for any DevOps effort is for continuous delivery, where applications are not just unit tested offline, but where performance and reliability data can be gathered from the production phase and fed straight back to the development team. Done correctly, this can create a form of continual improvement for your application lifecycle.
All of this requires the development and operations teams to talk to each other, of course. That kind of integration can take more than software engineering to get right. Maybe a team-building trip to the pub? Pints-as-a-service breaks down all kinds of barriers. ®