Our expert panel included: Gioia Ballin, software engineer at Measurance; Jamie Ingilby, software development leader; Juni Mukherjee, author of “Continuous Delivery Pipeline – Where Does It Choke?”; J. Paul Reed, Managing Partner at Release Engineering Approaches and host of the ShipShow podcast ; and our very own Anders Wallgren and Sam Fell.
During this episode, we covered the hard truths and common hurdles along your pipeline — from code check-in to Release — and some best practices to address them on your path to achieving Continuous Delivery. We discussed Continuous Integration, the importance of testing, and challenges of configuration, deployment and release, and more. Continue reading for best practices and advice from our expert panelists.
- Ballin on CI in small teams: “When your team is very small, time resources are scarce, and you have to give power to the developers. You don’t have the time to ask someone to deploy your service; you have to be able to deploy your service by yourself.”
- The way Mukherjee sees CI? “The way I visualize it is you have the feature branches, where you are relatively isolated and can make mistakes without really putting the entire team up for sale. Then, when you check into main line, mentally prepare yourself to see it in production. That way you go into main line with the amount of confidence that you had before.”
- Ingilby on the challenges of CI in legacy and monolith applications: “In these applications where there isn’t maybe the branching strategy to support it, Continuous Integration is sometimes the first hurdle that people have to get over. And sometimes it’s a lot more difficult to get through that one first hurdle than we might otherwise think.”
- First, operationalize Continuous Integration, says Reed: “Often times, legacy applications or not, I find that the conversation really starts around operationalizing your Continuous Integration platform, and then having the organization react to when it fails – when they’re failing unit tests, leaving them red for months at a time, or having tests that might be flapper tests, that go red and green, actually spend time on fixing those.”
- Advice on testing in release pipelines, per Ingilby: “You have to consider everything that is considered ‘testing’ for your product – we’re not just talking about functional testing, or acceptance tests, it could be everything that’s required in order for you to build confidence in your artifact as a releasable product.”
- Testing is the hardest part of Continuous Delivery, according to Reed: “Testing is the hardest part, because we talk about unit tests and static tests and all these different types of tests. We say that we should have them – and the fact that we’re still saying that – the more interesting question to me is – it’s not that we don’t get it, it’s just that we don’t do it.”
- According to Mukherjee, tests move you from “suicidal speed” to “responsible speed.” She goes on to say, “Tests are first class citizens – a test pipeline is as meaningful as anything else.”
- Testing can save you dollars, according to Ballin: “Software testing is so important because software always contains defects, defects leads to failures, and failures potentially lead to money losses.”
Configuration, Deployment, Release
- Reed stresses the importance of release engineering. He says successful organizations: “[Are] caring about those none functional requirements of operational requirements, release engineering, tooling, asking how to do AB testing and feature flagging. All these things are release engineering problems, and we’re starting to see its impact on security.”
- Mukherjee: “Don’t make this a tooling problem. It’s essentially a process problem, and if you say process drives architecture and architecture drives tools, then once we lay out a cool process for ourselves, I think it’s very reasonable to then follow it up with the right architecture and the right tool set – and the tools will evolve.”
- Advice for when you have multiple environments before production, per Ballin: “If you have several environments and you have to pass through all the environments, the best way in my opinion is to streamline the pipeline until the very last step before production.”
- Everyone on the team should be akin to the release process, according to Ingilby: “It’s important that the final step is part of a step that anyone on the team feels confident in doing. There are lots of organizations that have formal, or even informal, deployment heroes that do all of the deploying and have special access – this isn’t a scalable pattern and doesn’t encourage your software architecture to be easily deployable and resilient.”
Watch the full episode here
Want more Continuous Discussions? We hold our #c9d9’s every other Tuesday at 10 a.m. PST, which features expert panelists talking about DevOps, Continuous Delivery, Agile and more. Next Tuesday on Continuous Discussions, we’ll be talking about DevOps and CD for Non-Web Apps.