As today’s technology evolves faster, businesses have needed to respond by becoming more streamlined and flexible in their operations and workflow allowing for an environment of constant innovation through increased collaboration.
The goal is to get a better end result faster.
The traditional waterfall method of application development is to shut the door, work independently, and hope it all works out in the end approach.
The waterfall method makes the assumption that all requirements can be gathered up front during the requirements phase where the project manager gleans all they can from the customer and then the project flows “downhill.” Like a waterfall.
At the end, during the “maintenance phase,” the customer is given the developed application and that’s when any problems are found and changes are made.
Unfortunately, it is not usual for the client to be able to perfectly state or even know their requirements at the abstract level that occurs at the beginning of a project, and it’s only after seeing some progress that they fully realize what they want. If they are only allowed input at the end of the project, at that point it is more difficult and expensive to re-engineer the application.
The swiftly changing marketplace caused developers to rethink this model as last minute improvements or corrections were slowing time to market. Out of this frustration emerged the agile approach.
In an agile approach to development, large and complicated projects are broken into smaller projects of two to six weeks called “sprints” with the goal of increasing speed, being more flexible as good ideas emerge, and being more responsive to client feedback.
This allows companies to build and innovate, refine and improve while simultaneously being responsive to market trends.
Within the sprint cycle, the team meets daily to coordinate and discuss any roadblocks which are addressed immediately. A central board tracks all progress so that the whole team can see the big picture forming. It’s a collaborative process where team members are prepared to assist others as necessary and not just stay head-down focused on their own piece of the puzzle.
By the end of the project, the customer has seen the product in its various stages and has been given an opportunity to offer feedback. Any issues that came up were addressed along the way before handing the product off to the customer.
Throughout the agile process, good development teams will practice continuous integration (CI) and continuous delivery (CD).
Continuous integration (CI) is generally used alongside an agile software development workflow. The final product will be broken down into a list of tasks that are distributed among the software developers. Using CI enables these software development tasks to be developed independently without loss of cohesion because once a task is completed, a developer will introduce that new work to the CI system to be integrated with the rest of the project. It then automatically tests the application to ensure that the new work, when integrated, is not breaking the application.
The technical goal of CI is to establish a consistent and automated way to build, package, and test applications.
Continuous delivery (CD) builds off of continuous integration as it automatically deploys all code changes to a testing and/or production environment after the build stage.
With CD, the team can release the product in whatever timeframe suits the requirements.
The team can keep the software deployable while working on new features.
It can quickly communicate feedback on the production readiness of the applications each time someone makes a change to them.
Then they can perform “push-button” deployments of any version of the software to any environment on demand.
DevOps combines software development (Dev) and IT operations (Ops). Its goal is to shorten the systems development lifecycle and provide continuous delivery with high-quality software. Speed is king. In order to do this, the traditional walls that existed between development teams and operations teams are removed and a constant collaboration of these two teams is attempted.
The development and operations teams work together across the entire software application lifecycle, from development and test through deployment to operations.
The results are fewer issues because they are handled along the way and the speed of delivery is increased both because of fewer issues and because of the communication along the way that improved the product by gaining all perspectives.
DevOps has its roots in the agile software development methodology, but you don’t have to adopt agile to do DevOps.
But these methods of agile, continuous integration, continuous delivery, and DevOps all are rooted in the same philosophy and work well together. The goal, in the end, is to create better products, faster, with a quicker time to market while giving customers more input and a better experience throughout the process.