There are many articles describing how both DevOps culture and an Agile mindset overlap in a very good way, specifically in the practices that both pursue. In this post, we will outline how WebRTC.ventures’ time-tested DevOps best practices converged with our agile-centered approach to building software solutions in one of our latest and most beloved edtech projects. It’s too soon to name the client publicly, but we look forward to doing so in the near-future.
The project and challenge at hand
Our client was looking for an expert in WebRTC technology and also a team that could guarantee scalability of their application with a global distribution. The majority of their users are in the US, but they also have users in Mexico, UK, EUA and Australia. When their business model was forced to go online during the pandemic, their solution was not easily customizable and it had troubles during spike loads of usage. Our client’s Product Manager even missed her children’s birthdays because she had to attend calls from customers on the other side of the world. You know, those calls that start with “this thing is not working!”
Agile teams and continuous deployment pipelines: our foundational encounter of DevOps and Agile
At WebRTC.ventures, all of our projects are executed within the Scrum framework with a continuous integration and continuous deployment (CI/CD) pipeline. We designate a Scrum Master and a cross-functional team consisting of a lead developer, a second-in-command developer, a DevOps engineer and a QA engineer. In many stages of the projects, we also have a UI designer. The Product Owner (PO) is usually provided by the client. When that’s not the case, we designate an internal PO.
The first 2 or 3 sprints are focused on putting together the necessary tools for Continuous Integration:
- A code repository for both the application’s code and the infrastructure code (our preferred tool for the latter is Terraform.)
- A pipeline that deploys the application from a merge into the master branch.
While these two practices seem quite obvious, I want to emphasize the values and practices from Agile and DevOps that converge at this moment. Having a continuous integration pipeline allows the team to quickly put in front of the client the pieces of the application that have been built during the last sprint. Getting feedback from our client is one of the main key practices that we highly value in our agile company culture. We want to amplify and gather feedback quickly. This is possible because of our cadence of demos (a.k.a. sprint reviews) and quick releases.
Additionally, in these early sprints our developers and DevOps engineers work closely together to dockerize the application. Having the application containerized from the beginning of the project makes it relatively easy to prepare it for an auto-scalable environment. For this project, using auto-scalable capabilities from AWS was a simple choice. WebRTC.ventures are partners with AWS and our client already had an AWS account.
From User Acceptance Testing to Production-Ready
While we implement three environments in all of our projects (development, staging and production), for this project we hold the releases to production until our client performs their own tests in our staging environment. Once the client was comfortable with the cadence of our sprints and with a release candidate, they established a deadline to have our production environment ready for their Beta testing program. We always welcome the opportunity to have actual users testing the application in the production environment. Having real users is healthy and useful. They provide real-life scenarios on how the systems are used.
When we deployed to production, we had all the tools in place. However, we ran into some issues with the resources of the cloud instances. Our DevOps engineer was able to solve them quickly via IaC and we stayed on deadline. This is another example that illustrates the benefits of our practices: by implementing CI/CD we were flexible and responded quickly to a configuration issue. While continuous delivery is not a formal part of Scrum, it is one of the many ways that you honor one of the Agile Manifesto Values: a working software.
The Final Piece: Ensuring scalability
Very often, clients will dismiss the opportunity to automate tests in favor of reducing costs. Building automated tests is a different skill than building an application. Both coding skills require care and passion, things that can only be brought by an additional engineer.
This client was eager to invest in load tests to ensure that the application could manage the expected load and a globalized scale. Our dedicated QA team in Panamá has experience in automated and load testing, and so much more. The wonder of our Panamá workforce and their skills are worthy of a blog post on its own!
By automating the tests, we were able to perform load and stress tests in our application. We presented the plan for load testing to our client and they provided their input and inquiries on how we would simulate real-time users.
During the tests we discovered several bottlenecks and things that we could improve in the system to achieve the requirements of scalability and high-availability provided at the beginning of the project. Our client understood that we needed to shift priorities in the upcoming sprints. They agreed to push down main features in favor of optimizing our system, not only in the code but also in the cloud infrastructure. Having time-boxed working periods (a.k.a. sprints) that focus on things that matter at that time (prioritization and Sprint Planning), with a close involvement of our client, and implementing automated tools for both scaling and delivering software artifacts — all of these are both Agile and DevOps principles that we love to implement in our projects.
Our Agile Culture
We center our company around a specific set of values. They represent the culture in which we build software, and also on how we see our life as engineers. We care about our clients, our solutions and our people. The best practices of software development are also focused on making life better for everyone.
We also select the best tools and practices from a variety of disciplines: Scrum, DevOps, Lean Project Management, XP, Automated Testing just to name a few. By implementing what has worked for us (and our clients) and being able to adapt different skill sets, we have been able to position ourselves as experts in WebRTC applications, but more importantly, to provide successful solutions to our clients.
Conclusion
By choosing to establish a culture with solid values that are shared within your organization, you can (in time) achieve a solution-driven approach to projects and software development. Implementing automated tools and practices from DevOps with the values of Agile frameworks like Scrum, you can successfully achieve continued delivery of value to not just your customers but also your employees.
Do you have a project and would like to see it live? Did you enjoy or are curious about any of the ideas presented in this blog post? Contact us at team@webrtc.ventures and we’ll be more than happy to discuss your needs.