- Building a strong foundation for effective DevOps involves understanding key terms and concepts.
- Software development methodologies have been described throughout the history of computer engineering to improve the development and operations process.
- Many methodologies split work into phases with distinct activities, but they can lead to conflicting goals between development and operations teams.
- Forcing teams to follow specific methodologies can cause resentment and frustration if they don't align with their existing processes and goals.
- DevOps is not rigidly defined, and it does not prohibit any particular methodology.
- DevOps originated from advocating for Agile system administration and collaboration between development and operations teams.
- The practice of DevOps is unique to each environment, and the key is to assess and evaluate different tools and processes to find the most effective ones for the specific context.
Software Development Methodologies
- A software development methodology splits development work into distinct phases.
- Waterfall is a sequential project management process that originated in manufacturing and construction industries and later adapted to software development in the early 1980s.
- Waterfall involves stages like requirements specification, design, implementation, integration, testing, installation, and maintenance.
- The Waterfall model assumes that spending significant time in the requirements and design phases would reduce the number of mistakes found later in the development process.
- During the heyday of the waterfall model, delivering software on physical media like CD-ROMs or floppy disks was common.
- Manufacturing and distributing new CDs or floppies to fix bugs were costly and time-consuming processes.
- However, this approach had its limitations, and it became evident that software development could benefit from more flexible and iterative approaches like Agile and DevOps.
- Agile is a group of software development methodologies that are lightweight and flexible, with a focus on collaboration, flexibility, and working software.
- The Agile Manifesto values individuals and interactions over processes and tools, working software over comprehensive documentation, customer collaboration over contract negotiation, and responding to change over following a plan.
- DevOps shares characteristics with the Agile movement, emphasizing collaboration and individuals, but it is a separate cultural movement with a broader focus beyond just development.
- Scrum is a software development methodology that focuses on maximizing a development team's ability to quickly respond to changes in project and customer requirements.
- Scrum uses predefined development cycles called sprints, usually between one week and one month long, beginning with a sprint planning meeting to define goals and ending with a sprint review and sprint retrospective to discuss progress and any issues that arose during that sprint.
- The daily Scrum or daily standup is a key feature of the Scrum methodology in Agile software development.
- During the daily Scrum, team members gather for a short meeting, usually in the morning, to answer three specific questions related to their progress and goals.
- The three questions team members answer are:
- What did I do yesterday that helped the team meet its sprint goals?
- What am I planning to do today to help the team meet those goals?
- What, if anything, do I see that is blocking either me or the team from reaching their goals?
- The purpose of the daily Scrum is to provide a quick status update on the team's progress, ensure alignment among team members, and identify any potential obstacles or blockers.
- The meeting is usually time-boxed to keep it short and focused, typically lasting around 15 minutes.
- The Scrum master, an important role within the Scrum framework, often facilitates the daily Scrum. The Scrum master's responsibilities include helping the team self-organize, coordinating work efforts, and removing any impediments that may hinder progress.
- The Scrum master also collaborates with project owners and stakeholders to ensure a shared understanding of what it means for a task or feature to be "done" and to track the overall progress of the project.
- While Scrum is a specific Agile methodology, its principles, including the daily standup and focus on collaboration and flexibility, are often applied less formally in many modern software development practices today. These principles are aimed at fostering better communication and productivity within development teams.
- The principles of Scrum are widely applied in software development practices today, even in less formal ways.
- ITIL (Information Technology Infrastructure Library) is a set of practices designed for managing IT services. It was developed by the British Central Computer and Telecommunications Agency in response to the increasing diversity of IT practices among organizations in the 1980s.
- ITIL is published as a series of five volumes that outline its processes, procedures, tasks, and checklists. The core sections of ITIL in the most recent version (2011) include service strategy, service design, service transition, service operation, and continual service improvement.
- ITIL aims to standardize IT practices, and there are over 1.5 million ITIL-certified individuals worldwide.
- While ITIL offers many benefits through standardization, it is often criticized for being more reactive than proactive. Practitioners are encouraged to find ways to add proactive planning and customer focus to their ITIL practices.
- COBIT (Control Objectives for Information and Related Technology) is an ISACA framework for governance and management of information and technology, initially released in 1996.
- The core principles of COBIT include meeting stakeholder needs, covering the enterprise from end to end, applying a single integrated framework, enabling a holistic approach, and separating governance from management.
- COBIT emphasizes aligning business goals with IT goals, ensuring effective IT governance, and providing a comprehensive approach to managing information and technology within an organization.
- COBIT is based on 5 principles:
- • meeting stakeholder needs;
- • covering the enterprise from end to end;
- • applying a single integrated framework;
- • enabling a holistic approach; and
- • separating governance from management.
- Both ITIL and COBIT are methodologies that aim to improve the efficiency and effectiveness of IT operations and services within an organization. Organizations may choose to adopt these methodologies or adapt them to suit their specific needs and requirements.
- Systems methodologies focus on considering complex systems as a whole, rather than focusing on specific areas like software development or IT operations.
- Systems thinking skills are crucial for understanding and working with complex systems, and recommended resources for learning more include "Thinking in Systems" by Donella Meadows and "How Complex Systems Fail" by Dr. Richard Cook.
- Lean is a methodology that originated from the Toyota Production System (TPS) and aims to maximize customer value while minimizing waste.
- The five principles of Lean Thinking are value, value stream, flow, pull, and perfection.
- Lean systems focus on eliminating waste in all areas except those that add value to the system. This includes waste in software development and IT operations.
- Waste in Lean can include unnecessary software features, communication delays, slow application response times, overbearing bureaucratic processes, and more.
- Lean software development focuses on eliminating waste and optimizing flow of work, either through a set of tools or following "The Toyota Way."
- There is no one prescribed way to do Lean software development, and different approaches may lead to different outcomes, but the ultimate goal remains the same: maximizing value and reducing waste in the development and operation of software products.
Development, Release, and Deployment Concepts
Development, release, and deployment concepts encompass several terms related to the processes of creating, releasing, and deploying software. Understanding these concepts is essential for knowing how to develop and deploy software effectively and efficiently, and it also helps in selecting appropriate tools to facilitate these practices.
- Version Control: A system that records changes to files or sets of files, such as source code, assets, and documents, allowing collaboration, history tracking, and the ability to revert to previous versions.
- Test-Driven Development: Developers write tests before writing the code, ensuring clear specifications for the functionality and encouraging developers to take responsibility for code quality.
- Application Deployment: The process of planning, maintaining, and executing software releases, considering changes and dependencies to minimize inconsistencies in the deployed software.
- Continuous Integration (CI): The practice of integrating new code frequently throughout the day to avoid integration problems and ensure that tests are automatically run upon integration.
- Continuous Delivery (CD): Principles allowing for frequent releases of new software through automated testing and continuous integration, ensuring that the software is deployable.
- Continuous Deployment (CD): The process of deploying changes to production with defined tests and validations to minimize risk, enabling quick iteration and customer feedback.
- Minimum Viable Product (MVP): A prototype of a product with the minimum features necessary to determine its viability, allowing for faster iteration and reduced waste.
- Configuration Management: The process of identifying, managing, monitoring, and auditing a product through its lifecycle, including policies, documentation, tools, and systems involved.
- Cloud Computing: Shared, internet-based computing where customers can use computing resources offered by cloud providers, providing cost savings and flexibility for rapid iteration.
- Infrastructure Automation: Creating systems that reduce human effort and increase precision by automating tasks and reducing repetitive work.
- Artifact Management: Managing and storing the output of the software development process, such as libraries, assets, and applications, ensuring easy access and promotion of build artifacts.
- Containers: Isolated structures that allow rapid and consistent deployment of applications, reducing friction between development and operations teams.
- Retrospective: A discussion after a project's completion to evaluate what went well and what could be improved in future projects.
- Postmortem: A discussion that occurs after an unplanned incident or outage to understand what happened, learn from the event, and implement remediation measures.
- Blamelessness: A cultural concept emphasizing learning from incidents rather than assigning blame to individuals.
- Organizational Learning: The process of collecting, growing, and sharing an organization's knowledge to foster continuous improvement and success.