The software development field contains various specialized roles, each with distinct responsibilities that contribute to the overall development lifecycle. Using Facebook as an example of a complex application, we can see how different teams work together.
Software development involves multiple specialized roles
Each role has specific job descriptions and responsibilities
Large applications like Facebook require multiple teams per feature (e.g., Facebook Messenger has its own development team)
Understanding the big picture helps professionals see how their role fits into the entire process
This overview is especially important for DevOps engineers, whose role can sometimes be unclear
The Birth of DevOps Culture
Solving the Communication Problem
Save
DevOps emerged as a solution to bridge the gap between development and operations teams, initially as a culture and methodology rather than a specific job role.
Key Points:
DevOps started as a culture/way of working to improve developer-operations communication
It evolved into a dedicated role because it required specialized competencies
DevOps engineers have subset skills from both development and operations
They act as intermediaries, speaking the "language" of both teams
DevOps developed its own unique skills: CI/CD pipelines, , Kubernetes
Core competency: Building continuous integration and continuous delivery pipelines
The Development and Testing Phase
Developers are responsible for writing code to create new functionalities and fix existing issues in applications. However, development is just the first step in delivering software to users.
Save
The Release and Deployment Process
From Code to Production.
Save
IT Operations Responsibilities
Running Software in Production
Save
The Skills Gap Between Development and Operations
Different Competencies and Communication Challenges
Save
Development Methodologies - Waterfall vs Agile
How Development Methodology Impacts Delivery Speed
Save
Developers work in teams to code applications using various programming languages
They create new features and fix bugs in existing applications
Testing happens at multiple levels: developers test their own code, manual testing by dedicated testers, and automated testing
Automated tests are crucial for complex applications to avoid repetitive manual testing
Testing ensures that new changes don't break existing functionalities
Once development and testing are complete, the application needs to be released to users. This involves packaging the code and running it on production servers where users can access it.
Key Points:
Release process involves building (packaging) the application into compressed code
Applications run on servers to be accessible to users
For existing applications, new features must be integrated into the running code
The application needs to be updated/upgraded without causing disruptions
This is where IT Operations comes into play
IT Operations teams are responsible for successfully running software in production environments. Their primary goal is ensuring applications remain available and performant for users.
Key Points:
IT Operations handle deployment of new features to production servers
They must ensure zero downtime during upgrades (users shouldn't notice when updates happen)
Operations teams manage server failures and hardware issues
They ensure applications can handle millions of requests simultaneously
Their focus is on infrastructure performance and maintaining optimal IT infrastructure
Development and Operations teams require completely different technical skills and tools, creating communication challenges in the software delivery process.
Key Points:
Development skills: Programming languages, testing frameworks,
Operations skills: Operating systems (), command line tools, scripting, monitoring tools
Different skill sets make communication difficult between teams
Traditional handover process involves developers documenting deployment instructions
Instructions are often unclear, incomplete, or missing critical details
This leads to deployment delays that can take weeks or months
The methodology used for software development significantly influences the speed and efficiency of the entire development and delivery process.
Key Points:
Waterfall Method: Sequential approach where entire application is planned, developed, tested, and deployed in large batches
Waterfall creates long cycles (months/years) with multiple failure points and limited feedback
Agile Methodology: Features are developed, tested, and deployed individually with immediate feedback
Agile enables faster, more dynamic, and easily changeable development processes
Popular agile implementations: Scrum and Kanban
Agile methodology supports the need for DevOps practices and continuous integration/delivery