Windmill Experts: Radha Sable, Senior DevOps Engineer
What does DevOps mean to you?
The DevOps model is defined as practices and tools that improve the ability of any organization to deliver applications and services at a faster rate than the traditional software development models and management processes. For me, all these DevOps principles and practices are adopted through the evolution of process and tools and culture as an organization matures. The key focus should be on the culture change and the key points of the DevOps culture are effective collaboration, constant learning and experimentation leading to improvements and fast feedback.
What are your main responsibilities as a DevOps Engineer?
The DevOps engineer at Windmill collaborates with multiple stakeholders, including the client, to understand project requirements and KPIs during the end-to-end software development lifecycle. We ensure that security and compliance are not compromised in a bid to release products at an accelerated timeline. After planning the blueprint of the development and delivery process, we implement the infrastructure and the development and automation tools. This is accompanied by defining the right build, test, release, and update cycle for DevOps operations. We ensure that the code and infrastructure is properly verified and validated, and that the proper monitoring is present to help us troubleshoot and fix any bugs.
For me, my most important responsibility is to make sure to identify and deploy cybersecurity measures by continuously performing vulnerability assessments and risk management.
How has your approach to DevOps evolved during your time at Windmill? How has technology changed?
The first thing that comes to mind is tools and technology obviously, but it was also accompanied by the change in mindset and the strengthening DevOps culture.
DevOps was originally a simplistic idea, which revolved around making developers and IT engineers talk more effectively with each other. It was only over time that specific types of tools–like containers and their orchestration–were associated with DevOps. And it took longer for the DevOps concept to be extended to all parts of the organization, rather than just development and IT. Throughout my experience in DevOps, there was initially more focus towards on-premise infrastructures with various vendors offering only certain type of services catering towards specific functionality of DevOps. Then there was a shift towards using mostly cloud-native managed services for all the practices of DevOps. Docker and Kubernetes provided an application deployment format that could be used in both development and production environments seamlessly, which facilitated one of the core goals of DevOps.
Every process associated with DevOps today is always supposed to be “continuous”, referring to the idea that processes should occur at all stages of the pipeline. When I joined Windmill, I learned how to make this focus on “continuous” into “comprehensible” and “predictable”, if not literally continuous, which gives better results. Also, there are so many cloud-agnostic tools now which have helped make DevOps processes much faster with faster feedback.
What are some DevOps best practices that are important to the Windmill team ?
- Infrastructure as Code (IAC): This is where we use scripts to deploy the infra for housing the application. It helps us test the infra in the same way we would source code, and we use virtual machines which behave like production environments early on. This makes it easier to scale and create multiple environments in days rather than months.
- Cloud Infrastructure: We have used cloud infra as a hybrid of on-prem and cloud or within public clouds for all their managed services. But with the recent shift towards serverless architectures on cloud, we have been able to eliminate or minimize the server management operations.
- Micro-services: This is the standard in Windmill, whereby customer apps are built as a set of independently-configured services which communicate with each other. This loose coupling helps in isolating issues, and ensuring failures in one service do not break the functionality in others. So the entire system stays stable while we can fix problems in isolation.
- Containerization and Orchestration: Containers, more lightweight and packaged with all runtime components without the whole OS systems unlike the virtual machines, are used to instantly deploy applications across various environments and this is well combined with the IAC approach. For orchestrating these containers, Kubernetes and other cloud-native Kubernetes tools like AKS and EKS are increasingly advanced.
- Configuration Management: This means to use code to automate servers, host configurations, operations, tasks and more. We focus on this so that changes in configurations are much more standardized, thereby saving the effort of manually configuring applications, servers, OS, software, etc.
- Continuous Integration (CI): Our developers frequently merge their codes into the source code management repository, leading to automated builds and tests.
- Continuous Delivery: This practice extends CI where all the successfully tested builds are later deployed to the testing and/or production environment.
- Continuous Monitoring and Logging: The goal of this practice is to detect the problematic areas and analyzing feedback from the team and users to improve the product’s features and functionality.
What is the career path or paths of a DevOps engineer?
DevOps Engineer is a very versatile, multi-faceted role as it keeps evolving as increasingly many organizations rely on streamlining operations and the development process, along with constantly evolving the tools used for DevOps, which often means more exciting learning opportunities. DevOps Engineers typically have a background in Software/IT. Most of the times, they landed their role after spending time developing software as well as managing operations, since DevOps bridges the gap between the two. Some important skills of DevOps engineers include:
- demonstrate that you can work as an individual contributor as well as a collaborator
- firm understanding of using technologies for automation tools and procedures, CICD, cloud technology, source code management as well as project management
- ability to close the gap in current technological infrastructure and come up with the right solutions
With that being said, some of the DevOps career roles are: Release Manager, Software Developer, Security Engineer, Operations Engineer, Systems Administrators, highly Technical Support Engineers with L4-L5 Support experience, and more.
What are some key resources you rely on or books from which you have learnt?
I have mostly learned everything from inexpensive Udemy courses offered by certified Cloud Professionals like Stephane Maarek (AWS), Colt Steele (Coding Bootcamps), Zeal Vora (AWS and IAC- Terraform), Mumshad Mannambeth and Edward Viaene (Kubernetes). Apart from this there is always opensource documentation available for all the cloud services. For coding my favorite book series is the Headfirst series for popular languages like Java and Python. Currently I am reading the book ‘The Pragmatic Programmer’ by Andrew Hunt, David Thomas, which offers an insight into the journey of a programmer from increasing specialization to study the core processes of the software lifecycle. It is a great book, covering lots of topics ranging from career development to architecture techniques to managing the flexibility, adaptability, and reusability of software code.