HomeVideos

CI/CD with Robert Erez

Now Playing

CI/CD with Robert Erez

Transcript

2333 segments

0:00

It's kind of funny. You know, we talk

0:01

about Kubernetes being cloud native. The

0:03

reality is a lot of customers actually

0:05

use Kubernetes for running on premise. I

0:06

was talking to another one of our

0:08

customers actually just the other day.

0:09

They've got Kubernetes clusters running

0:10

on research vessels.

0:12

>> Research as in like

0:12

>> as in boats

0:13

>> on the ocean.

0:14

>> They've got Kubernetes clusters out in

0:15

the open sea.

0:16

>> What is GitOps?

0:17

>> GitOps is potentially not necessary for

0:19

all teams. Some of this absolutism that

0:21

sometimes exists may not be necessary.

0:23

>> I don't hear too much chatter about roll

0:24

backs.

0:25

>> Roll backs. This is always a spicy one.

0:26

Customers can go, "Yeah, we roll back

0:27

all the time." And then when you ask

0:29

them what do you do if you've got a

0:30

schema change they kind of stop and

0:31

realize that it's just sheer luck that

0:32

they've never run into that. You want to

0:34

avoid ever talking about roll back. It's

0:35

always roll forward.

0:36

>> When it comes to CI/CD systems, what are

0:39

you seeing changing there because of AI?

0:42

>> This is the elephant in the room to be

0:43

honest. It's

0:45

[music]

0:48

CI/CD remains one of the hardest things

0:50

to get right [music] in software

0:51

engineering. But why? Rob Eris is a

0:53

CI/CD expert having worked in this field

0:55

for more than a decade. In the early

0:57

2010s, we were teammates on the Skype

0:59

for web team and then Rob joined Octopus

1:01

Deploy as one of the first engineers 10

1:03

years [music] ago. In today's episode,

1:05

we cover progressive delivery in

1:07

practice, Canary deployments, blue

1:09

green, and why feature toggles are often

1:11

still better. [music] What is GitOps and

1:12

why it's not about Git and where the

1:14

everything in Git mindset breaks down,

1:16

why you should prioritize roll backs

1:18

less and focus on roll forwards and many

1:20

more. If you want hard-earned lessons

1:22

about CI/CD, progressive delivery, and

1:24

what's coming as AI changes, how much

1:26

code we ship to production, then this

1:28

episode is for you. This episode is

1:30

presented by Inticus. Verify your

1:33

systems correctness without human review

1:35

or traditional integration tests and

1:37

avoid bugs or outages. Today's episode

1:39

will be about CI/CD. CI/CD at scale is

1:42

one of the hardest infrastructure

1:44

problems to get right, and the teams who

1:46

nail it know that the details very much

1:48

matter. This is where I need to mention

1:50

our season sponsor work OS. Work brings

1:53

the same rigor as many of us use with

1:55

CI/CD at scale to enterprise o SSO skim

1:58

areback production ready battle tested

2:00

and built to handle real load and real

2:02

compliance requirements. To add

2:04

enterprise o without the infrastructure

2:06

project visit workwest.com

2:09

it's awesome to have you here on the

2:10

podcast.

2:11

>> Hello go. It's good to be here. Yeah,

2:13

I'm loving loving Amsterdam. Yeah, it's

2:15

it's been like what 11 12 years since we

2:17

walked worked together.

2:18

>> Yeah. Yeah. I think uh 2015 2014 2015 I

2:22

think I left uh UK. Um yeah, a while

2:25

>> and Skype when there was still Skype.

2:27

Our team somehow inherited the

2:29

outlook.com plugin which had like 400

2:32

million users per month or something

2:34

like that.

2:34

>> It was crazy the amount of

2:36

>> scale. So this was an interesting

2:37

interesting job. deployments were very

2:39

much a case of, you know, you ship once

2:41

a week and you have to go to a um a CAB

2:44

board, you know, a change advisory board

2:46

and you have to get sign off and

2:47

approval.

2:48

>> Yeah.

2:48

>> And I always found that really weird,

2:49

right? Like we're building this piece of

2:51

software. It runs on the web. We can

2:53

ship it whenever we want. It it was

2:55

running on Azure at the time. And so,

2:56

you know, we've got full access to push

2:58

whenever we want. And we make these

2:59

changes through the week, but we'd kind

3:02

of have to hold them back, I guess, to

3:04

Abdullah, our manager, both of our

3:05

managers at the time.

3:07

Um we kind of I guess worked around the

3:10

system. When the the code was ready,

3:11

we'd build it and ship it through

3:12

through the week. Um and I was really

3:15

sort of impressed and proud at this

3:17

process that the whole team had kind of

3:18

put together, right? Where we'd, you

3:20

know, commit the code. Uh the test would

3:22

run several kind of layers of testing,

3:24

it would go to staging, etc. And then it

3:27

would get shipped to production.

3:30

Um so we're kind of I guess executing a

3:33

form of I guess you know continuous um

3:35

delivery at a time. And [clears throat]

3:37

we would then ship ourselves, you know,

3:38

once a week. Um I kind of always like to

3:40

tell this story that um at the time, you

3:43

know, when when we'd have a build ready

3:44

to go, you know, we we do a form of

3:46

canary deployments. And so this is where

3:48

you kind of roll out to a small

3:49

percentage of your customer base. And we

3:51

always found that the the customer base

3:53

that would be our test subjects was New

3:55

Zealand. So New Zealand was always our

3:57

our canary.

3:59

>> Yep.

3:59

>> A bunch of reasons for that. you know,

4:01

they're in the the you know, the the

4:02

first country to kind of reach this, you

4:04

know, new date. So, they're always the

4:06

first ones to kind of roll out into a

4:08

into a time

4:08

>> when the it comes like, you know, like

4:11

midnight passes. It's like 1:00 a.m.

4:14

First country is New Zealand.

4:15

>> Bang. Exactly. So, the first country

4:16

that's of, you know, significant size.

4:19

Um, they speak English, so if there's

4:20

any bugs or issues or reports, it's kind

4:22

of easy to understand. But, you know, to

4:24

be honest, New Zealand is small enough

4:26

that no one really cared if we shipped a

4:27

bug and had to fix it quickly. So sorry

4:29

to all the New Zealanders listening.

4:31

Yeah, I I I think that's um kind of this

4:34

this good example of using um a

4:36

continuous delivery technique to um you

4:39

know ship the code faster than what we

4:40

otherwise could have if we had these

4:42

kind of big bang releases. And this

4:43

whole process I guess opened my eyes to

4:46

you know what what progressive delivery

4:48

what good CI/CD could be. And yeah, I

4:51

guess from there I spent a few years

4:53

there at Skype and eventually wife and I

4:55

decided it was sort of time to come home

4:57

to Australia.

4:58

>> And then back in Australia, you went to

5:01

start to work at Octopus Aloy.

5:03

>> Uh yeah, eventually I I came back and

5:05

actually um worked at a a place with a

5:08

friend of mine just for a little while

5:10

just to kind of get back on the feet. Um

5:12

and I remember they were using Octopus

5:14

Deploy there. And so Octopus Deploy for

5:16

those who don't know was is um a

5:18

deployment tool was built and and sort

5:20

of developed originally in Brisbane. So

5:21

there was a strong kind of Brisbane

5:23

>> attachment

5:24

>> attachment to it. Yeah, that's right. So

5:25

when I found out that they were hiring,

5:26

I thought okay, why not? I'll give it a

5:28

go. I like CIC CD. I like this space. I

5:30

think there's, you know, a lot of

5:31

interesting problems in this space. Um

5:33

so applied and joined and um at the time

5:36

I was employee I think employee number

5:38

eight or nine or something like that. So

5:40

it was very much still a bit of a

5:41

startup culture. Definitely not startup

5:44

in the sense of, you know, Silicon

5:45

Valley wild parties and, you know,

5:47

ridiculous spending, but startup in the

5:49

sense that everyone who I worked with

5:51

was an engineer. Now, even Paul Stella,

5:53

CEO, he's he's an engineer. This is kind

5:55

of where it started from. And so, we'd

5:58

all be working on on code together. Um,

6:00

you have someone had an idea, you'd have

6:02

a bit of a chat about it and ship it.

6:04

So, we were the marketing, we were

6:05

support, we were done a bit of

6:07

everything. Um, and yeah, obviously the

6:09

company has grown a lot since then. The

6:11

company was focused Octopus deployed

6:13

from the start they were focused on

6:15

deployments right can we talk a little

6:18

bit on whenever I think about deployment

6:21

I always say CI/CD continuous

6:23

integration continuous delivery why was

6:26

there a focus on deployments and is that

6:29

the same as continuous delivery

6:31

>> yeah interesting so um you're right like

6:33

quite often people talk about CI and CD

6:35

as this kind of interchangeable they're

6:37

either interchangeable or the word is

6:38

CI/CD is like the name

6:39

>> it's just attached to itself

6:41

And it's hard for me to imagine a CD

6:43

without a CI, continuous integration.

6:44

>> That's that's right. And I guess the way

6:47

to look at it is um you know, you've got

6:49

sort of multiple stages of maturity of

6:51

of um software teams as they kind of

6:55

move on their way from um you know,

6:57

initially uh CI which continuous

7:00

integration. This is the idea that

7:01

>> well initially it's YOLO.

7:03

>> Initially it's right initially. You just

7:05

deploy to prod or SSA like machine.

7:08

We've all we've all worked in places

7:10

where we've done that and that that's

7:11

the starting point. So you're right,

7:12

yolo is the first stage. The second

7:14

stage is you know continuous integration

7:16

and so this is this idea where um you

7:19

want to keep you know integrating

7:20

merging your code changes into a single

7:23

um a single branch and you want to be

7:25

continually running tests against it.

7:26

Now continuous delivery is kind of the

7:28

next stage where you know we talk about

7:30

testing our code and there's you know

7:32

unit test and integration tests etc. But

7:33

what you also really need to test is

7:35

your your deployment process itself.

7:37

Right? So continuous delivery is this

7:40

idea. Okay, you want to make sure that

7:41

at any point in time when I click the

7:44

button to deploy I want it to go to

7:46

production once we kind of get to this

7:48

place. Um the next stage beyond that

7:51

which you know not all companies

7:52

necessarily reach is uh continuous

7:55

deployment. Right? And so this is the

7:57

idea that not only are your your changes

8:00

being merged and merged together at the

8:02

same time and ready to go, but they're

8:03

also being shipped to to production

8:05

essentially.

8:06

>> So the stages we have is first yolo,

8:09

then continuous integration, then

8:11

continuous

8:12

>> deliver

8:13

>> delivery and continuous deployment.

8:16

>> That's right.

8:16

>> What is the difference between

8:17

continuous delivery and continuous

8:19

deployment?

8:20

>> The big difference I guess is um the

8:22

question of do your changes go out to

8:24

production automated? does it kind of

8:26

flow through without any um intervention

8:28

I guess

8:28

>> and then for continuous delivery they go

8:30

out but not necessarily to production

8:32

right

8:33

>> that's right and so that's why you'll

8:34

have environments like you know dev

8:36

environment or testing or staging or

8:37

whatever um now it's possible that you

8:40

know some parts of that process may also

8:42

still be manual you know maybe you only

8:43

update the test environment once a week

8:45

so the testers can play around with it

8:47

again um but the key principle is that

8:48

you you could you can kind of push it

8:50

through sort of automatically the whole

8:52

way through if you want

8:53

>> and what teams would not want to do

8:56

continuous deployment, right? Cuz it it

8:58

seems to me continuous delivery you kind

9:00

of want to get to because then you just

9:02

get more and more feedback, right? But

9:03

then it is a kind of a good question

9:05

like should it go out immediately? This

9:08

is this is the question you know

9:09

everyone always sort of asks like it's

9:12

almost ready to go out why can't we just

9:13

push it to production put as engineers

9:15

you want as soon as possible it's ready

9:17

right the reality is it doesn't really

9:19

suit every every every company right so

9:23

um you know it may be the case that you

9:24

know some some companies really do still

9:26

have you know review boards where you

9:28

need to validate is this good to go out

9:30

um particularly if you're in an industry

9:33

that has a lot of um regulation and and

9:36

compliance problems problems, compliance

9:39

requirements, and they need to make sure

9:41

that when it does go out to production,

9:42

it's it's sort of done at the right time

9:44

with the right people available, etc.,

9:46

etc. It's not necessarily true to say

9:49

that everyone should be going to

9:50

continuous deployment. Um, because

9:52

that's, you know, sometimes just not not

9:54

viable for various reasons. But if you

9:57

at least got to that point where you're

9:58

sort of continually seeing your changes

10:00

go through all the testing, uh, you

10:02

know, you're promoting it through the

10:04

different environments, which is, you

10:05

know, you're therefore testing the

10:07

process itself. If you can only click

10:09

that button to go to production once a

10:11

week or whatever, okay, that's fine. You

10:13

know, you've done a lot of that hard

10:14

work. You've mitigated risk, which is

10:16

what a lot of this process is about,

10:17

right? Is is fill the pain as soon as

10:20

possible. Um, and and derisk anything

10:23

that could go wrong right up until that

10:24

that last point.

10:26

So I know you're deep into CI/CD uh

10:30

where continuous integration, continuous

10:32

delivery, continuous deployment. You've

10:33

been doing this for like what 10 plus

10:34

years now, but I was pretty surprised to

10:36

see that when I checked Octopus deploy,

10:38

it said deployment. It says continuous

10:40

deployment, continuous delivery, but it

10:42

also says Kubernetes. How has Kubernetes

10:44

kind of arrived in the topic of CI/CD

10:47

and in general infrastructure? What

10:49

happened there?

10:49

>> Yeah. Yeah. Kubernetes is is the the

10:51

platform of of the moment. If we take a

10:54

bit of a step back, uh, Kubernetes came

10:55

out of, um, the, you know, Google, I

10:58

guess they originally had Borg, you

10:59

know, they were using it to to host and

11:00

run their infrastructure. They ended up

11:03

releasing Kubernetes, um, partly um, I'm

11:06

not going to, you know, pretend I can

11:08

read their minds and know exactly why,

11:09

but, partly as a way of helping to level

11:11

the playing field between them and some

11:13

of the other cloud vendors.

11:14

>> Yeah. So, like before Kubernetes, AWS

11:17

was a clear leader. And I I talked with

11:19

Kat Co's growth who came to the podcast

11:22

uh who's uh who works on the Kubernetes

11:24

team. And again, she speculated that by

11:26

releasing Kubernetes, it was a lot

11:29

easier to to move workloads from between

11:33

AWS and Google Cloud. So, it kind of

11:35

leveled the playing field and now there

11:36

was a reason to That's right.

11:38

>> like choosing Google Cloud was no longer

11:40

as big of a risk or choosing Azure was

11:42

not as big a risk and so on.

11:44

>> Yeah, that's right. But it kind of it

11:45

made it simple to move between vendors.

11:47

And so um as a as a customer of one of

11:50

these um platforms, if you wanted to

11:53

move to AWS and you're using containers,

11:55

no problem. You're just sort of putting

11:56

it in a new place. And so Kubernetes

11:58

came along at the time when um there was

12:01

a bunch of plays in the field for um

12:03

container orchestration. Um so you know

12:05

you had um you know Nomad even dock

12:08

>> from hashpform

12:10

a bunch of other options are out there

12:12

because

12:12

>> at core o Kelsey high tower was just on

12:14

the on the podcast they they built fleet

12:17

which was another container

12:19

orchestration and this was all around

12:20

like 20 2012 2013 2014 and then

12:24

Kubernetes came out and somehow it

12:25

started to win market share.

12:27

>> Yeah. Yeah. Yeah, I mean they I think

12:29

the the um some of the um mechanics that

12:32

it provided um kind of really appealed

12:35

to to engineers and and I guess DevOps

12:37

teams out there and eventually I think

12:40

particularly because it was so easy to

12:43

um use crossplatform

12:45

and because some of the cloud vendors

12:46

then did end up picking it up it kind of

12:48

has ended up now being essentially the

12:50

winner in this space. I know even back

12:52

then even non-container orchestration

12:55

tools like um Azure service fabric was

12:57

another kind of attempt to to handle the

12:59

the fact that you know this world

13:01

everyone's building microservices and

13:02

they want to host them in a single

13:03

platform and how do you orchestrate that

13:04

and deal with dependencies etc. uh but

13:06

Kubernetes has become the clear winner.

13:09

>> And when you say winner, I understand

13:11

that for example, when you have a bunch

13:12

of backend servers on a service like you

13:15

know you have a website, there's a large

13:18

back end. Okay, I'll use Kubernetes for

13:19

that. But you're talking about you're

13:21

talking about infrastructure, right? Or

13:23

you're talking about even things like

13:25

build servers.

13:25

>> That's right. So it's kind of funny, you

13:27

know, we talk about Kubernetes being,

13:30

you know, cloudnative. This is what this

13:31

is the term you always hear. It's cloud

13:32

native.

13:32

>> Yeah, that's that's what they say,

13:33

right?

13:34

>> That's what they say. And you know you

13:35

look at the vendors that picked it up

13:36

it's it's Azure and AWS and kind of the

13:39

made it available on their platforms.

13:41

The reality is a lot of customers

13:42

actually use Kubernetes for running on

13:44

premise. Um so you know a

13:47

non-insignificant number of our

13:48

customers who are doing Kubernetes are

13:50

running on potentially their own VMs on

13:52

their own server farms or maybe they're

13:54

running VMs in AWS or Azure but they're

13:56

maintaining Kubernetes itself. Um the

13:59

idea being that they have a lot more

14:00

control then over exactly what's

14:02

running. Uh it's particularly common

14:04

you'll find in things like financial

14:06

industry and things like that where

14:07

again wanting to fully sort of control

14:09

the process and and um uh manage the the

14:13

whole sort of piece of infrastructure

14:15

from end to end is kind of one of their

14:16

goals but they want to leverage the

14:18

capabilities that Kubernetes provides by

14:20

you know allowing the the application

14:23

team and the ops teams to just build and

14:25

define kind of in that declarative

14:27

fashion that Kubernetes provides um

14:29

exactly what runs and and how does it

14:31

run etc. So they they chose Kubernetes

14:34

because this is the best tool they can

14:38

manage their on-prem infrastructure and

14:41

say like okay I have like these physical

14:43

machines and I want this many virtual

14:44

machines and I want to run a database on

14:46

this many nodes and a internal web

14:49

server or like whatever. So it it just

14:51

won this area as well.

14:52

>> Yeah. Yeah. I mean so there's around the

14:55

same time that Kubernetes came out or

14:56

actually before that there was a lot of

14:57

these other kind of declarative type

14:59

tools right. So you have uh you know

15:01

terraform which is a really popular one

15:03

you can define kind of exactly what

15:05

infrastructure you want and and what

15:07

you're doing is you're essentially

15:08

defining the the desired state and then

15:10

the tool kind of applies it and you know

15:12

you've got puppet etc. And so Kubernetes

15:15

has this similar concept right where you

15:18

define what you want your sort of

15:20

infrastructure to look like and the

15:21

internal Kubernetes controllers and

15:23

operators will basically ensure that

15:24

whatever you've asked for always

15:26

applies. So if you say you want, you

15:28

know, three replicas of something, it

15:30

will ensure that there's three like

15:31

replicas of something. And so if one of

15:33

those pods dies, for example, it will

15:34

spin another one up. And so it

15:36

simplifies this process of being able to

15:38

find declarative declaratively kind of

15:41

exactly what what you as a as a sort of

15:43

application team uh need to run your

15:45

your system.

15:46

>> It's fascinating because I I always

15:48

assume that Kubernetes has won the the

15:51

cloud native space and and

15:54

Skyperscalers. Can you tell me a bit

15:56

more about how it's being used on prem

15:59

like some some interesting stories? You

16:00

must have seen some because you said

16:01

that you're working with companies who

16:03

are managing like large on-rem

16:05

Kubernetes or like interesting

16:07

situations.

16:08

>> Yeah, this is one of the nice things

16:09

about working at a company like Octopus,

16:11

right? We we talk to and deal with so

16:13

many different customers and you know,

16:15

everyone's doing things a little bit

16:16

different or they've got slightly

16:17

different needs and requirements. Um,

16:18

and you kind of get exposed to a lot of

16:20

different uh, you know, problems and

16:22

patterns. Um, and it's easy to sometimes

16:24

to get lost in, you know, what people

16:26

are talking about in conferences and

16:27

everyone's saying it's all about cloud

16:28

and this is the, you know, best practice

16:30

and you should be doing this. And the

16:32

reality is, you know, everyone's kind of

16:33

got their own little problems and they

16:34

just want to solve them the way they

16:35

kind of need to solve them. And so some

16:38

of our customers, in fact, a lot of our

16:39

customers will run Kubernetes kind of,

16:41

you know, quote unquote on premise. Um,

16:43

so for example, I was actually talking

16:44

with one

16:45

>> when you say on premise, can you just be

16:47

a bit more clear? Is this a data center

16:49

where they're like renting and

16:50

collocating? Is this actually like I

16:52

have my own data center or is this like

16:54

I actually have my own machines in my

16:56

closet?

16:57

>> Yeah. Yes. And yes, I guess. So,

16:59

>> what even in a closet? That mean I was

17:01

trying to joke there. [laughter]

17:02

>> I'm I'm sure there are still uh teams

17:03

out there that are running, you know,

17:05

the the the core um accounting tools and

17:07

etc. you under under Steve's desk. But

17:10

even when we talk about, you know, um

17:12

small computers, some of our customers

17:13

have um Kubernetes clusters basically in

17:16

their point of sale systems. So they

17:18

have hundreds and hundreds of stores and

17:19

they have little um Kubernetes clusters

17:22

that essentially run in them and each

17:23

one's independent and they you know run

17:25

into their own problems with that

17:26

because particularly at scale when

17:29

you've got you know thousands and

17:30

thousands of clusters um and you know

17:33

these these um customers are you know

17:35

following various GitOps practices etc

17:37

where they're pulling the the actual

17:39

state from from a git repository so the

17:41

git repository itself becomes the

17:42

bottleneck or they start getting

17:44

throttled um and so they have to sort of

17:46

resort to other mechanics to try to um

17:48

sort of mitigate and work around that. I

17:51

was talking to another one of our

17:52

customers um actually just the other day

17:54

at at KCOM there who they are deploying

17:58

they they've got Kubernetes clusters

17:59

running on research vessels and those

18:01

research vessels

18:02

>> research as in

18:03

>> like boats as in

18:05

>> ships on the ocean.

18:07

>> That's right. Um I'm not going to

18:09

pretend to know exactly what they're

18:10

doing on those ships. We didn't quite

18:11

get into that detail, but they've got

18:13

Kubernetes clusters out out in the open

18:15

sea, right? Which is apps given

18:17

Kubernetes name. The problems they run

18:18

into though are a little bit different,

18:20

right? So for them, um, you know, those

18:23

boats might be out at sea for, I don't

18:25

know, weeks, months at a time or

18:26

whatever that might be. So when you want

18:28

to do a deployment that the ship's not

18:29

available. So when that ship comes back

18:31

into port, it needs to get the update,

18:33

right? So they'd be talking to how you

18:34

would how you'd achieve this, right? And

18:36

how that process would work. This is

18:37

super interesting and I love how you

18:39

kind of get a peak into so many

18:41

different types of teams through the

18:43

fact that you know like you're talking

18:44

with them about how they do the

18:45

deployments but you're you probably see

18:47

some other things that they're doing or

18:49

things they're struggling with. What are

18:50

some trends you're seeing across the

18:53

industry in terms of the this wide range

18:56

of companies you work from startups to

18:57

like finance companies to like these

18:59

research vessels?

19:00

>> Yeah, I guess one of the one of the big

19:02

trends these days is a lot of focus on

19:04

on GitOps. So GitOps is this what is

19:06

GitOps?

19:06

>> What is GitOps? That's a that's a good

19:08

question. Go G. Let's take a step back

19:10

for a minute. So you know we mentioned

19:11

we talked about Kubernetes earlier. We

19:14

talked about the fact that it's kind of

19:15

got this internal continuous

19:17

reconciliation process where you say to

19:19

the cluster uh please spin up you know

19:22

five pods and um it takes that desired

19:25

state and it ensures it always sort of

19:26

is true in the in the world. And so

19:28

there was a lot of products around there

19:29

that were doing similar thing. You know

19:30

Terraform does that for infrastructure

19:32

etc. Um and a bunch of people started

19:35

wondering why can't we sort of take that

19:37

process and pull it back further so that

19:40

um not only is Kubernetes just dealing

19:42

with desired state but we can pull it

19:44

sort of directly out of git um and so

19:46

you know I can as as an engineer make

19:49

changes to that uh that git definition

19:50

that um desired state and I'd have some

19:53

process that essentially pushes that to

19:55

the cluster and and ensures that it it

19:57

remains um in in line with what I'm

20:00

asking what I'm expecting and so the

20:02

term githops was coined by um by Weave

20:05

Works in I think it was 2017 or so and

20:07

as a as a general practice it sort of

20:10

started picking up steam particularly in

20:12

in tandem with Kubernetes because at its

20:14

core Kubernetes is is very declarative

20:16

right later on um sort of in the early

20:19

you know 2020s

20:21

um it was kind of formalized a bit more

20:22

and there was sort of four key pillars

20:24

of of GitOps the first being um uh

20:27

essentially declar you want your state

20:28

to be declarative so this is the idea

20:31

that um you want to define what you want

20:33

the state of your infrastructure to look

20:35

like. This is to basically make things a

20:37

lot I guess simpler to to understand

20:39

what the state of the world is going to

20:40

be when a deployment takes place. So if

20:43

you think about um deployments that are

20:46

a bit more imperative that has sort of a

20:48

process, the end result is sort of the

20:50

result of of multiple steps. Um but when

20:53

you're wanting to just update some

20:54

infrastructure, that desired state kind

20:56

of works really well at um particularly

20:58

in in the Kubernetes space. And then in

21:01

GitOps the desired state will be just

21:03

describing like how many nodes I want or

21:06

like how many I don't know replicas do I

21:08

want on a database or how many web

21:10

servers or like load balancer how to be

21:12

connected that kind of stuff.

21:13

>> That that's right. Yeah. So it's it's

21:14

basically a way of being able to say I

21:16

want my infrastructure to have whatever

21:18

state it is

21:20

um and then the the GitOps um agents the

21:23

GitOps um products basically ensure that

21:26

remains the case. So they'll keep

21:28

applying it to Kubernetes. So you've

21:30

kind of got this this um situation where

21:32

Kubernetes keeps its internal status in

21:34

sync with reality and now you've got

21:36

these GitOps tools that take the

21:38

declarative configuration in in sync

21:40

with what Kubernetes is.

21:41

>> So so they will take the whatever I put

21:44

in Git and whatever format I use and

21:46

they kind of translate it into something

21:47

that makes sense for Kubernetes and now

21:48

Kubernetes can apply it.

21:50

>> Yeah. Yeah. I mean, ideally, you want it

21:51

as close as possible to what um sort of

21:53

um I guess Kubernetes is expecting cuz

21:57

>> allows you.

21:58

>> That's right. And so what you're

21:59

describing there, I guess, is the

22:00

continuous reconciliation. And so this

22:02

is the idea that um these these githops

22:05

apps will um essentially as we said sort

22:08

of take that state and apply it and if

22:09

there's any drift from kubernetes side.

22:11

So for example someone um you know runs

22:13

cube control you know delete pod or or a

22:17

delete deployment or whatever the case

22:18

might be

22:19

>> because your desired state is now stored

22:21

in in git in this case that will kind of

22:24

self-rep. Um the second uh pillar of

22:28

githops is that that desired set you've

22:31

sort of defined um should be um stored

22:34

somewhere that's uh immutable and

22:36

versioned. And so this is the idea that

22:38

um once I say that I want to have this

22:40

state, I want to have sort of something

22:42

I can point to a pointer and that might

22:44

be a tag or a commit show or whatever

22:47

and I want to basically use that to

22:49

define what what that actual state

22:51

should be. And I don't want that to be

22:52

able to change, right? Because otherwise

22:53

that kind of defeats half the point. Um

22:56

by having it versioned and immutable, it

22:58

also um makes things like auditing a lot

23:01

simpler, right? You can see the

23:02

transition of that that that desired

23:04

state over time. What's interesting

23:05

though is a lot of people will point to

23:07

that and go yes um version and immutable

23:09

I know what that is that's git

23:11

>> I was about to say that because git

23:13

gives you it definitely gives you

23:15

versioning or it gives you commit

23:16

history I'm not sure if it gives you

23:17

versioning and immutable in the sense

23:19

that I mean the past cannot be changed

23:21

>> that's that's right

23:22

>> or actually can it because you can

23:25

rewrite

23:26

>> history you're right so you depending on

23:28

how you sort of configure your githops

23:31

agent um you know you certainly can

23:33

rewrite history if If you have it

23:35

pointing at a tag, for example, you can

23:36

change tags. And so that's why there's,

23:38

you know, best practices around that.

23:40

Um, I guess kind of, you know, wiggle

23:43

the finger a bit if you're using tags to

23:44

to manage that sort of state. Uh, but

23:47

what's interesting though is really

23:49

nothing in the in these pillars. Um, and

23:52

very quickly, the third one being uh

23:54

pull versus push. And so this is the

23:57

idea that your um your GitOps agent will

23:59

pull the state from GitHub and put or

24:01

git, I should say, and put it into the

24:03

cluster. and the fourth being continuous

24:05

reconciliation. Uh but nothing in any of

24:07

these sort of pillars actually talks

24:08

about git. And I think that the naming

24:10

of githops is kind of um kind of gets

24:14

people to to already have this

24:15

expectation that everything has to be in

24:17

git.

24:17

>> I mean why would you not have that

24:19

expectation? That's what I assumed.

24:21

>> That's right. I think the the problem

24:22

though is um not everything should be in

24:24

in Git, right? So you've got this

24:26

constant kind of conversation within

24:29

that community about you know where do

24:30

you put secrets for example? So no one

24:33

not g no no no no we know that right is

24:35

that do not put it in git

24:37

>> and so that's the thing so you know

24:38

there's been all these solutions to try

24:40

to put it in git so there's things like

24:41

sealed secrets where you encrypt it and

24:43

put it in git um

24:44

>> sounds like a terrible idea

24:45

>> but I guess what's really this is

24:47

highlighting is um the reality that some

24:49

things don't need to be in git right as

24:51

long as you can um have this sort of

24:53

control over the versioning or

24:54

immutability of it um then that's that's

24:57

completely fine

24:58

>> and then the trend around githops is is

25:00

what you're seeing that a lot more infra

25:03

teams are moving from okay a few years

25:05

ago they might have just like made

25:08

definitions for Kubernetes and now

25:10

they're moving over to GitOps so saying

25:11

okay we'd like to control infra in in in

25:14

a tool in a way that's that's described

25:16

that's in version control is that the

25:17

trend or what is the trend around

25:19

githops

25:19

>> um I I guess it's more just the trend of

25:21

of the growth in general of GitOps in in

25:24

um enterprises right so not every uh

25:27

company out there is using Kubernetes

25:28

today um and as they sort

25:31

approached Kubernetes and they're

25:33

looking at well how do I how do I um you

25:35

know perform the deployments how do I

25:36

manage that process gitops becomes the

25:38

sort of deacto process and to some

25:40

extent it is um giving rise to this idea

25:43

of using it to manage um other things

25:45

outside of kubernetes and there are a

25:46

few examples of uh projects and

25:49

experiments that will use things like

25:51

terraform and there's a a continuous

25:52

reconciliation service that keeps your

25:54

your actual state um outside in in sync

25:57

at the moment it's really about the

26:00

focus is on I guess Kubernetes is the

26:02

core core place where it lives. Um and I

26:04

guess it's more the growth of Kubernetes

26:06

itself means that GitOps is is coming

26:08

along for the ride.

26:09

>> And you mentioned enterprises which

26:10

means like these large companies with

26:12

often times thousands of people or in

26:14

regulated environments that's what I

26:15

think of enterprises. Are you also

26:17

seeing smaller teams pick up uh things

26:19

like GitOps? Is it like everywhere or is

26:21

it more there's certain types of teams

26:24

that seem to be just more interested in

26:26

that?

26:26

>> That's a good question. So um I guess

26:28

sometimes what we see is a lot of people

26:31

go go to conferences or they read blog

26:33

posts and they hear that GitOps is what

26:34

you should do. So I guess what I want to

26:37

point out here is um GitHubs is

26:39

potentially not necessary for all all

26:42

locations, all environ all teams, right?

26:44

Um there's certainly a bunch of benefits

26:46

to it, but the reality is there's some

26:48

things you need to do outside of just

26:50

GitOps. You might use GitOps principles

26:52

in parts of your process, but some of

26:54

this absolutism I think that sometimes

26:56

exists uh may not be necessary. So

26:58

there's often a bunch of other processes

27:00

you do around your actual sort of um you

27:03

know, quote unquote deployment. So

27:04

things like maybe you run smoke tests or

27:07

maybe you want to send a notification

27:08

when it's complete or maybe um you want

27:10

to do a a database update or something

27:13

like that. These kind of steps don't

27:14

really lend themselves very well to kind

27:16

of this declarative everything is is in

27:18

git kind of process, right? And so

27:20

that's why you get things like um Argo

27:23

workflows and and and roll outs and

27:25

things come out to try to kind of get

27:27

opsify this this process. And that that

27:30

works for for some people. But the

27:33

reality I guess is that um um I think

27:36

some people get really hung up on this

27:38

idea that that everything is git so

27:40

therefore they they found the tool and

27:42

you know and so therefore everything is

27:43

a nail.

27:44

>> Yeah. I think that's

27:45

>> and this is the thing like talking with

27:46

with customers when we go through this

27:48

process of you know you can use GitOps

27:51

in Octopus um and you know we've got a

27:53

bunch of support for various um

27:55

mechanics that integrate well with

27:57

Kubernetes and Argo but there's a bunch

28:00

of other sort of operations you do

28:01

around that process that that doesn't

28:02

need and when you talk to them about it

28:04

you know they realize that what they're

28:06

trying to do is ultimately just ship

28:07

software so again that difference

28:09

between what you um hear when you talk

28:11

at conferences and things where you know

28:14

everything is everything is git and

28:16

everything must be you know in in this

28:19

particular format or whatever the case

28:20

might be. The reality is for most

28:22

customers they're just trying to ship

28:24

software right and they don't care what

28:25

name you give it. If it's GitOps and it

28:27

works end to end and solves everything

28:28

good. If they want to use GitOps as part

28:30

of the process but then have other

28:32

mechanics that are more sort of

28:33

imperative um then then good. It's just

28:36

sort of the reality of, you know,

28:37

there's there's tens and tens of

28:39

thousands of companies out there in the

28:41

world that are doing software delivery.

28:43

Um, and not all of them that are at

28:45

conferences and not all them are at the

28:46

the forefront. I guess

28:47

>> as Rob says, most teams don't care

28:49

whether you call it GitOps or anything

28:50

else. They just want to ship software

28:52

and know that it works. Our presenting

28:54

sponsor, Anticys, does exactly that. Is

28:57

let you ship knowing that it works.

28:59

Antithesis goes beyond code review. It

29:01

runs your whole system inside a hostile

29:04

simulation. By doing so, it finds every

29:06

bug before your users do. And because

29:09

the simulation is fully deterministic,

29:11

antithesis doesn't only find bugs, it

29:14

gives you a perfect reproduction of

29:15

every issue. I know this sounds like

29:17

science fiction, but it's actually

29:19

hardcore engineering under the hood.

29:21

Jane Streetfly.io and the CD community

29:23

ship agent written code with full

29:25

confidence because they know it's been

29:27

verified by antithesis. To see more case

29:29

studies and details, head to

29:30

antithesis.com/pragmatic.

29:33

That's antithesis.com/pragmatic.

29:36

I also want to mention our season

29:38

sponsor, Turbopuffer. Turbopuffer is

29:40

exactly the thing that just works. A

29:42

vector and full text search engine built

29:44

on object storage. Fast, cheap, and

29:45

extremely scalable. No exotic

29:47

architecture required. Here's something

29:49

I find interesting. The teams building

29:51

the smartest AI products out there,

29:53

cursor, notion, cognition, and tropic.

29:55

They all run on turbo buffer. But why?

29:58

Let's think about it. and LM without

30:01

context, it can feel pretty dumb. I can

30:03

still remember shortly after CantBT

30:05

launched early 2023, how it felt both

30:07

incredibly smart but also frustratingly

30:10

stupid. If you asked it a question that

30:12

was outside his training data, it just

30:13

made things up. Fast forward to today

30:16

and the models and their tools for

30:17

retrieving context are much better, but

30:19

hallucinations still happen frequently.

30:21

Here's a typical way to integrate

30:23

Turbuffer with an LM. Plug it behind

30:25

your search tools, get fast responses

30:27

and relevant context back. The neat

30:29

thing is how it gives you the perfect

30:31

blend of lowcost storage, fast

30:33

retrieval, and a bunch of different

30:34

search tools like vector, full text, and

30:36

filtering. You can afford to index

30:38

billions of documents, and then you can

30:39

query it with different tools to get the

30:41

most relevant handful of documents in

30:43

milliseconds. This is how your LM feels

30:46

smart. It gets the right context really

30:48

fast without blowing through a bunch of

30:49

tokens. Of course, you can use

30:50

Turbopuffer to search anything, not just

30:52

code. If you're building AI products,

30:54

check out Turbopuffer at

30:55

turbopuffer.com/pragmatic.

30:58

With this, let's get back to Rob and

31:00

talk about progressive delivery.

31:02

>> Yeah. Another trend that we talked about

31:05

just before is the rise of platform

31:07

teams. Can you talk about what you're

31:08

seeing?

31:09

>> So, platform teams are kind of I I guess

31:12

in the past several years, they've

31:14

become this sort of new standard

31:16

organizational structure to help teams

31:18

manage their I guess deployment

31:21

workflows, the a bunch of the

31:22

infrastructure around it. And it's kind

31:24

of come out of this evolution of of de

31:26

DevOps, right? So, you know, we

31:28

mentioned before in the old days, you'd

31:30

write a bit of code um and you'd throw

31:33

it over the wall to the ops team. So, it

31:34

was dev teams and ops teams and you

31:36

>> this was like in the 2010s, 2000s

31:39

>> back in the back in the long long ago.

31:41

Um and then DevOps became, you know, the

31:42

the practice that everyone sort of

31:44

realized that actually we want to have

31:46

the the engineering teams be involved in

31:48

and have ownership of part of that that

31:50

operational um process. idea being, you

31:54

know, you get faster feedback loops. You

31:56

are able to kind of if you feel the

31:59

pain, you you sort of fix, you know,

32:00

it's that saying, you know, you fix it,

32:01

you ship it. Um, you know, we've all

32:03

kind of heard that. And so, um, a lot of

32:06

teams, you know, took that to heart.

32:08

That's that's good, great, uh, good

32:10

practice. But as things start to scale

32:12

up, what you'd find is that there would

32:14

end up being like a DevOps team again,

32:16

and sometimes sometimes they're separate

32:18

to another ops team. And so there'd be

32:20

this separation of of um development and

32:24

DevOps. And it kind of goes against some

32:26

of the principles of what DevOps was,

32:29

you know, trying to destroy. But not

32:31

only that, these teams then um end up um

32:34

having lots of different ways of doing

32:35

their um deployment. So you know, you've

32:37

got every single, you know, a whole

32:38

bunch of application teams and they've

32:39

all got slightly different requirements

32:40

and they're all building it from

32:41

scratch. And so you'd end up with these

32:43

these teams either whether you had the

32:45

DevOps teams or it was still within the

32:46

application teams where um there was

32:49

just this this um large number of

32:52

different ways of doing things, right?

32:54

And that becomes difficult at scale. So

32:57

um you know you can't really move

32:59

between teams

33:00

>> and and by scale you mean typically when

33:02

there's a lot of teams, right? That's

33:03

the easiest.

33:04

>> Yeah, that's right. If you got if you

33:05

got lots of lots of teams and each one

33:06

is kind of owning that process end to

33:08

end, you know, you sort of get this

33:10

bifocation of processes and not only

33:12

that the application teams themselves

33:13

start kind of getting this this um

33:16

context overload, right? They now need

33:18

to think about what's be best practices

33:20

of of the different cloud um tools.

33:22

>> Yeah. And there's of of devs rarely want

33:26

to configure the deployment scripts and

33:30

test them and testing is hard. It's you

33:32

can't it's not really unit testable. So

33:34

it's it's now a different job. I

33:35

remember when I was on earlier teams

33:37

where you know like typically on a

33:38

mobile team like you have a you have a

33:40

mobile team of five people and one of

33:41

them one of us had to kind of specialize

33:43

in Jenkins configurations because

33:45

Jenkins is often times the or used to be

33:47

the mobile CI/CD and it's kind of like

33:49

half a person dedicated to that and it

33:52

was more like draw you like we had to

33:53

draw a stick on who's going to do it

33:55

because we want to build

33:56

>> you want to write code right you just

33:57

want to focus on writing code and so if

33:58

you're spending a bunch of your time

34:00

sort of managing infrastructure and

34:01

pipelines and things um you know that

34:03

that's no fun for anyone

34:05

Um and so platform teams have come about

34:07

as a new way of solving that problem

34:10

where it's different to kind of you know

34:12

this idea of a devops team or ops team

34:14

that kind of own the whole process. they

34:16

they more sort of define best practices

34:18

and they provide a um ideally a

34:20

self-service mechanism where application

34:22

teams can um essentially use um often

34:26

what it's called as an IDP an internal

34:28

development portal and they'll be able

34:29

to essentially self-service and you know

34:31

maybe they want to spin up a new project

34:32

and they're able to use a template that

34:34

the platform team have generated and so

34:36

the platform team are able to sort of

34:37

create these standards throughout the

34:39

throughout the company and they can be

34:41

responsible for sort of I guess the

34:43

definitions of those pro processes and

34:45

the best practices and how to achieve

34:47

that. Um, but the ownership of the the

34:49

actual running operational sort of

34:52

element is still within the teams,

34:54

right? So, they still get those benefits

34:56

of of of, you know, DevOps, being close

34:58

to the close to the real code and and

35:00

feeling the pain if there's a problem

35:02

and etc., etc., etc., but they don't

35:04

need to spend all that time becoming

35:06

experts in um, you know, all the

35:08

different ways that you can deploy the

35:10

software they've got. And so this has

35:12

become um really common now where

35:15

particularly as you sort of get to a

35:17

larger size platform teams are a great

35:19

way of of solving that problem. Now um

35:22

that's not to say that every company

35:24

everywhere should have a platform team.

35:26

You know if you're a smaller company

35:27

sometimes it's you you've just got the

35:29

apps team and and they sort of are doing

35:31

you know quote unquote DevOps. Um but

35:33

this is certainly something that as as

35:35

you sort of start seeing larger

35:37

organizations with multiple teams or

35:39

multiple projects, these platform teams

35:41

are a way of basically bringing some

35:43

some sanity and control and focus I

35:45

guess to to the whole space.

35:47

>> One trend across the industry of course

35:49

is AI. Everyone's it's hard to see any

35:53

teams where devs are not using AI agents

35:56

specifically to code. you know product

35:58

managers will will be using these things

36:00

and of course we have a lot more code

36:02

produced as a result when it comes to

36:05

CI/CD systems what are you seeing

36:09

changing there because of AI

36:11

>> this is the this is the uh the elephant

36:14

in the room right the how is AI

36:16

affecting sort of this the reality is I

36:18

think to be honest it's it's still very

36:20

early I think what will happen is the

36:22

impacts of CI/CD

36:24

um are really tightly coupled to how

36:26

development teams end up using AI. So

36:28

there's going to be some sort of like um

36:31

I guess a lagging process there. But

36:33

we're finding a lot of um people a lot

36:35

of teams are starting to use AI in their

36:37

development process. And so we're

36:38

starting this process of going out and

36:40

looking and talking to customers and and

36:42

learning what's the way that they're

36:43

handling AI in their um in their in

36:46

their teams and their application teams

36:48

and then how we can best leverage sort

36:50

of the CI side to um to support that.

36:53

but then um in addition to that use AI

36:55

within the the pipeline itself get in

36:58

the right place. So one of the things

36:59

we've been um I think pretty pretty um

37:03

keen on at Octopus is this idea that um

37:08

you know at CubeCon we were probably one

37:10

of the few companies that that didn't

37:11

have you know AI plastered all over it.

37:13

Like we we tried to be very you know

37:16

that's that's what gets the sales right.

37:17

>> Yeah. That's you stand out now these

37:19

days.

37:20

>> That's right. By not having AI. Um, I

37:22

mean we we've got AI in Octopus, but

37:23

what we've been trying to do is think

37:24

about, well, how do we actually use it

37:26

in a way that's actually useful for for

37:28

for our customers, right, for for

37:30

engineers, etc. Um, and so we've been

37:32

slowly adding capabilities within

37:33

Octopus to provide um, you know, AI

37:36

support, whether it's a MCP server, uh,

37:40

whether it's a a recovery agent that can

37:42

review logs and tasks and all that sort

37:44

of thing. But that's within the product

37:45

itself. Some of the bigger changes will

37:48

depend on like I said how how actual

37:50

application teams um use use AI. What I

37:54

think you know we're talking about we'll

37:57

find is there's going to be a lot more

37:58

velocity. I think that's one of the big

37:59

big changes right is there's just going

38:01

to be a lot more code coming through. I

38:03

think one of the questions is okay what

38:04

does that mean for your pipeline? Um one

38:07

of the things you often talk about when

38:09

you know human there's a human element

38:11

to the pipeline is speeding up the cycle

38:14

to get that feedback quicker. You know,

38:16

if you got engineers sitting there

38:17

waiting for their code to run tests,

38:19

they can get back to it and fix it, the

38:21

the shorter and shorter you can make

38:23

that feedback loop, the the better it

38:25

becomes because they don't need a

38:26

context switch, etc. I think in a world

38:28

where the majority of your code is being

38:29

developed by AI, that becomes perhaps

38:31

less important. you know, if you can um

38:34

kick out your your build and test

38:36

process um and it takes 30 minutes

38:39

versus 20 minutes, does it really matter

38:41

if the engineers are already long gone,

38:43

moved on to the next problem and the the

38:45

actual AI agent themselves itself can

38:47

kind of babysit the process and review

38:49

the problem that came up and issue a new

38:51

fix. I guess there'll be a deemphasis, I

38:53

think, on some of the speed of the

38:54

pipeline itself and more on increasing

38:57

sort of um or decreasing risk, right?

39:00

the risk that comes from having AI items

39:02

generate code. And so exactly what that

39:04

process looks like, I guess, remains to

39:06

be seen. I think what we'll see a lot

39:08

more use of is things like progressive

39:10

delivery. And I think particularly

39:12

feature toggles um are going to be a

39:14

really common tool in in the tool belt

39:16

of application teams. Partly because it

39:18

allows you to ship that code as as fast

39:20

as you can or as fast as you want, but

39:22

manage the roll out of the actual

39:24

feature set or changes sort of

39:26

independent of the deployment. sort of

39:28

decouples your deployment from from your

39:30

release. And so in a world where you

39:32

know we've got a lot more AI agents

39:35

generating code and being involved in

39:36

perhaps part of the build process, those

39:38

agents themselves being able to use

39:40

toggles to react to it quickly, I think

39:43

then become a lot more important um than

39:45

perhaps what we see today.

39:46

>> Can we talk about progressive delivery?

39:50

what it is and what are the most common

39:53

ways to you know like to to derisk

39:56

getting your code or your software out

39:58

there.

39:58

>> So progressive delivery is the next

40:01

evolution beyond continuous delivery. Um

40:03

so you know with continuous delivery

40:05

it's this idea that you know I've made a

40:07

change to the system and I want to ship

40:08

it to um dev or stage or typically you

40:12

know if it gets to production sort of in

40:14

one hit right with progressive delivery

40:17

um you're what you're trying to do is

40:19

basically release those changes in a

40:21

little bit more of a controlled way

40:22

typically through things like a canary

40:25

deployment. So this is where you might

40:26

deploy just some subset of of your

40:29

instances that are out there.

40:30

>> So what is a canary? What is a canary?

40:33

Um Canary deployment is this is New

40:36

Zealand basically. New Zealand's our

40:38

canary. So this is as we said before

40:40

this idea where um you select some

40:42

subset of your your customer base or or

40:45

whatever that might be and you would

40:47

typically route traffic to a new

40:49

instance. So you'd ship you know you've

40:50

got version one running and you want to

40:52

release version two. You essentially

40:54

ship version two side by side and you

40:57

might use, you know, most common one

40:59

would be some sort of network um traffic

41:01

manager to route some percentage of your

41:03

traffic to to that new instance and you

41:05

gradually roll that up. Typically, you

41:07

know, as you do sort of do this process

41:10

properly, you you should have a fairly

41:12

mature um observability um mechanisms in

41:15

place to see that, you know, you can

41:16

roll up or roll down.

41:17

>> And I guess this whole thing comes from

41:18

a canary in a coal mine, right?

41:20

>> That's right. Yeah. Yeah. So the idea

41:22

being that um you know in the old days

41:24

when you'd be in a coal mine digging

41:25

away and it would release um you know

41:27

all sorts of toxic fumes and things like

41:29

that canaries were um a lot more

41:31

sensitive to it. So they have a little

41:33

canary in a pa cage um and if that

41:36

canary sort of died I guess got knocked

41:38

down.

41:38

>> I I think the canaries as I understand

41:40

they were like chirping

41:42

>> and then

41:44

when it stopped chirping well it also

41:45

died.

41:46

>> Oh okay.

41:47

All right. Same same ending. Same

41:49

ending, but just, you know, a nicer a

41:51

nicer way to go out.

41:52

>> They need to get out.

41:53

>> Yeah. So, it's this idea that you get

41:54

that advanced warning, I guess, that you

41:56

know, rather than you getting knocked

41:58

out by the the toxic gases, etc. Um, you

42:02

know, you can get out of there sooner.

42:03

So, it's that same principle, I guess,

42:05

brought to the software. Um, there's

42:07

various other mechanisms like blue green

42:09

deployments. So you've got your first

42:11

version there still receiving traffic

42:12

and your second version is up and

42:14

running and you can now do some tests

42:16

against it, validate it. Maybe you've

42:18

got sort of the the the um you know the

42:20

IP details to access it directly. You

42:22

can basically validate that it's

42:23

working. Um sometimes there may be a way

42:26

of avoiding cold starts and things

42:28

because that process may need to you

42:29

know initialize a bunch of stuff but

42:31

then when you've sort of done that

42:32

validation and you're ready you can

42:34

essentially swap swap traffic around. So

42:35

all the all the new traffic goes the

42:37

other. In some ways, it's like doing a

42:38

canary but straight to 100% but you're

42:40

doing a bunch of validation um sort of

42:43

on on the side before it actually

42:44

reaches customers. In my in my view,

42:46

probably the more um useful uh

42:49

progressive delivery strategy is is

42:51

feature toggles. So, this is the idea

42:53

that you you've got some sort of

42:54

>> feature flags as well.

42:55

>> Feature flags toggles the same thing.

42:57

>> Yeah. Often used interchangeably. Um so,

42:59

this is the idea that you've got, you

43:01

know, some sort of uh variable in your

43:03

system. um and it's linked to typically

43:06

some sort of external service and

43:07

through the state of that particular

43:09

variable being sort of true or false on

43:10

or off um you can essentially have

43:13

different code paths essentially take

43:14

effect and there's a bunch of benefits

43:16

that feature toggles have over say

43:19

canary um releases particularly for

43:21

application um delivery where you know

43:26

the the your unit of change with a

43:28

feature toggle is is very granular. it

43:30

can be, you know, single lines of code

43:32

and so everything else remains the same

43:34

and all you're doing is is tweaking that

43:35

single line of code with a canary or any

43:38

sort of versioned sort of delivery

43:40

deployment mechanism. Um, your unit of

43:43

change is the entire app. So if you've

43:44

had, you know, 20 commits since uh the

43:47

last sort of release went out, then

43:49

you're essentially testing all 20 things

43:51

in that one hit. Your ability to sort of

43:54

target the actual customers, it's a lot

43:56

more precise when you're using feature

43:57

toggles. So you can you know use all

43:58

sorts of complex rules um and say that I

44:01

don't know everyone from Germany who has

44:04

this particular product in their basket

44:06

um has this kind of experience and

44:08

that's you know really hard to do via

44:10

network traffic rules right the other is

44:12

your ability then to to actually roll

44:15

back um so to roll back from a canary um

44:20

hopefully you're still in the process

44:21

where you're sort of going through that

44:22

canary you know process and you can roll

44:24

it back um that could take you know

44:26

minutes Maybe you have to redeploy the

44:28

whole old old version. That could be

44:29

minutes or or more. With a feature

44:31

toggle, you know, you can do that in

44:33

seconds. That's pressing a button and it

44:34

happens immediately. Not only that, but

44:36

you've kind of you've got more control,

44:38

I guess, on when you sort of do that.

44:40

So, with the with a deployment that

44:42

you're doing um via via a standard

44:46

versioned release, you're sort of tied

44:48

to when that deployment takes place

44:49

because when it takes place, that's when

44:51

essentially your new feature is

44:52

available. And as an application team,

44:53

that means you need to know about

44:55

exactly when it's taking place and make

44:56

sure you're watching the logs at that

44:58

point. And maybe you and 10 other teams

45:00

who are shipping things at the same time

45:02

um are all doing the same thing. Whereas

45:04

with feature flags, your control, you

45:06

basically got control over when that

45:08

takes place. So you might ship the

45:09

actual, you know, the assemblies and and

45:11

that sort of thing on the Monday, but

45:12

you release your feature on on Tuesday

45:15

when you come in and you you can you've

45:17

got the logs ready and you you've kind

45:19

of reviewed what the next steps are. So

45:21

this really makes things a lot easier to

45:23

decouple releasing a feature from from

45:25

deploying software. You know version

45:27

deployments uh through Canary etc.

45:29

They're really useful uh particularly if

45:32

you're doing like infrastructure type

45:33

changes where there is no kind of

45:36

application toggle that's that's

45:37

relevant there but you want to violate

45:39

some changes to your infrastructure or

45:40

your your process or potentially you

45:43

know things like um things that will

45:45

involve um schema changes and schema

45:47

changes are the big

45:49

>> list schema change that's this is the

45:52

big problem in any like to be fair in

45:54

any um progressive delivery um and this

45:57

is why you know the question always is

45:59

are you ready for progressive delivery?

46:01

Um to do schema changes. I guess this is

46:03

the point that um application teams kind

46:06

of need to be really mature and I don't

46:08

mean mature in terms of you know not

46:10

telling silly jokes but mature in terms

46:11

of understand all the problems are in

46:13

place with this and know how to release

46:16

these sort of changes in a gradual

46:18

controlled fashion and do it over

46:20

multiple stages that you know ironically

46:23

is actually quite hard for us um at

46:24

Oculus because our software is both SAS

46:28

hosted so we have a a SAS offering that

46:30

customers can use and we have an

46:31

on-remise vision and there's kind of

46:34

because we have both both sides um we

46:37

kind of have the best and worst of both

46:39

worlds you know in the cloud system if

46:41

you've got um a SAS product you have

46:44

complete control over what versions go

46:45

where so if you want to do an expand and

46:47

contract you can stage the whole process

46:49

you know that it's all been updated

46:50

before you kind of move to the next

46:51

stage on the other hand for a

46:53

self-hosted um application where they go

46:55

in and they install it on their own

46:57

infrastructure somewhere you don't know

46:58

what version they're running and what

46:59

they're coming from so they might

47:00

upgrade from version one straight to

47:02

version six. Um, and so you're not

47:04

really forcing them to go through that

47:06

expand and contract phase. On the other

47:08

hand, um, you know, they've got a lot

47:09

more control over when they upgrade. And

47:11

so you can kind of be a little bit more

47:13

deliberate about, you know, making sure

47:15

that they do backups before they change

47:17

and and, you know, maybe the down maybe

47:19

they can manage that migration and

47:21

accept a little bit more um downtime

47:23

during migrations and updates and things

47:25

like that than would actually be, you

47:27

know, acceptable in in a SAS product. So

47:29

one thing about you know we talked about

47:31

progressive delivery and you're kind of

47:33

doing this to avoid surprises you know

47:38

if if a regression goes out a new bug or

47:41

something doesn't work you kind of want

47:42

to c catch it early hopefully only a few

47:44

customers have experienced it or even if

47:47

it's not 100% you kind of and and and

47:49

you have a way to go back uh to all you

47:52

do is you you if it's a feature flag you

47:54

you hide it if it's if it's a canary

47:56

deployment you go back to the other one

47:58

>> but There's also this thing where like

48:00

when things do go wrong at some point

48:02

you want to do a roll back. Can we talk

48:04

about

48:06

how have you seen roll backs done well

48:09

and what does it take to actually have a

48:11

real roll back strategy? Bunch of people

48:12

talk about CI/CD. Some people talk about

48:14

feature flags. I don't hear too much

48:16

chatter about roll backs.

48:17

>> Yeah, roll backs. This is always a spicy

48:19

one. We get a lot of customers who say,

48:21

"Why don't you have a roll back button?

48:22

I want to roll things back. Why can't we

48:24

roll things back?" as as as in the

48:25

deployment software like Octopus or

48:27

anything else they like okay if it can

48:29

deploy I want to like do checkoint and

48:32

and like just just do a roll back

48:33

>> that's right how hard could it be just

48:34

do what you

48:35

>> how could it be tell me

48:36

>> how could it be well this is the the

48:37

problem right so um in a completely

48:39

stateless system that's you know pretty

48:41

straightforward if you've got a

48:42

completely stateless system and you know

48:45

this is something that githops is really

48:46

good at where you'll have that

48:47

definition sort somewhere in your repo

48:49

if it's completely state stateless you

48:50

can do a um a git revert and push it and

48:54

it'll go back.

48:55

>> The reality is for most systems out

48:57

there, you've probably got some state

48:59

>> state being

48:59

>> state being databases. It could be um

49:02

you know any sort of any sort of

49:04

information that you can't necessarily

49:06

just kind of undo I guess because if you

49:08

roll it back and now you've got your

49:10

code talking with the schema of the

49:11

database that's not in sync you can uh

49:14

provide schema uh if you've got a schema

49:18

migration let's say in a normal

49:19

deployment you can provide alongside

49:21

that a secondary sort of anti-migration

49:24

that kind of undoes the change but again

49:26

that's not always possible. you need to

49:28

do is what are you going to do with that

49:29

data set?

49:31

>> We we've gotten pretty far in basically

49:32

trying to um advise customers that you

49:35

never you want to avoid ever talking

49:37

about roll back. It's always roll

49:38

forward.

49:39

>> So if there's a bug,

49:40

>> okay,

49:41

>> roll forward. Get a change. Yeah. Get

49:43

get your change in um as soon as

49:45

possible. This is where fast feedback

49:46

loops are important, right? You know,

49:48

this is what the hot fix processes are

49:49

for, right? So we all know that in a

49:52

standard process you want to go

49:53

devstaging prod and maybe it's maybe

49:55

you've got you know um approval

49:57

processes and slows down etc. But if

49:59

you've got a sign significant bug that

50:00

you need to kind of quote unquote roll

50:03

back sometimes the the safest thing to

50:05

do is actually make a hot fix to that

50:06

that version and and push it out sort of

50:08

as quick as possible and your bottleneck

50:10

might be the the build pipeline or

50:12

whatever but depending on sort of your

50:14

appetite for risk there you can resolve

50:15

that sort of a lot quicker. Now

50:17

obviously if you if the failure itself

50:18

is just from some um mechanism in the

50:22

deployment process itself or somewhere

50:24

further down that chain then your your

50:26

time to recover is going to be a lot

50:27

quicker. But it's this idea that you

50:29

know if I've got a failure in version um

50:32

version two my roll back isn't to go to

50:35

version one. It's to go to version three

50:36

and make sure I've got that fix in in

50:38

version three. It's the sort of thing

50:40

that um you know when we we talk to

50:42

customers and some of them go yeah we

50:44

roll back you know we roll back all the

50:46

time if there's a problem and then when

50:47

you ask them what do you do if you've

50:48

got a schema change they kind of stop

50:50

and and realize that they've never it's

50:52

just sheer luck that they've never sort

50:54

of run into that right

50:55

>> is it fair to say that you want to roll

50:57

forward if it involves business logic or

51:00

something that is not stateless because

51:01

if if it is stateless or if it's

51:03

application logic you know you have a

51:05

code that says if this else then and you

51:07

realize there's a bug where you can just

51:09

revert it as long as it doesn't, you

51:11

know, touch the the schema or or the the

51:13

data.

51:14

>> Yeah. I mean, in an ideal world, you're

51:16

reverting is through a feature flag,

51:18

right, that you click and you're

51:19

essentially reverting by changing the

51:20

code path. And this is why I always say

51:22

um feature flags. So, kind of a nice a

51:25

nice tool to use for um doing this

51:27

progressive delivery because, you know,

51:29

it's just as easy just as easy it is to

51:30

roll out that feature. You can typically

51:33

roll it back. Now, you're still going to

51:34

have some of those problems with schema

51:36

issues, etc. If you know if you're

51:38

making a change and you've got parts of

51:39

your code path that expect one and not

51:41

the other, you're going to need to

51:42

account for that.

51:43

>> But you can even account for that inside

51:44

the feature flag.

51:45

>> That's right. Yeah. So that that's the

51:46

way you sort of ideally sort of manage

51:49

that so that within regards to which

51:50

path you go down the feature flag, it's

51:52

kind of self-consistent with whatever

51:54

version of the actual sort of database

51:56

schema that's out there.

51:57

>> So I guess the more feature flags you

51:59

use, the fewer surprises you might have,

52:01

but it's a bit of extra work both to

52:03

build and also to remove.

52:04

>> Yeah.

52:05

you you get stuck with still feature

52:07

flags all across your codebase once you

52:09

start to use a lot. I saw this at Uber.

52:11

>> Yes. Yes. 100 times. Yes. So when you've

52:13

adding a feature toggle to your um app

52:15

itself. Um so we at Ocus we obviously

52:18

use feature toggles in our code quite a

52:19

lot and we use open feature as like the

52:22

um the the framework the SDK to interact

52:24

with it. But we essentially have built a

52:26

wrapper around it where um the the

52:30

toggle itself within the code is um sort

52:33

of we provide some details about which

52:35

team owns it um and that team sets an

52:38

expiry on it. Now the expiry itself when

52:40

that time passes nothing bad will happen

52:42

but through parts of the CI process if

52:45

that time has passed we can send a

52:46

notification to that team and say hey it

52:48

looks like this toggle is no longer

52:50

used. So the specific mechanics don't

52:52

matter as much, but it's more a matter

52:54

of making sure that, you know, if you're

52:57

adding feature toggles, it's really easy

52:58

to forget about it because you start

53:00

rolling it out and you kind of forget

53:01

about it. And you know, you want to keep

53:03

it in there just in case for a while in

53:04

case you need to roll it back. And

53:06

having the ability to understand how

53:08

long a toggle has been there, um, is a

53:10

is kind of a key part of helping to

53:12

maintain that that hygiene. Now the

53:14

reality is even at Octopus we've got a

53:16

bunch in I know I've got a bunch in

53:17

there that um I'm sure if I was to log

53:20

in I'd probably get a bunch of

53:21

notifications to remove you know when we

53:23

use that gardening metaphor in code

53:25

right this is this is one of those sort

53:26

of operations this is weeding right you

53:28

need to just kind of keep on top of it

53:29

there are some mechanisms around even in

53:31

in lie of the AI side which will um you

53:34

know ideally if you're using feature

53:36

toggles you you probably got a bunch of

53:37

um observability and metrics and logging

53:39

around it and there are some system some

53:42

tools out there that will allow you to

53:43

keep track of when the last time a

53:45

toggle was kind of evaluated. Um, and

53:47

that kind of gives you that that signal.

53:49

Um, similarly, you know, you might

53:50

remove it from the code because

53:52

typically when you want to remove a

53:53

feature toggle, you want to remove from

53:54

the code first before you touch your

53:55

actual sort of toggle system. And so

53:58

having a mechanism so that once you

53:59

remove for it from the code, um, you

54:02

know, it might take two weeks before it

54:03

makes all the way out into production.

54:04

So you don't want to delete it before

54:05

then, by that time you've kind of

54:07

forgotten about the fact you removed it.

54:08

Oh yeah. Um and so having mechanisms

54:10

that will keep track of that change I

54:13

guess going through the system um and

54:15

when it reaches the environment where um

54:17

you know production where it's actually

54:18

being used can kind of show okay that

54:20

code's gone out that's you know remove

54:21

the toggle it's it's fine and safe to

54:23

actually remove the configuration

54:25

because you've got that feature toggle

54:27

information in two places right you've

54:28

got it in the code and you've got it in

54:29

your your your your platform

54:31

>> can we talk about how development

54:33

environments evolve we talked about

54:35

CI/CD but I'm interested more in you

54:38

know you you go from like you have one

54:40

environment later you might have staging

54:44

or something and what evolution have you

54:46

seen across the all the teams that you

54:48

work with all these hundreds or

54:50

thousands of teams

54:52

>> yeah I'm not sure if there is one

54:55

particular pattern there I mean I think

54:58

you know most most common is you know

54:59

dev test prod um

55:01

>> so these three different environments

55:03

>> yeah and I mean even that I think is

55:05

probably a a a gross simplification of

55:07

all the kind of

55:09

>> and dev meaning my local machine.

55:11

>> Dev in the case of CD is often like the

55:14

the first point of integration. So it's

55:16

kind of um test often customers will

55:18

keep test kind of reasonably in sync

55:21

with let's say production or some sort

55:22

of sanitized data source. So that way

55:25

that whether it's the QA testers or the

55:27

um product team or whatever can go and

55:29

review the code. dev is almost like the

55:32

first po point of of of integration that

55:34

is it actually is the deployment process

55:36

just at its core actually working or is

55:37

anything fundamentally broken at all. I

55:40

think more and more now we're finding

55:41

that dev is less useful um in that

55:45

respect and what we're seeing is more

55:47

the um growth of things like ephemeral

55:50

environments and so this is the idea

55:51

that you know I as an engineer I'm

55:53

running some sort of feature on a

55:54

feature branch

55:56

um and I want to kind of evaluate that

56:00

it's actually doing what it what we're

56:02

expecting it to do but not only that I

56:03

need I want the rest of my team to be

56:05

able to see it working and um you know

56:07

if I've got it running on my machine

56:08

it's not exactly easy to sort of um yeah

56:11

give other people access I guess and

56:13

then I want to move I may want to you

56:15

know completely context change move on

56:16

to something something completely

56:18

different. So ephemeral ephemeral

56:20

environments is this idea that from my

56:22

my branch premerge I want to spin up a

56:25

whole environment um essentially from

56:27

scratch ideally with with whatever

56:29

dependencies are required to sort of run

56:31

this particular component that I've been

56:33

building. Um, and then I want to

56:35

basically deploy my um, app into that as

56:38

if it was a normal full-fledged

56:39

environment. Um, as once that's

56:42

available, I want to sort of have access

56:44

to, you know, if it's a web app, maybe

56:45

it gives me the URL and I can poke

56:47

around it and hand it around and and

56:49

other people can kind of evaluate. And

56:51

then the moment I kind of merge that PR,

56:54

tear it down again. You know, it's quite

56:55

common to have multiple test

56:57

environments because, you know, I've got

56:59

a lot of stuff going through my pipeline

57:00

and I've got three testers. So, let's

57:02

have three environments. Uh so they can

57:04

all sort of have one at once or often

57:06

you'll see a single test environment and

57:08

a bunch of tests and they all kind of

57:10

need to to um collaborate to see who's

57:12

got access to the system at the moment

57:14

etc etc. Whereas with ephemeral

57:15

ephemeral environments it doesn't roll

57:17

off the tongue. With ephemeral

57:19

environments you can um essentially have

57:22

a a full-fledged deployment per per

57:24

feature. And so again, that's about

57:27

speeding up that that feedback process,

57:29

right? Again, all these processes are

57:31

all about speeding up that feedback

57:33

process to get the the the catch those

57:36

failures or issues or or bugs or

57:37

whatever. So sooner. There was a time a

57:39

few years ago where cloud development

57:41

environments were really talked about a

57:43

lot which was the idea is as a developer

57:46

you have an environment spin up in the

57:47

cloud you're let's say your your visual

57:50

studio code connects to it or or maybe

57:51

you just log in online and it spins up

57:54

all the dependencies often times done

57:56

with containers which reminds me of this

57:59

as well and there's also like like

58:00

preview environments but somehow it

58:02

feels that both that discussion and this

58:04

one kind of died down maybe it's AI

58:06

maybe it's something else But I mean the

58:08

technology is there, right? We have

58:09

containers. It's you can you can package

58:11

things together. It's it's I'm sure it

58:13

depends, but it's all doable.

58:16

>> Yeah, it does get tricky. It's this is

58:18

again one of those sort of things that's

58:19

really easy to talk about. Um for simple

58:22

cases, it it can get tricky when you

58:24

know what if I've got more than just a

58:26

single app in my kind of quote unquote

58:28

environment and how do I make sure it's

58:30

got all the data I need to validate. So

58:31

it can get tricky. So

58:32

>> or if you have a bunch of services that

58:34

have state.

58:35

>> That's right. Exactly. So um there are

58:37

sort of complications that it does bring

58:39

but the I guess the the benefits that

58:41

you get as a as an application team um

58:44

particularly you know application team

58:46

where you've still got engineers writing

58:47

code um is is sort of speeding up that

58:51

that feedback process I guess. Well, now

58:53

with with AI agents everywhere, that's

58:55

even better cuz uh in a sense that if

58:58

one of the best ways to validate, you

58:59

know, we have code reviews and AI agent

59:01

generates and you look at the code, but

59:02

isn't it not better to just confirm that

59:04

this thing works, especially when it has

59:07

a UI?

59:08

>> That's right. I think even in that world

59:09

where you've got AI AI agents kind of

59:11

building the code and validating the

59:12

code any sort of uh scenario where you

59:15

want that AI agent to kind of validate

59:17

what it's done um you're essentially

59:19

talking about ephemeral environments

59:20

even if it's not exposed to people

59:22

because it's doing its own testing and

59:23

poking around um in whatever shape or

59:26

form um that it's doing that still is I

59:29

guess one of these kind of environments

59:31

right it it's ephemeral it spins up

59:33

you've got some sort of provisioning

59:34

process um and then ideally once the

59:37

job's done you just kind of tear it

59:38

down.

59:39

>> I'm interested in learning more about

59:41

the reality of operating a large

59:43

infrastructure platform and you know one

59:45

big one you're working on is actually

59:46

Octopus deploys SAS offering. How does

59:49

that look like and what are the

59:51

challenges of of you know like running

59:53

something where you're running all of

59:54

these deploy processes all all these CD

59:57

you probably have a bunch of different

59:59

things. What is it like?

60:01

So um at the m at the moment I'm not on

60:04

the team that sort of builds that but I

60:05

can give some of the the context I guess

60:07

from history and kind of um context

60:09

there. Originally when we first sort of

60:11

decided to sort of provide a Octopus SAS

60:14

offering um I don't know I think it was

60:17

2020 or something like that. It was all

60:19

VMs. So every customer would basically

60:22

get a VM spun up and we would virtual

60:25

machine virtual machine. Yep. and the um

60:28

Octopus um you know self-installed app

60:31

would basically get installed onto that

60:32

VM and they'd get a whole VM for running

60:34

workloads on etc. Um and that was very

60:37

much not cost effective. It was costing

60:39

us something like a hundred bucks per

60:40

customer per month and they were paying

60:42

I don't know $20 a month or whatever it

60:44

was. But this whole process was more an

60:46

experiment to see was there a demand.

60:48

Um, and to his credit, Paul was happy to

60:51

sort of hand, you know, pass out the

60:53

credit card to kind of go through this

60:54

process to see that is this actually the

60:56

direction we we want to go. Is there a

60:58

is is this something that going to turn

61:00

into a viable sort of direction for the

61:02

company? Because it's a big step, right?

61:03

Going from building software that you

61:05

can kind of hand out and people can

61:07

download and manage themselves to

61:08

>> it was like pretty much self-hosted or

61:10

like run on your own infrastructure.

61:11

>> Exactly. Yeah, that's right. And so the

61:13

the demand was there. So um not long

61:15

after that sort of first experiment we

61:17

basically started from scratch again and

61:19

I worked with a couple of the other

61:21

engineers back then to start building it

61:23

on um Kubernetes um and so octopus

61:26

itself in in that space we have what we

61:28

call kind of a reef. So what you'll find

61:30

is everything in octopus we've always

61:32

got of octopus or nautical kind of names

61:35

around it. So a reef is basically a way

61:37

of it's this cell-based architecture

61:41

where contains all the resources that

61:43

are needed for that particular

61:44

customer's instance. Well, some of it's

61:46

shared, but it's kind of broken down

61:48

into individual cells. And so a reef

61:50

will contain, you know, the cluster, an

61:53

Azure database, etc. Um, and each

61:55

customer instance is running now in a in

61:58

a pod in that um cluster. And so as part

62:01

of that project that was when um I think

62:03

I was working on converting it so it

62:05

could run on Linux and inside containers

62:07

and someone else was building the

62:09

dynamic worker infrastructure. So um

62:12

there were a couple of us that kind of

62:13

just um got in and yeah really just got

62:17

it up and running so that way we could

62:18

kind of start moving forward and and I

62:19

guess stop stop losing money. Fast

62:21

forward to today now there's an entire

62:23

team that's kind of backs that and we've

62:25

got you know several thousand customers

62:26

on it and we run you know many many

62:29

thousands of deployments um every every

62:32

every month and so now what we're trying

62:34

to do is there's a project at the moment

62:36

to basically make the um Octopus

62:39

deployment process itself more resilient

62:42

so what that means is at the moment when

62:43

a deployment kicks off a bunch of the

62:46

the the process so as a it's kind of a

62:49

um imperative set of steps a bunch of

62:51

that is stored in memory which means

62:53

that whenever we want to do an upgrade

62:55

um we need to essentially um stop

62:58

running tasks for some period of time so

62:59

we can kill their instance and spit

63:01

another one back up. Um Octopus itself

63:04

at the moment um doesn't um sort of have

63:07

zero downtime between upgrades. So

63:09

there's a bit of downtime between that.

63:11

We kind of want to reduce that and get

63:12

that as close to as close to zero as

63:14

possible with the realization that you

63:16

know going from downtime of 5 minutes to

63:18

1 that's that's just work right that's

63:21

you know you can move things around you

63:22

can maybe change the architecture going

63:24

from 10 seconds to zero is is a much

63:28

bigger shift um I'm not sure if if and

63:30

when we'll get there but um yeah there's

63:32

definitely this this big effort at the

63:34

moment to make the whole process a lot

63:36

more resilient to basically improve and

63:38

reduce the amount of downtime that takes

63:40

place so

63:41

can um kind of perform upgrades quicker

63:43

etc.

63:44

>> One interesting thing you do is you have

63:46

a SAS but you also have an on-prem

63:48

offering. What are interesting

63:49

engineering challenges that come from

63:50

that? A lot of companies have decided to

63:52

just like honestly just move to move to

63:54

SAS because now they control everything

63:56

centrally. I think Jer did this uh or

63:59

may maybe they're they're doing it which

64:00

is a well-known one but clearly it's

64:02

just a lot more work and a lot more

64:04

headache to have both.

64:05

>> Yeah. Yeah. And we touched on one of the

64:07

big problems here a little earlier is

64:09

that when we want to push out any

64:10

updates, you know, to cloud because we

64:12

control the whole process, we can push

64:14

it out. And so we have a sort of a

64:15

gradual roll out process there. Um

64:17

because each customer is on their own

64:19

instance, we can sort of deploy each one

64:21

individually. Um and that may take I a

64:23

few days to let's say roll out a change.

64:25

On prem though is is kind of another

64:27

matter. So um actually I was digging

64:29

into some of the stats around this a

64:30

little while ago and found it took about

64:33

200 days for on average% 50% of our

64:37

customers on prem to to get let's say

64:39

let's say I ship a new change today

64:41

takes about 200 days for on average 50%.

64:44

>> It's half a year

64:44

>> but then there's kind of like almost an

64:46

exponential decay there where it takes

64:49

400 and something days for 75% to get

64:51

it. So just there's kind of this curve

64:53

where I mean we've got customers that

64:54

are still running you know versions of

64:57

Octopus from 5 6 7 years ago. And so

65:00

whenever we ship a new change we need to

65:02

basically make sure Octopus will work

65:04

from version you know 2023.1

65:08

to 2026.4 and so there's a bunch more

65:12

baggage I guess that we have in terms of

65:14

like um schema upgrades and making sure

65:17

that that whole process actually is

65:19

achievable.

65:19

>> But why do you do it? A lot of startups

65:22

will be like screw it, let's let's not

65:24

support all versions. This even happens

65:25

on on mobile. What's the what's the

65:27

benefit? And this it feels like you're

65:29

kind of swinging against the crowd with

65:31

this one.

65:31

>> The majority of our customers are still

65:33

on prem. And so this is, you know,

65:34

you're talking about banks, um,

65:36

financial institutions, governments,

65:38

things like that where they want full

65:39

control over the system. They want to

65:41

run it on their own hardware. Now they

65:43

may use their own cloud or whatever to

65:44

run it, but they want to manage the

65:45

whole process and be in control of,

65:47

let's say, upgrades or downtime or or

65:49

things like that. So, it's certainly um

65:52

not it's certainly not uncommon and I

65:54

don't think that's going away um anytime

65:56

soon. As for the upgrade support, um

66:01

we're kind of going through this process

66:02

actually in the past couple years where

66:03

we've been getting a lot more I guess

66:05

confident with deprecating features and

66:07

things like that and just kind of

66:08

cutting cutting loose old capabilities

66:10

and part of that has come from you know

66:12

fully embracing feature toggles as part

66:14

of that process. I think we're getting a

66:17

little bit braver in terms of, you know,

66:20

um, removing capabilities that perhaps

66:23

older customers may may miss, but I

66:25

don't think that in the long term

66:27

self-hosted will will kind of go away.

66:29

This is one of the sort of things again

66:30

where I think it's it's really common to

66:32

hear, you know, everything's in the

66:34

cloud, we're all in the cloud. Again,

66:36

the reality is there's a lot of

66:38

companies out there where for them it's

66:39

just doesn't make sense or it's not

66:40

viable or it's not, you know, it doesn't

66:42

meet compliance requirements or whatever

66:43

the case may be. Also, it's kind of a

66:46

reminder, I think, that you actually

66:47

might have a lot less competition if you

66:50

build infrastructure software that also

66:52

runs on prem because it sounds like

66:54

there's a demand where companies are

66:55

like, we want to give you money

66:57

>> in order for us to run on prem. And I'm

67:00

sure some of them would do SAS if

67:02

there's no other alternative. But for

67:04

SAS, it's it's easier to to build

67:06

anyway. So, there'll be more

67:07

competition. So, if you're an

67:08

entrepreneur or if you're a software

67:09

engineer thinking to do a business or

67:11

start a business,

67:12

>> it might give you an edge. Yeah, that's

67:14

that's right.

67:15

>> It sounds like that a lot of your

67:16

customers, you know, the ones who have

67:17

not upgraded your software for, let's

67:19

say, five years, on one end you say

67:20

like, "Oh my gosh, what are they doing?"

67:22

But they might just be happy with it.

67:23

And if they keep paying you as as a

67:25

business, those are some of the your

67:28

most loyal customers. You see what I

67:29

mean?

67:29

>> That that's right. And this is the

67:31

thing. I mean, I remember when I worked

67:32

in um like when I worked in the previous

67:34

job that used Octopus or any of us who

67:37

have any other sort of, you know,

67:38

software that you've you've got running

67:40

potentially you've got running locally,

67:42

if it just works, why why why touch it,

67:44

I guess? And so, it's kind of the bane

67:46

of of our existence because it annoys

67:48

us. We want to ship the features and

67:49

give them all these great new things.

67:51

Um, but on the flip side, you know,

67:53

particularly for something as critical

67:54

as, you know, their deployment system, a

67:57

lot of customers once they've got it

67:58

running, they kind of step away and and

68:00

go, "Okay, let's let's just let it let

68:02

it be."

68:03

>> And it keeps happening with AI as well

68:05

in the sense that uh, for example, I

68:07

just read that cursor, their latest

68:08

coding model, it's it's upgraded like I

68:11

think every 5 hours, which is amazing.

68:13

It keeps getting better. However, you

68:15

know, there are customers who once you

68:17

have an LLM and it works for you, you've

68:20

kind of tuned it, you have the

68:21

instructions, great. But often times

68:22

what happens, a new version comes out of

68:24

a model or major version and it stops

68:26

working. And I I assume that there will

68:28

be more teams, companies, businesses who

68:31

are like, look, it would be worth for me

68:33

money to kind of pin this thing or to

68:35

run it on my own infra and just have it

68:37

stay as is and then I will decide when I

68:40

want to change it as long as it, you

68:41

know, if if if it's if it ain't broken,

68:43

don't fix it. That That's right. And um

68:45

I think to Octopus' credit, I think we

68:48

have a um a really good history at sort

68:51

of helping customers even when they're

68:52

kind of on those older sometimes to the

68:54

extent of wanting to say the support

68:57

team just they're on old instant like

68:59

tell them that to to get the fixed

69:01

upgrade. Um but support team are you

69:04

know I think second to none in terms of

69:06

their their willingness to help and as

69:07

you said if they're willing to pay us

69:10

who am I to to say no?

69:12

>> Yeah. I mean, it's it's a business

69:13

strategy, but I think it's just a nice

69:14

reminder that there's not just one size

69:16

and like even though I think SAS is

69:17

eating the world and we're hearing it

69:19

and we're seeing it, it's nice to see

69:21

that it's it's not just that. As

69:23

closing, uh, if I'm a software engineer

69:26

and I would like to move beyond

69:30

continuous delivery, continuous

69:32

deployment and go into progressive

69:34

delivery. What pointers can you give me?

69:37

>> Yeah, I guess just just start with

69:40

something, right? for start with adding

69:42

one feature toggle. It may be scary at

69:44

first to kind of go, "Ah, it's in

69:45

production. If I, you know, toggle this,

69:47

I'm going to break something

69:48

production." You know, it's nice and

69:49

comfortable to know that you're kind of

69:50

well to the left of of the running

69:53

systems and if you ship code, everything

69:54

will be caught by the test. But, you

69:56

know, if I toggle it, what will happen?

69:58

It's kind of like a drug, right? Once

69:59

you start doing it, you don't want to

70:00

stop. And that's that's why we've got

70:01

this this hygiene problem for things

70:03

like Vij toggles, right? It's really

70:05

easy to add them and actually end up

70:07

with the opposite problem of how do you

70:08

how do you kind of control yourself? How

70:09

do you stop? So, I'd say just just kind

70:11

of start doing it. Add one and and keep

70:14

an eye on kind of as you roll it out and

70:15

you look at the results from it. And the

70:17

reality is, you know, I've shipped

70:19

features bind feature toggles where I've

70:21

shipped a bug, right? And it's one thing

70:24

to ship something and turn on a feature

70:25

and go, "Okay, cool. Customers have it."

70:27

It's a very different thing when you do

70:29

the opposite. If you ship something and

70:30

there's a problem and you can reach

70:32

immediately for the toggle and switch it

70:33

back off. you know, the amount of times

70:35

you kind of in the past you had this

70:36

kind of panic of, oh no, I've shipped

70:38

something. It's I don't know what's

70:39

going wrong. And particularly when

70:41

you're in that state, you know, maybe

70:42

you've got called up at 2 am because

70:44

you've got an on call and you know, you

70:46

don't know what the next step is to do

70:47

and you kind of got a panic mind and

70:48

should I, you know, build a new thing or

70:50

do I somehow force a redeployment? So

70:52

having the capability of being able to

70:54

sort of flick that switch just allows

70:56

you then calm right down and go, okay,

70:58

I've stemmed the bleeding now come back

71:01

and reanalyze it and understand what's

71:02

wrong. So having that capability once

71:05

you sort of experience that and realize

71:06

the value that not just rolling things

71:08

out but of I guess rolling that

71:11

individual feature back off. Yeah.

71:13

You'll you'll want to use it for

71:14

everything.

71:15

>> What's one or two books you would

71:16

recommend and why?

71:17

>> I'll give two kind of I guess technical

71:19

ones and and more of a fun Phoenix

71:22

project is still for me a good one. This

71:24

is one

71:24

>> by Jean Kim. Yeah.

71:25

>> Yeah. And um I I can see uh you know you

71:29

kind of remember that we got that in in

71:31

in Skype. This was one that Abdella kind

71:33

of gave to everyone.

71:34

>> Yeah. Our our manager gave it to

71:36

everyone.

71:36

>> Yeah. And um you know it's it's you know

71:39

parts of it are maybe a little bit

71:40

outdated and you know some of the

71:41

practices have changed a little bit but

71:42

at its core this idea of as an engineer

71:46

being involved in that whole um sort of

71:48

operation side of your what you're

71:50

shipping and and the value that gives to

71:52

not just the company but to you is

71:54

amazing. So I think that book has kind

71:55

of a core when it's one of those core

71:57

foundational ones that sets the sets the

72:00

the the context for everything we talked

72:02

about today. The other one um from a

72:05

more um I guess organizational and

72:07

communication side of things um radical

72:09

cander by Kim Scott allows you to

72:11

communicate more efficiently and with

72:12

more compassion with um your peers and

72:14

other people around you. It's, you know,

72:16

really common. You know, I'm an

72:18

engineer, so I I know sometimes it's

72:20

really, you kind of look back on what

72:21

you said and you feel like, okay, maybe

72:22

I'm I can be a little bit blunt. Whereas

72:24

radical candid teaches us to think

72:26

about, you know, you want to have those

72:27

communications that are both sharing

72:29

that you're caring and empathetic, but

72:31

also direct and, you know, the benefits

72:33

of that and kind of the the inverse of

72:36

that where, you know, you perhaps, like

72:38

I said, you're very blunt. You're sort

72:40

of being honest about it, but you're

72:41

missing that that empathy. Um, so I

72:43

found that book really useful and

72:46

interesting as I guess not even just as

72:48

as an engineer, but as a as a person

72:50

working with other people. From the the

72:52

more fun side, basically anything by

72:53

Greg Egan. He's an Australian sci-fi

72:56

author. He writes some pretty crazy

72:59

mindbending hard um hard sci-fi. So if

73:02

you're really into that, I'd say read um

73:04

like Diaspora or um Charles's Letter.

73:09

They're the sort of books that actually

73:10

took a second read to get through. and

73:12

he's he's a mathematician as well. So,

73:15

you know, he's got a whole bunch of

73:16

background and mathematics on why a

73:19

certain certain part of his story goes

73:21

the way it is. He wrote an entire story

73:23

on the premise of um what if the speed

73:26

of light wasn't absolute or something

73:27

like this one premise and it kind of

73:29

breaks out into and then this is what

73:30

happens to to energy and therefore

73:32

molecules work like this and D and um as

73:36

a you know I'm a I'm a tech nerd um that

73:39

sort of science stuff you know really

73:40

appeals. Same same when when sci-fi

73:42

there's some science involved that's

73:44

actually way I find it way more fun

73:46

>> Rob thanks very much

73:47

>> thank you Got great

73:49

>> what an interesting conversation I hope

73:50

you enjoyed having someone like Rob who

73:52

has been building and thinking about

73:53

CI/CD at scale for a decade it was such

73:56

a fun blast from the past story as he

73:58

talked about how at Skype our team

73:59

basically did continuous delivery

74:00

[music] years before most of the

74:02

industry caught up and how we did it by

74:04

quietly shipping new bills to New

74:06

Zealand every week using this as our

74:08

canary country [music] it's a reminder

74:09

that a lot modern software practices

74:12

were already being run in the wild by

74:13

devs who just wanted to ship software

74:15

faster than our change advisory board

74:17

would allow us to do [music] so. One

74:18

other thing I took a note is Rob's take

74:20

on roll backs. Lots of engineering teams

74:22

talk about rollbacks as [music] if

74:24

they're safety net. But the moment you

74:25

have a database schema change in the

74:26

mix, what's safety net? Rob's advice is

74:29

to [music] roll forward, not back, and

74:31

use feature toggles as a way to turn

74:33

features off or on. This is also a

74:35

reminder that investing feature flags is

74:37

usually really helpful. But if you have

74:39

feature flags, be sure to clean up after

74:42

them after you've rolled them out,

74:43

otherwise they become a big mess.

74:45

Finally, a part where I learned

74:46

something new was on GitOps. I've always

74:49

assumed that GitOps was about well, Git,

74:51

but as Rob pointed out, none of the four

74:53

actual pillars of GitOps require Git at

74:55

all. The four pillars are number one

74:58

declarative, [music] number two version

74:59

and immutable, number three pulled not

75:01

pushed, number four continuously [music]

75:03

reconciled. The name githops has caused

75:05

the whole industry to get a bit dogmatic

75:07

about putting everything into git repo,

75:09

even things like secrets which

75:10

absolutely should not be there. Rob's

75:12

take is that most teams just want

75:14

[music] to ship software. If githops

75:16

helps with that part, great. But if a

75:18

more practical process works better,

75:19

just use that. Do check out the show

75:21

notes below for related the pragmatic

75:23

engineer deep dives on backend

75:24

technologies and other related topics.

75:26

If you've enjoyed this podcast, please

75:27

do subscribe on your favorite podcast

75:29

platform and on YouTube. A special thank

75:31

you if [music] you also leave a rating

75:32

on the show. Thanks and see you in the

75:34

next

Interactive Summary

The video features an in-depth conversation with CI/CD expert Rob Eris, who explores modern software delivery practices including GitOps, progressive delivery, and the use of feature toggles. Rob discusses the evolution of CI/CD from basic continuous integration to advanced progressive delivery, highlighting how teams can reduce risk and increase velocity. He challenges common industry dogmas—such as the necessity of GitOps in every scenario or the reliance on traditional rollbacks—and emphasizes the importance of 'rolling forward' and maintaining practical, context-aware processes over rigid, theoretical ones.

Suggested questions

4 ready-made prompts