Software development can be a long and complex process. The more you can map out and plan, the greater chance you have of success.
Software project planning as evolved from the popular Waterfall method. In a waterfall model, each phase of development must be completed before the next phase can begin and there is no overlapping of the phases. The Waterfall model is the earliest Software Development Lifecycle approach that was used for software development.
In the 1990's specific iterative methodologies started to emerge. Jeff Sutherland and Ken Schwaber conceived the scrum process in the early 1990s. The term originated from rugby and referred to a team working toward a common goal. They codified scrum in 1995 in order to present it at an object-oriented conference in Austin, Texas, in the form of a paper titled "SCRUM Software Development Process."
Scrum was centred on the concept that for the development complex products like software, the best results occur when small and self-organizing teams are given objectives rather than specific assignments. The team is given the freedom to determine the best way of meeting those objectives. Scrum also defined time-boxed iterative development cycles whose goal was to deliver working software.
Agile project management methodology is an evolution of scrum and was adopted aggressively by the software development industry in a number of forms
- Agile Scrum
All these methodologies centre on the management of micro tasks within a bigger project that can be allocated, tracked or selected for development. The typical Agile task may pass through several teams or departments as it transitions from planning, to development, to testing and finally deployment.
The deployment stage is the conclusion of this task. Should enhancements, fixes or changes be required, a new task or job card is raised in response to client or end user feedback.
DevOps on the other hand is more of a philosophy or culture. There doesn't necessarily need to be a formal framework like agile (although there can be during the development process). DevOps is a culture of better communication between or the merging of the development, testing and operations functions of a business. A DevOps engineer is all these things.
The core of the DevOps philosophy is automation. We automate as much as possible through the development, testing , deployment and monitoring workloads with tasks like creating cloud infrastructure as code, deploying new software and automating the roll back should a deployment create unexpected results.
DevOps methodology speeds up deployment frequency, which from a business perspective means faster time to market rolling out new features or responding to market forces or changes in technology.
Automated deployment code pipelines make this possible by deploying code, commissioning cloud infrastructure as needed and automating rollbacks if required. So instead of manual testing in a pre-deployment Agile or Scrum framework, DevOps encourages fast deployment with systems in place for capturing and eliminating errors and performance issues in real time as they are detected.
The Agile Lifecycle
The typical software development workflow within the Agile framework looks like
Plan > Design > Develop > Test > Deploy > Review > Launch
Following this cycle, customer feedback will dictate additional work, enhancements or fixes that are raised as new tasks and placed back at the "Plan" stage of the workflow.
There's nothing wrong with this in theory. Developing smaller segments of your software means you get greater transparency and insights in the the costs and schedule of the project. These become more predictable than in older methodologies like Waterfall, where bottlenecks and rework could get lost under the overall project umbrella.
Products like software can also benefit when using Agile, because you can react to market changes as they happen because your development cycle relates to small individual elements of your overall app. You don't need to wait for Version 2.0 to introduce features or changes that respond to changes in the market.
Agile also provides a continuous feedback loop as elements of your application are developed and delivered. As feedback is received from your customer, improvements can be made and incorporated into the product.
Impacts of Choosing DevOps or Agile
Agile centres on the client feedback loop so you are continuously developing and reworking sections of the software based on the priorities of the product owner, which can sometimes be a good thing, and sometimes not.
DevOps is focused on the elimination of communication barriers between development and operations teams and the fast deployment and optimisation of code and fixes. When automation is brought to the table, the result is fast development, continuously improving products delivered by a united team that has the same responsibility for all stages of the delivery process.
DevOps utilises the tools and automation necessary to deliver software and updates as efficiently as possible and doesn't suffer from structured transition of work through several often disparate departments that may have their own workload priorities.
Agile is totally dependent on a rigid framework. Nothing reaches deployment without being prioritised by a tester and passing through the testing team. Nothing reaches the testing backlog without reaching the top of the dev queue and being selected by a developer. Which often leads to painfully slow progress. Not very Agile at all.
Agile Team Culture vs DevOps Team Culture.
In DevOps all the members of the team are equally responsible for the continuously looping development and operational cycle so are typically skilled in all aspects of the development, deployment and monitoring process. Your focus is organisation wide.
In Agile you typically have separate teams for development, testing, deployment and operations all with completely different skill sets which can lead to friction and bottlenecks should one team be under pressure or underperforming.
It's easy for Agile teams to have a focus on their department and team performance and hand off blame for hold ups further up the chain. Whereas DevOps teas tend to be focused on organisational outcomes since they are jointly responsible for the entire development, deployment and operational lifecycle.
DevOps has an emphasis on automation and having the whole team able to understand what is going on all the time.
Agile is more time focused by placing time limited expectations on several teams separately driven by a feedback framework external to all the teams. This feedback can be at the end of lengthy development, testing and deployment cycles and provided by the end user.
DevOps on the other hand relies on feedback from internal team members gained from the continuous improvement and deployment cycle that has plenty of automation to speed up the feedback and response.
DevOps is heavily reliant on automation and code pipelines using tools like Jenkins, Terraform, Kubernetes, Git, Docker, Ansible and Artifactory to name but a few.
Agile is more about the structure and flow of development, testing and deployment and pays little attention to operations and monitoring of software once it is deployed. Typical Agile toolsets would include Jira, Active Collab, Slack, Agile Bench and Pivitol Tracker. Tools design to schedule and manage tasks and communication between teams and team members.
Where do Agile and DevOps cycles stop?
Both Agile and DevOps focus on fast software development. At the end of an Agile development and deployment cycle, nothing else happens. The software has been developed and delivered, the infrastructure built, job done. Until of course, customer feedback is received about a bug, performance issue, potential improvement or requirements for a new feature. The end user is essentially monitoring the efficacy and performance of the application.
With DevOps because the whole team is responsible for both the development AND the ongoing operations, the detection of errors, discovery of potential performance improvements and new features that will enhance the user experience are all parts of the DevOps process. DevOps continues to monitor infrastructure and application performance to help improve the software via automation after deployment which is typically not the case with Agile.
DevOps vs Agile business outcomes.
Both methodologies are legitimate and successful approaches to software development but may result in slightly different end user outcomes. While both systems concentrate on smaller release cycles and focus on speed, Agile customers are the ones who will pick up problems or report performance issues not picked up by pre deployment testing which from a business perspective isn't ideal.
DevOps relies on feedback from within the continuous improvement and deployment loop, typically from the DevOps engineers. Smaller release cycles with immediate internal feedback and the focus on automated deployment and monitoring means fewer problems are encountered by end users which delivers a much more desirable business outcome.
Popular DevOps tools
- Jira, Slack, Trello
- Git, Jira, Eclipse, Confluence, Subversion, Jenkins, BitBucket
- Maven, Apache Ant, Gradle, Postman, Cloudbees
- Selenium, J-Unit, Jenkins
- Terraform, Puppet, Chef, Saltstack, Ansible, Cloudformation
- New Relic, Sensu, Nagios, Cloudwatch, Splunk
Whichever methodology suits your business, ensuring your cloud infrastructure looks the way your designed it is simple when you plug your AWS, Azure or GCP environment into Hava. In a few seconds you will have accurate diagrams of all your detected resources logically laid out in clean easy to comprehend format.
From a DevOps monitoring perspective, Hava continuously polls your cloud infrastructure settings and automatically generates a new set of AWS, Azure or GCP architecture diagrams whenever a change is detected. The old diagram set is moved into a version history which is fully interactive like the live diagram, so you can compare versions whenever you like.
Try Hava for yourself here.