WEBVTT

00:00:00.001 --> 00:00:07.060
What happens when you take a tech-driven online fashion company that's experiencing explosive growth and infuse it with a deep open-source mission?

00:00:07.060 --> 00:00:10.200
Well, you'll find out on this episode of Talk Python To Me.

00:00:10.200 --> 00:00:17.780
We'll meet Lori Apple and Rafael Carricio from Zalando, where developers there have published almost 200 open-source projects on GitHub.

00:00:17.780 --> 00:00:47.760
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem.

00:00:47.760 --> 00:00:53.160
This is your host, Michael Kennedy. Follow me on Twitter, where I'm @mkennedy.

00:00:53.160 --> 00:00:59.640
Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via at Talk Python.

00:00:59.640 --> 00:01:03.640
This episode is brought to you by Hired and SnapCI.

00:01:03.640 --> 00:01:10.360
Thank them for supporting the show on Twitter via at Hired underscore HQ and at Snap underscore CI.

00:01:10.360 --> 00:01:15.580
Hey, everyone. Last episode, I told you about my crazy student reward for the Kickstarter.

00:01:15.580 --> 00:01:19.620
Well, it turns out that Kickstarter is not super keen on us doing that.

00:01:19.620 --> 00:01:26.200
I don't think we were violating the spirit of the rules, but we were actually violating the letter of the Kickstarter rules of conduct.

00:01:26.200 --> 00:01:28.380
So sadly, we'll have to pull back that cool offer.

00:01:28.380 --> 00:01:31.280
However, I'm replacing it with something that might even be better.

00:01:31.280 --> 00:01:34.920
Instead of funding some of the businesses that successfully launch out of the course,

00:01:34.920 --> 00:01:39.940
we'll have a special Talk Python To Me episode featuring and looking inside a couple of them.

00:01:39.940 --> 00:01:42.000
Keep an eye out for that in six months or so.

00:01:42.000 --> 00:01:44.880
Now, let's talk about fashionable open source code.

00:01:44.880 --> 00:01:47.520
Lori, Raphael, welcome to the show.

00:01:47.520 --> 00:01:48.200
Thanks.

00:01:48.200 --> 00:01:48.900
Thanks.

00:01:48.900 --> 00:01:49.400
It's good to be here.

00:01:49.400 --> 00:01:52.820
Yeah, I'm really excited to talk to you guys about what's going on in Zalando.

00:01:52.820 --> 00:01:58.060
It seems like you're doing a lot of cool Python things, and I think it'll be a fun story for the audience.

00:01:58.060 --> 00:01:59.240
Yeah, I hope so.

00:01:59.240 --> 00:02:00.360
Yeah, definitely.

00:02:00.360 --> 00:02:03.520
All right, so both of you guys on the show.

00:02:03.520 --> 00:02:07.520
So let's get started by talking about your background a little bit.

00:02:07.620 --> 00:02:09.480
How did you get into software?

00:02:09.480 --> 00:02:10.880
Lori, you want to go first?

00:02:10.880 --> 00:02:11.420
Sure.

00:02:11.420 --> 00:02:15.260
My name is Lori Apple, and I'm the open source evangelist in Zalando.

00:02:15.260 --> 00:02:20.100
And I came into technology after law school.

00:02:20.100 --> 00:02:22.480
So my background is not really in programming.

00:02:22.480 --> 00:02:23.740
It's more in journalism.

00:02:23.740 --> 00:02:25.200
I did some PR.

00:02:25.200 --> 00:02:27.900
I also studied law.

00:02:28.040 --> 00:02:32.740
And so right after law school, I started working in tech companies on and off.

00:02:32.740 --> 00:02:39.200
And then in 2012, I started working at Gilt and became their technology evangelist.

00:02:39.200 --> 00:02:50.620
So I was going to lots of meetups and running the tech blog and social media and working with developers to talk about what we were doing with engineering, with product, with UX.

00:02:50.820 --> 00:02:55.000
And then I came to Zalando 2015, so last February.

00:02:55.000 --> 00:02:57.820
And first I was doing technology evangelism.

00:02:57.820 --> 00:03:06.820
And then my job kind of morphed into just focusing on the open source evangelism because we have so much work going on in the open source scene.

00:03:06.820 --> 00:03:10.820
If you look at our dashboard, we have almost 200 projects.

00:03:10.820 --> 00:03:13.300
And so there's lots to maintain.

00:03:13.300 --> 00:03:16.800
And I'm also managing agile project managing a team.

00:03:16.800 --> 00:03:19.060
So I guess I have two jobs here.

00:03:19.540 --> 00:03:20.580
Yeah, that sounds really fun.

00:03:20.580 --> 00:03:22.420
And you guys do have a lot going on.

00:03:22.420 --> 00:03:25.260
We'll talk about some of your open source projects.

00:03:25.260 --> 00:03:29.240
But, yeah, you pull that up and it's quite a list of stuff there.

00:03:29.240 --> 00:03:30.900
Yeah, and there used to be a lot more.

00:03:30.900 --> 00:03:33.500
But I will talk about why there isn't that much.

00:03:33.500 --> 00:03:34.020
Oh, interesting.

00:03:34.020 --> 00:03:34.460
Okay.

00:03:34.460 --> 00:03:35.620
Yeah, cool.

00:03:35.620 --> 00:03:35.940
Yeah.

00:03:35.940 --> 00:03:46.040
And I think software developer evangelist or even more specialized, open source evangelist, I think that's such a fun sounding job.

00:03:46.040 --> 00:03:48.900
It's never been a job I've had, but I've known some people who've done it.

00:03:48.980 --> 00:03:52.700
And it seems like you get some of the best part of the tech community, right?

00:03:52.700 --> 00:03:56.900
You get to bring people together to have fun, to talk about the cool, exciting stuff they're doing.

00:03:56.900 --> 00:03:57.500
That's great.

00:03:57.500 --> 00:03:59.020
Yeah, I mean, you link people together.

00:03:59.500 --> 00:04:04.820
And what I like about open source evangelism is I get to focus on code and working with engineers.

00:04:04.820 --> 00:04:12.500
And I love products and UX and even other aspects of technology evangelism.

00:04:12.500 --> 00:04:19.720
But really working with the engineers and getting them to think of their code and their projects as products is really fun.

00:04:20.540 --> 00:04:21.380
Yeah, that's awesome.

00:04:21.380 --> 00:04:23.000
Raphael, how about you?

00:04:23.000 --> 00:04:23.800
What's your story?

00:04:23.800 --> 00:04:27.800
So I started playing with computers like around 2000.

00:04:28.740 --> 00:04:35.540
But I only started like real programming in 2005 when I started my university.

00:04:35.540 --> 00:04:43.400
I don't know why I didn't go into programming before because I was playing with Linux since 2002.

00:04:43.740 --> 00:04:48.300
But I was mostly like fascinated about web.

00:04:48.300 --> 00:04:51.260
And I discovered that everything was HTML.

00:04:51.260 --> 00:04:53.320
So I started like learning about that.

00:04:53.320 --> 00:04:56.000
But I don't count that as programming.

00:04:56.000 --> 00:05:02.400
But I started programming, like programming things that were really fun in 2005.

00:05:03.080 --> 00:05:12.800
Maybe because I thought before that programming was some kind of magic thing that you needed to have someone that like to teach you, dedicated to that.

00:05:12.800 --> 00:05:13.620
That's really interesting.

00:05:13.620 --> 00:05:27.520
I always felt like before I got into programming, that programming was like this special art that you had to have four years of university or six years of university to really be able to do.

00:05:27.520 --> 00:05:30.540
It just seemed so unattainable to me in the beginning.

00:05:30.540 --> 00:05:32.440
But then it turns out it wasn't, right?

00:05:33.080 --> 00:05:33.960
Yeah, it's a growing story.

00:05:33.960 --> 00:05:34.460
Yeah.

00:05:34.460 --> 00:05:34.800
Yeah.

00:05:34.800 --> 00:05:46.520
I thought that I needed someone and I didn't have anyone in my family or I didn't have any friends that were like into programming or into computers as much as I was.

00:05:46.520 --> 00:05:51.640
So I just was doing my stuff myself and reading blogs online and things.

00:05:51.640 --> 00:05:55.040
So but when I started programming, I got really excited.

00:05:55.040 --> 00:06:00.220
And like in the first two weeks, I was learning Pascal at that time.

00:06:00.220 --> 00:06:03.840
And the first two weeks, I just wrote this poem in the console.

00:06:03.840 --> 00:06:06.680
My professor was really impressed and it was really cool.

00:06:06.680 --> 00:06:11.880
Since then, I just got crazy and I really liked everything that I was learning.

00:06:12.920 --> 00:06:19.400
And then I had to find a job quickly because my parents didn't have money to pay for my university in Brazil.

00:06:19.400 --> 00:06:21.320
So yeah, I'm from Brazil.

00:06:21.320 --> 00:06:25.480
And then I found a job in the first year of university.

00:06:26.480 --> 00:06:31.740
And I was working with Java at that time because in my hometown is not a big city.

00:06:31.740 --> 00:06:35.180
So I had only like job positions in Java.

00:06:35.700 --> 00:06:40.020
And then in 2007, I discovered Python.

00:06:40.020 --> 00:06:47.920
I was just looking for like a easier or more like concise way of writing code.

00:06:47.920 --> 00:06:50.400
And then I found Python.

00:06:50.400 --> 00:06:51.540
I was really happy.

00:06:51.540 --> 00:06:53.100
Like I really like it.

00:06:53.100 --> 00:07:00.460
I found it strange like this spacing and like indentation to define blocks in Python.

00:07:00.460 --> 00:07:04.140
But then I just got over it and I really like Python.

00:07:04.260 --> 00:07:08.080
I started loving it, but I couldn't work with that professionally at the time.

00:07:08.080 --> 00:07:12.980
And then in 2009, I had the opportunity to like create my own company.

00:07:12.980 --> 00:07:15.900
Someone just contacted me and said, hey, I have this idea.

00:07:15.900 --> 00:07:18.520
Do you want to work with this with me?

00:07:18.520 --> 00:07:19.680
And then I said, okay, yeah.

00:07:19.680 --> 00:07:24.060
And I started to work with Python for web development used in Django.

00:07:24.060 --> 00:07:25.480
And it was really cool.

00:07:25.480 --> 00:07:29.500
And since then, I just mostly have been working with Python.

00:07:29.500 --> 00:07:32.460
I worked with Ruby for like two years recently.

00:07:32.900 --> 00:07:38.760
But it was just an adventure like in another language to get to know more about different

00:07:38.760 --> 00:07:39.360
communities.

00:07:39.360 --> 00:07:41.300
But I really like Python.

00:07:41.300 --> 00:07:43.480
And I decided to like get back to Python.

00:07:43.480 --> 00:07:45.140
And this year, I joined Zalando.

00:07:45.140 --> 00:07:47.620
And I started working with Python again.

00:07:47.620 --> 00:07:48.920
And I really like it.

00:07:48.920 --> 00:07:49.340
Oh, yeah.

00:07:49.340 --> 00:07:50.140
That's a cool story.

00:07:50.380 --> 00:07:54.460
I think a lot of people get freaked out by the white space, the significant white space

00:07:54.460 --> 00:07:55.340
and the indentation.

00:07:55.340 --> 00:07:58.240
You're like, you know, especially if you come from a...

00:07:58.240 --> 00:07:58.720
Just two up.

00:07:58.720 --> 00:08:00.100
It's totally a...

00:08:00.100 --> 00:08:02.840
It's a different way of thinking, right?

00:08:02.900 --> 00:08:08.200
Normally, you're used to other languages, C languages, JavaScript-y languages that have

00:08:08.200 --> 00:08:15.460
curly braces and semicolons and all this formality in the language that's extra symbols in the

00:08:15.460 --> 00:08:16.160
language, I guess.

00:08:16.160 --> 00:08:19.140
And they just seem required when you learn programming.

00:08:19.140 --> 00:08:23.940
But then if you go and learn Python, if you learn Python first, I suspect it's different.

00:08:24.080 --> 00:08:28.140
But if you go and then learn Python, you're like, well, how can it work without all these

00:08:28.140 --> 00:08:29.380
support symbols?

00:08:29.380 --> 00:08:31.540
But it takes about a day.

00:08:31.540 --> 00:08:33.020
And then you're like, I don't miss those anymore.

00:08:33.020 --> 00:08:33.920
Yeah.

00:08:33.920 --> 00:08:39.280
I think I started understanding more when I started like getting into parsers and writing,

00:08:39.280 --> 00:08:41.600
like trying to write compilers and things.

00:08:41.600 --> 00:08:42.620
I really like this.

00:08:42.620 --> 00:08:45.740
Like language, like creation things.

00:08:45.740 --> 00:08:52.680
And then after I got some experience, I studied that in university and I started doing some work

00:08:52.680 --> 00:08:54.060
myself on that.

00:08:54.060 --> 00:08:58.900
I discovered like, OK, yeah, you can just like space to define blocks.

00:08:58.900 --> 00:09:00.600
And it's not that hard.

00:09:00.600 --> 00:09:03.980
And then I understood fully in this Python thing.

00:09:03.980 --> 00:09:05.460
And it's actually better now.

00:09:05.460 --> 00:09:12.440
I feel like it's good that you can just write less and have more power when you write something.

00:09:12.440 --> 00:09:13.880
That's why I like it, too.

00:09:13.880 --> 00:09:18.480
I mean, I've done coding in Python, especially with Django Girls.

00:09:18.480 --> 00:09:20.720
They've got great workshops.

00:09:20.720 --> 00:09:21.940
Yeah, Django Girls are great.

00:09:22.200 --> 00:09:22.480
Yeah.

00:09:22.480 --> 00:09:27.220
So I did their weekend make a blog from scratch.

00:09:27.220 --> 00:09:27.960
Oh, nice.

00:09:27.960 --> 00:09:29.920
And it was really, really quite fun.

00:09:29.920 --> 00:09:35.520
But I think for somebody who likes to be sparse with language, it's great.

00:09:35.520 --> 00:09:43.300
And also, I think, I don't know if anybody has ever done a talk or a paper on like the white space of Python,

00:09:43.640 --> 00:09:48.640
like what it means philosophically, because there's nothing there, but there's everything there.

00:09:48.640 --> 00:09:53.200
You know, I'm sure like somebody could have a lot of fun with something going on.

00:09:53.360 --> 00:09:57.580
Yeah, that would be a cool, like, language philosophy talk.

00:09:57.580 --> 00:09:58.560
Yeah, that's awesome.

00:09:58.560 --> 00:09:58.660
Yeah.

00:09:58.660 --> 00:10:03.940
Free conference talk idea for anyone who wants to pursue it.

00:10:03.940 --> 00:10:04.680
There you go.

00:10:05.640 --> 00:10:08.820
Yeah, I think there is a lot of things online about that.

00:10:08.820 --> 00:10:09.220
Yeah.

00:10:09.220 --> 00:10:09.760
I'm not sure.

00:10:09.760 --> 00:10:12.960
But I'm sure I read things about that.

00:10:12.960 --> 00:10:14.460
Nice.

00:10:14.460 --> 00:10:14.740
Yeah.

00:10:14.740 --> 00:10:16.260
Many people have the same practice.

00:10:16.260 --> 00:10:17.560
They have the same experience.

00:10:17.560 --> 00:10:18.040
Yeah, that's cool.

00:10:18.560 --> 00:10:20.680
I think, you know, you said Django Girls.

00:10:20.680 --> 00:10:29.400
And I think one of the things that's special about Python and open source is the community is just so supportive and enthusiastic.

00:10:29.400 --> 00:10:30.160
Mm-hmm.

00:10:30.160 --> 00:10:31.320
It's huge.

00:10:31.320 --> 00:10:37.140
I remember I had a PC once, and I had to download all of these little components, like Sigwin.

00:10:37.140 --> 00:10:40.080
And it was just, you know, on a Mac, it's so simple.

00:10:40.080 --> 00:10:45.060
And then my computer was old and screwed up, and I brought it to this meetup.

00:10:45.760 --> 00:10:58.980
And this poor guy, he sat there for like half an hour, 45 minutes, and basically was just trying to help me download every little crumb to get us closer to home.

00:10:58.980 --> 00:11:01.400
We didn't actually get there, but it got far.

00:11:01.400 --> 00:11:02.800
That's too bad.

00:11:02.800 --> 00:11:06.620
It was a piece of crap computer.

00:11:06.620 --> 00:11:12.440
It's been really hard on Windows traditionally to do Python, but it's getting better, actually.

00:11:12.800 --> 00:11:18.840
You know, the guy's one of the Python core developers, Steve Dowers, works at Microsoft, and he's reworking.

00:11:18.840 --> 00:11:23.460
He reworked, I think it's probably a continuing project, the installer.

00:11:23.460 --> 00:11:25.660
So things install a lot better at work.

00:11:25.660 --> 00:11:28.680
And so it's a better story these days.

00:11:28.680 --> 00:11:29.860
But, yeah, it's still tough.

00:11:29.860 --> 00:11:33.660
So let's talk about Zalando a little bit, just the background of it.

00:11:33.660 --> 00:11:36.000
So a lot of people probably haven't heard of it.

00:11:36.000 --> 00:11:36.820
What is Zalando?

00:11:36.820 --> 00:11:39.280
Yeah, so a lot of people in Europe have heard of it.

00:11:39.280 --> 00:11:42.120
But as an American, you're American too.

00:11:42.120 --> 00:11:49.200
Yeah, I didn't know about the company until my former colleague had started working here as the VP of engineering.

00:11:49.200 --> 00:11:52.780
So he's basically the head of engineering for the company.

00:11:53.320 --> 00:11:56.800
So Zalando is Europe's leading fashion platform.

00:11:56.800 --> 00:11:59.860
And so it's in 15 countries in Europe.

00:11:59.860 --> 00:12:02.520
Just today we got new figures.

00:12:02.520 --> 00:12:08.400
So we have now more than 19 million active users, more than 11,000 employees.

00:12:08.400 --> 00:12:11.540
So about 1,300 plus are tech.

00:12:12.320 --> 00:12:14.400
And we're based in Berlin.

00:12:14.400 --> 00:12:16.320
We have tech hubs.

00:12:16.320 --> 00:12:21.120
This is just for tech, not just the whole company, but for the department.

00:12:21.120 --> 00:12:27.400
We have tech hubs in Dublin, Helsinki, a couple other German cities.

00:12:27.400 --> 00:12:31.520
So the company has been growing like crazy.

00:12:31.520 --> 00:12:34.760
When I got here, the tech team was maybe 650.

00:12:34.760 --> 00:12:36.800
So that was just 18 months ago.

00:12:36.800 --> 00:12:37.160
Wow.

00:12:37.160 --> 00:12:38.840
So it's almost doubled, huh?

00:12:39.020 --> 00:12:42.380
Yeah, and we didn't have a Dublin office or a Helsinki office.

00:12:42.380 --> 00:12:48.840
We've acquired a couple of companies to build ourselves out as a platform for real.

00:12:48.840 --> 00:12:57.520
So we have ad tech happening now and lots of content features coming up.

00:12:57.520 --> 00:12:59.440
I mean, it's quite a...

00:12:59.440 --> 00:13:00.160
That's really cool.

00:13:00.160 --> 00:13:01.460
Yeah, that's quite a powerhouse.

00:13:01.460 --> 00:13:09.000
So you guys, your major product is sort of online fashion stuff, right?

00:13:09.000 --> 00:13:13.580
So if I want to buy clothes or like a cool suit or slacks or something like that?

00:13:13.580 --> 00:13:14.700
Right.

00:13:14.700 --> 00:13:18.960
So we work with all of the major brands you're familiar with.

00:13:18.960 --> 00:13:24.200
Any household fashion brand, you're probably going to find it on our website.

00:13:24.200 --> 00:13:26.920
And we went public two years ago too.

00:13:26.920 --> 00:13:29.560
So that was a nice success.

00:13:29.880 --> 00:13:30.860
Yeah, that's cool.

00:13:30.860 --> 00:13:31.560
That's really cool.

00:13:31.560 --> 00:13:39.660
So is it a technical challenge, both the software development side and carrying this open source

00:13:39.660 --> 00:13:44.060
message when you guys are growing so fast and acquiring other companies that maybe have

00:13:44.060 --> 00:13:44.740
different approaches?

00:13:44.740 --> 00:13:45.620
Oh, sure.

00:13:45.620 --> 00:13:46.560
And if you think about...

00:13:46.560 --> 00:13:50.560
We're very international in our tech team as well.

00:13:50.680 --> 00:13:57.940
So you have lots of different interpretations of how a tech team should work and what agile

00:13:57.940 --> 00:13:58.900
is.

00:13:58.900 --> 00:14:02.640
And some of our engineers, they've never really worked in an agile environment.

00:14:02.640 --> 00:14:08.220
And so when you're growing that fast and you're trying to scale so quickly and work in an agile

00:14:08.220 --> 00:14:10.040
way, it's very interesting.

00:14:10.040 --> 00:14:12.800
This company was not always agile.

00:14:13.040 --> 00:14:16.460
There was a shift last spring.

00:14:16.460 --> 00:14:20.560
So spring 2015 towards this mindset called radical agility.

00:14:20.560 --> 00:14:26.660
And this is where we officially introduced autonomous teams and mastery and purpose.

00:14:26.660 --> 00:14:33.720
So the pillars are based on Daniel Pink's drive, which was where autonomy, mastery and purpose

00:14:33.720 --> 00:14:34.220
comes from.

00:14:34.220 --> 00:14:37.220
Daniel Pink has a really cool book and way of thinking.

00:14:37.220 --> 00:14:44.540
So we basically adopted that and revamped the tech organization.

00:14:44.540 --> 00:14:49.380
I mean, some teams had already been working in this fashion, but not department wide.

00:14:49.500 --> 00:14:52.000
And so we said, OK, teams, you're autonomous.

00:14:52.000 --> 00:14:57.360
And then now you're also going to have twice as many teams within 18 months.

00:14:57.360 --> 00:14:58.280
And we're still growing.

00:14:58.280 --> 00:15:03.520
So, yeah, there's all kinds of interesting learnings and experiences that you get when you

00:15:03.520 --> 00:15:07.020
when you subject yourself to something so courageous.

00:15:07.020 --> 00:15:13.080
It really is courageous for the tech leadership to take such a change on because you just don't

00:15:13.080 --> 00:15:13.720
do it overnight.

00:15:13.720 --> 00:15:18.600
You know, when I heard the first time about Zalando, it was just a website where you could

00:15:18.600 --> 00:15:20.140
buy clothes and stuff.

00:15:20.140 --> 00:15:24.960
And many people here still have this idea that Zalando is just, oh, it's just a shop.

00:15:24.960 --> 00:15:26.580
It's just a shop online, a website.

00:15:26.580 --> 00:15:32.480
But when I got here, I discovered that there is much more than just a website, a shop where

00:15:32.480 --> 00:15:37.580
you can buy things like Zalando have the Datware warehouse, like where they store all the

00:15:37.580 --> 00:15:43.120
clothing, take pictures of every article, like every piece of clothing and to put in the

00:15:43.120 --> 00:15:44.660
website, tweet the photos.

00:15:45.320 --> 00:15:51.200
So there is a lot of things that happen behind the scenes to this website to work.

00:15:51.200 --> 00:15:58.380
And all of this is developed in-house, like the technology for all these levels, let's say.

00:15:58.380 --> 00:16:03.840
And then when I started here, I discovered that and I was like, whoa, yeah, there is a lot

00:16:03.840 --> 00:16:04.400
to do here.

00:16:04.400 --> 00:16:05.160
Yeah.

00:16:05.160 --> 00:16:06.120
It's not just a website.

00:16:06.120 --> 00:16:07.080
Yeah, that's really cool.

00:16:07.080 --> 00:16:12.240
You guys have the whole sort of web property of a bunch of API things going on.

00:16:12.240 --> 00:16:14.280
You have some machine learning.

00:16:14.280 --> 00:16:16.560
We're going to dig into all those things in time.

00:16:16.560 --> 00:16:19.240
But yeah, there's definitely a bunch of cool stuff happening there.

00:16:19.240 --> 00:16:24.800
Laura, you talked about what you do at Zalando with the open source evangelists and project

00:16:24.800 --> 00:16:26.580
management and stuff like that.

00:16:26.580 --> 00:16:28.180
Raphael, how about you?

00:16:28.180 --> 00:16:29.160
What are you working on there?

00:16:29.160 --> 00:16:29.520
Yeah.

00:16:29.520 --> 00:16:32.800
So I currently work at the continuous delivery team.

00:16:32.800 --> 00:16:38.140
So my team, there is like three sub teams in the team I work.

00:16:38.140 --> 00:16:45.720
But basically, we maintain the continuous deployment for other things, like tools around that and

00:16:45.720 --> 00:16:46.280
jenks.

00:16:46.720 --> 00:16:54.080
So each team have Jenkins instance to run tests and like deployment jobs.

00:16:54.080 --> 00:17:03.460
So currently working, like creating these tools to enable teams to deploy easier, like and automatic.

00:17:03.460 --> 00:17:09.380
So they don't need to manually go to the machine, like SSH to the machine to make a deploy or anything

00:17:09.380 --> 00:17:09.840
like that.

00:17:09.900 --> 00:17:11.580
So we just use some tools.

00:17:11.580 --> 00:17:18.540
So we have some open source tools like Senza and like all the things that we use to deploy.

00:17:18.540 --> 00:17:26.460
And I also work in some open source projects at Zalando that support like that we use to create

00:17:26.460 --> 00:17:27.040
those tools.

00:17:27.040 --> 00:17:30.680
So connection is one of those projects.

00:17:30.680 --> 00:17:31.800
Yeah.

00:17:31.900 --> 00:17:34.040
And basically, that's what I do.

00:17:34.040 --> 00:17:36.000
I develop software here.

00:17:36.000 --> 00:17:39.480
And I also support teams also in like helping them.

00:17:39.480 --> 00:17:40.300
Like they come to me.

00:17:40.300 --> 00:17:42.900
They sit next to me and say, hey, Raphael, I cannot deploy.

00:17:42.900 --> 00:17:44.100
Like there's a problem here.

00:17:44.100 --> 00:17:48.900
And I see if it's a bug or if he just missed using the tool.

00:17:48.900 --> 00:17:49.640
Sure.

00:17:49.640 --> 00:17:51.320
Oh, that's really cool.

00:17:51.320 --> 00:17:56.200
And I saw that you guys are using a lot of interesting container technologies.

00:17:56.200 --> 00:17:58.940
So are you using Docker?

00:17:58.940 --> 00:18:00.580
Yes.

00:18:00.580 --> 00:18:01.700
Yes.

00:18:01.700 --> 00:18:08.520
Basically, like our applications that we deploy in production, like we use AWS CloudFormation

00:18:08.520 --> 00:18:09.000
API.

00:18:09.000 --> 00:18:17.080
And like we have infrastructure around AWS, which is called Stubs platform.

00:18:17.080 --> 00:18:19.160
It's completely open source.

00:18:19.160 --> 00:18:22.620
Like there's many applications that work together for deployment.

00:18:22.620 --> 00:18:30.080
And yeah, we use Docker as a packaging format for the applications that we have.

00:18:30.440 --> 00:18:37.420
And then we have like our one Docker repository, which is P1.

00:18:37.420 --> 00:18:44.400
So we push the image there.

00:18:44.400 --> 00:18:51.440
And we use AWS CloudFormation API to like create the whole stack of the application.

00:18:51.440 --> 00:18:55.840
Like the whole stack when we release a new version of the application.

00:18:56.080 --> 00:18:58.600
And then we just switch the traffic to this new stack.

00:18:58.600 --> 00:18:59.600
So yeah.

00:18:59.600 --> 00:19:00.340
So yeah.

00:19:00.340 --> 00:19:03.220
And there is other tools to access the machine.

00:19:03.220 --> 00:19:05.600
And everything is logged.

00:19:06.460 --> 00:19:13.200
So you know, like, you know, like, who accesses which machine for what and which time, in what time.

00:19:13.200 --> 00:19:19.620
And this is very important for traceability and for compliance here in Europe.

00:19:19.620 --> 00:19:19.980
Yeah.

00:19:19.980 --> 00:19:20.560
Of course.

00:19:21.000 --> 00:19:24.400
How many different systems do you have running in AWS?

00:19:24.400 --> 00:19:25.580
It must be a ton, right?

00:19:25.580 --> 00:19:27.040
Yeah.

00:19:27.040 --> 00:19:28.040
There is a lot.

00:19:28.820 --> 00:19:29.960
I don't even know.

00:19:29.960 --> 00:19:30.360
Yeah.

00:19:30.360 --> 00:19:31.640
How do you guys keep track of that?

00:19:31.640 --> 00:19:34.120
Each team have their one AWS account.

00:19:34.120 --> 00:19:44.980
And we have one service that like in this Stops platform, we have one service that crawls like all the APIs that we have.

00:19:44.980 --> 00:19:56.980
Because like all applications, they are registered in one application that like one of the applications of Stops that manage the other applications, let's say, is called Heal.

00:19:56.980 --> 00:19:57.160
Yeah.

00:19:57.160 --> 00:19:59.400
So you've got like an app to manage your apps.

00:19:59.400 --> 00:20:00.240
Okay.

00:20:00.240 --> 00:20:02.600
That seems pretty standard in Docker though, right?

00:20:02.600 --> 00:20:04.520
Because it's hard to know what is where.

00:20:04.520 --> 00:20:05.040
Yeah.

00:20:05.040 --> 00:20:05.320
Yeah.

00:20:05.320 --> 00:20:09.540
So here we have like a central point where we register all applications.

00:20:09.860 --> 00:20:21.840
So from that, you get access, like your application can get credentials to access Amazon and to access other applications endpoints using OAuth 2.

00:20:21.840 --> 00:20:28.380
And also these applications manage the versions for like the new versions of each application.

00:20:28.380 --> 00:20:35.920
And there is another tool that crawls all the endpoints that are resisting this queue.

00:20:35.920 --> 00:20:37.940
That's the name of the application where we register.

00:20:38.380 --> 00:20:43.900
So basically you can make an API call to this crawler.

00:20:43.900 --> 00:20:48.440
And yeah, it will list to like all endpoints that we have.

00:20:48.440 --> 00:20:49.260
I see.

00:20:49.260 --> 00:20:51.680
So it does kind of like a service discovery thing for you.

00:20:51.680 --> 00:20:55.800
So you might start by saying, I want to talk to the credit card service.

00:20:55.800 --> 00:20:56.700
Where is it?

00:20:56.700 --> 00:20:57.420
Oh, it's over here.

00:20:57.420 --> 00:20:57.660
Okay.

00:20:57.660 --> 00:21:00.740
And then you go make a secondary call to that, something like this?

00:21:00.860 --> 00:21:01.140
Yes.

00:21:01.140 --> 00:21:09.980
And we use like, we make extensive use of Swagger, open API definitions for every application.

00:21:09.980 --> 00:21:14.440
We create like every application that use, that we have APIs for that.

00:21:14.660 --> 00:21:19.580
And all the definitions, like the Swagger definitions, they are like in an open endpoint.

00:21:19.580 --> 00:21:29.520
So we can describe like and know what API is waiting, like call or like what are the parameters and everything.

00:21:29.520 --> 00:21:34.680
And we have also a bunch of tools around Swagger and connection.

00:21:34.680 --> 00:21:36.180
It's one of these tools.

00:21:36.180 --> 00:21:36.620
Yeah.

00:21:36.620 --> 00:21:41.820
And this thing, Stoops, if you go, it's stups.io.

00:21:41.820 --> 00:21:45.420
And a lot of the components there are made out of Python.

00:21:45.420 --> 00:21:51.760
Like Raphael's team is currently working on Senzo, which is part of the Stoops ecosystem.

00:21:51.760 --> 00:21:57.220
They have this project called Lizzie that also is like works with Stoops.

00:21:57.220 --> 00:21:59.920
Raphael can explain it better for you.

00:21:59.920 --> 00:22:04.820
But a lot of that is Python, but also Java.

00:22:04.820 --> 00:22:06.180
And there's some closure, but.

00:22:06.180 --> 00:22:06.640
Yeah.

00:22:06.640 --> 00:22:12.940
Everything that I'm talking about here is in this Stoops.io and everything is open source.

00:22:12.940 --> 00:22:15.700
So you can just find it online.

00:22:15.700 --> 00:22:16.780
The documentation is online.

00:22:16.780 --> 00:22:17.880
Oh, that's really cool.

00:22:17.880 --> 00:22:18.120
Yeah.

00:22:18.120 --> 00:22:19.500
And it's really well documented.

00:22:19.500 --> 00:22:27.000
And it looks like it's really built to manage this type of set of applications within AWS.

00:22:27.000 --> 00:22:27.840
Right.

00:22:27.840 --> 00:22:34.640
Like it's built on cloud formation and cloud trail and all those different types of things.

00:22:34.640 --> 00:22:34.920
Right.

00:22:34.920 --> 00:22:35.320
Yeah.

00:22:35.320 --> 00:22:36.180
And they're built.

00:22:36.180 --> 00:22:38.340
They're based around making.

00:22:38.840 --> 00:22:43.960
So the idea of autonomy, right, is factored into the way that Stoops is architected.

00:22:43.960 --> 00:22:50.240
So if you have every team with their own AWS account, then Stoops helps those teams.

00:22:50.240 --> 00:22:50.720
Okay.

00:22:50.720 --> 00:22:51.300
Yeah.

00:22:51.300 --> 00:22:52.420
Work autonomously.

00:22:52.800 --> 00:22:59.940
But also helps us to consolidate a lot of this information flying around with all the different applications.

00:22:59.940 --> 00:23:08.960
And then if there is some sort of violation, Stoops has a mechanism for helping us report those and track them so that teams can fix.

00:23:08.960 --> 00:23:09.680
Okay.

00:23:10.100 --> 00:23:10.280
Yeah.

00:23:10.280 --> 00:23:12.940
It's a way of managing what the teams are doing.

00:23:12.940 --> 00:23:24.120
Like we have this full stop application that checks the cloud trail of the AWS accounts and then verify if each team is like following the rules.

00:23:24.120 --> 00:23:26.620
We have like rules of play here at Zalando.

00:23:26.620 --> 00:23:33.040
We have to follow these rules, like basically rules like of software development, like some best practices.

00:23:33.420 --> 00:23:42.740
And some of these practices are verified using this tool full stop automatically and it generates violations for the team.

00:23:42.740 --> 00:23:48.900
So it's like an alert and the team knows like, oh, I forgot to create a new version for this application.

00:23:48.900 --> 00:23:54.300
Or I forgot to like enable the swagger definition and point in my application or something.

00:23:54.300 --> 00:23:56.680
So it's really useful.

00:23:56.680 --> 00:24:00.900
And then it gets reported to your turn, which is like this fun.

00:24:00.900 --> 00:24:04.860
And you can go and search for your violations by your team.

00:24:04.860 --> 00:24:05.560
I see.

00:24:05.560 --> 00:24:05.820
Wow.

00:24:05.820 --> 00:24:06.880
This is really fascinating.

00:24:06.880 --> 00:24:09.900
That's quite a system that you guys have in place there.

00:24:09.900 --> 00:24:14.480
And the integration with swagger, which we can talk about in a little bit, is also really nice.

00:24:14.480 --> 00:24:19.200
So you can discover it in a meaningful way, not just know that it exists, right?

00:24:19.200 --> 00:24:19.700
Yeah.

00:24:19.700 --> 00:24:20.200
Yeah.

00:24:20.200 --> 00:24:20.920
Okay.

00:24:20.920 --> 00:24:21.240
Awesome.

00:24:21.240 --> 00:24:24.160
I'll definitely link to that in the show notes because that's a cool project.

00:24:24.160 --> 00:24:24.860
Mm-hmm.

00:24:24.860 --> 00:24:39.060
This portion of Talk Python is brought to you by Hired.

00:24:39.060 --> 00:24:42.100
Hired is the platform for top Python developer jobs.

00:24:42.100 --> 00:24:46.900
Create your profile and instantly get access to 3,500 companies who will work to compete with you.

00:24:46.900 --> 00:24:49.780
Take it from one of Hired's users who recently got a job and said,

00:24:50.180 --> 00:24:55.060
I had my first offer on Thursday after going live on Monday and I ended up getting eight offers in total.

00:24:55.060 --> 00:24:58.520
I've worked with recruiters in the past, but they've always been pretty hit and miss.

00:24:58.520 --> 00:25:01.360
I tried LinkedIn, but I found Hired to be the best.

00:25:01.360 --> 00:25:03.460
I really like knowing the salary up front.

00:25:03.460 --> 00:25:05.820
Privacy was also a huge seller for me.

00:25:05.820 --> 00:25:07.500
Sounds awesome, doesn't it?

00:25:07.500 --> 00:25:09.520
Well, wait until you hear about the signing bonus.

00:25:09.520 --> 00:25:12.940
Everyone who accepts a job from Hired gets $1,000 signing bonus.

00:25:13.020 --> 00:25:15.620
And as Talk Python listeners, it gets way sweeter.

00:25:15.620 --> 00:25:20.840
Use the link Hired.com slash Talk Python To Me and Hired will double the signing bonus to $2,000.

00:25:20.840 --> 00:25:22.640
Opportunities knocking.

00:25:22.640 --> 00:25:26.400
Visit Hired.com slash Talk Python To Me and answer the door.

00:25:26.400 --> 00:25:35.800
Vivi, Lori, go first on this question.

00:25:35.800 --> 00:25:38.760
What are some of the real technical challenges you guys have at Zalanda?

00:25:38.760 --> 00:25:40.880
Well, I think we talked about the scalability.

00:25:40.880 --> 00:25:42.180
So that's one.

00:25:42.740 --> 00:25:47.580
You know, when you're growing a team so quickly and how do you get everybody on board?

00:25:47.580 --> 00:26:03.160
And also, how do you make sure that the team ingredients are right when you're moving so fast so that you have your balance within teams of senior, junior, front end, back end?

00:26:03.160 --> 00:26:11.260
I mean, when you're coming from a more command and control background, like a lot of the teams were when radical agility went live,

00:26:11.740 --> 00:26:16.580
you're talking about engineers doing a lot of the teams of engineers.

00:26:16.580 --> 00:26:18.700
And so, you know, you're talking about engineers doing a lot of functional tasks and seeing themselves as the back ender.

00:26:19.580 --> 00:26:27.420
So why would I want to talk about the team?

00:26:27.420 --> 00:26:36.260
You know, about API calls and a lot of the team?

00:26:36.260 --> 00:26:40.520
And so, you know, so that's something that we're actually working on more recently.

00:26:40.760 --> 00:26:43.600
We're starting to we've rolled out an intersource pilot.

00:26:43.600 --> 00:26:44.120
So we've rolled out an intersource pilot.

00:26:44.120 --> 00:26:56.640
So not just doing open source for the world, but also internally because we have services and libraries and other stuff that we can't really release publicly.

00:26:57.600 --> 00:27:05.140
Either it's too, too embryonic or it's just really tightly connected to what we're doing and it wouldn't provide much value to the world.

00:27:05.640 --> 00:27:16.560
We used to just kind of release a lot of stuff online, too, which is partly explains why we have less open source on our dashboard than we did because we were kind of releasing stuff.

00:27:16.560 --> 00:27:21.460
Because radical agility was just very exciting for a lot of engineers.

00:27:21.460 --> 00:27:23.520
Like they get to finally like do open source.

00:27:23.760 --> 00:27:25.940
And so they just went to town.

00:27:25.940 --> 00:27:28.640
And now it's sort of like, OK, what is the purpose?

00:27:28.640 --> 00:27:31.600
Bringing that idea of purpose back into the work.

00:27:31.600 --> 00:27:37.840
And so if the purpose is to serve us, you know, we probably should just keep it on GitHub Enterprise and work on it ourselves.

00:27:37.840 --> 00:27:41.080
But, you know, ourselves isn't just our own team.

00:27:41.080 --> 00:27:45.880
It's the other team down the hall and the team in Dublin and the team in Helsinki.

00:27:45.880 --> 00:27:53.500
So we're really pushing this idea of inner source so that we can foster more collaboration internally.

00:27:53.500 --> 00:28:02.620
And over time, like you see, we have some repos where one engineer makes 600 commits and the next engineer makes maybe 100.

00:28:02.620 --> 00:28:03.060
Right.

00:28:03.060 --> 00:28:06.100
So there's this team imbalance with inner source.

00:28:06.100 --> 00:28:11.560
If you have more eyes on your work, more people asking questions, maybe making contributions.

00:28:12.460 --> 00:28:22.160
And hopefully over time, you start to see the workload balancing out and the knowledge that comes with making a service or library components starting to get more distributed around the teams.

00:28:22.160 --> 00:28:28.360
So this is a challenge because, you know, some teams are more ready for it than others.

00:28:28.360 --> 00:28:28.700
Right.

00:28:28.700 --> 00:28:35.700
Like, yeah, of course, people don't want anyone to look at their code because maybe they're afraid of being that it's bad.

00:28:35.700 --> 00:28:36.080
Right.

00:28:36.080 --> 00:28:56.940
So another challenge in all of this growth is making sure that you're reinforcing to your developers that they have the right to make mistakes and that they're here to learn and also to learn from their mistakes and get better at coding, get better at reviewing code and all of those other parts of the engineer's job.

00:28:56.940 --> 00:28:57.180
Yeah.

00:28:57.180 --> 00:28:57.460
Okay.

00:28:57.460 --> 00:28:58.900
Yeah, that's really cool.

00:28:58.900 --> 00:28:59.960
I'm a function.

00:28:59.960 --> 00:29:01.940
I'm a robot.

00:29:01.940 --> 00:29:05.460
I work on the database connection part or whatever.

00:29:05.460 --> 00:29:06.060
Yeah.

00:29:06.060 --> 00:29:07.140
Exactly.

00:29:07.140 --> 00:29:07.560
Yeah.

00:29:07.560 --> 00:29:25.400
So one of the primary goals of the whole agile thing in its origin was about this creating cross-functional teams and learning more vertical slices of the app than just being stuck on your little part.

00:29:25.400 --> 00:29:32.460
And you talked about switching to radical agility and that's based on Daniel Pink's work, which is his whole motivation thing is amazing.

00:29:32.460 --> 00:29:39.500
But can you talk a little bit about what makes radical agility different than, say, Scrum?

00:29:39.500 --> 00:29:42.040
Like, what is it like to actually do radical agility?

00:29:42.040 --> 00:29:42.380
Sure.

00:29:42.380 --> 00:29:46.480
So with Scrum, it's sort of your ceremonies, right?

00:29:46.540 --> 00:29:56.220
You have the Scrum process and you have the sprint and you have the certain number of meetings and it's pretty straightforward.

00:29:56.220 --> 00:30:01.780
You know, it's your start, your check-ins, your end and your retrospective.

00:30:01.780 --> 00:30:05.180
The team I'm working with has more of a Kanban approach.

00:30:05.720 --> 00:30:08.440
So I let them choose the backlog.

00:30:08.440 --> 00:30:11.320
So they order the tasks that they want to work on.

00:30:11.320 --> 00:30:20.540
They rate their priorities and we do a daily stand-up, but we don't have, like, fixed periods of time.

00:30:20.540 --> 00:30:22.440
Like, we're not doing a month long.

00:30:22.440 --> 00:30:27.500
We're just checking in regularly to make sure that the work gets done and keeps flowing.

00:30:28.200 --> 00:30:31.160
But there's also Scrum elements in that.

00:30:31.160 --> 00:30:32.940
So that's just with my team.

00:30:32.940 --> 00:30:38.320
But if you go down the hall, they may be working in a Scrum setup, like, to the book.

00:30:38.320 --> 00:30:48.480
You may go down the other hall and you may see a team that's doing some kind of Scrum waterfall Kanban mixture.

00:30:48.480 --> 00:30:55.460
I mean, every team is sort of at liberty to figure out what works best for them because there's just really no cut-and-dried.

00:30:55.460 --> 00:30:57.960
Scrum works for everyone.

00:30:57.960 --> 00:31:00.160
Or Kanban works for everyone.

00:31:00.160 --> 00:31:01.940
Teams have different personalities.

00:31:01.940 --> 00:31:04.460
They bring different ingredients to the table.

00:31:04.460 --> 00:31:11.600
And really what autonomy means is you find something that works, that helps you deliver, and you iterate on that.

00:31:11.600 --> 00:31:14.840
And it doesn't have to be any sort of fixed thing.

00:31:14.840 --> 00:31:19.900
I mean, you start talking about fixed systems, then you're counter-agile.

00:31:19.900 --> 00:31:20.840
Yeah.

00:31:20.840 --> 00:31:23.600
So that's – it's abstract.

00:31:23.600 --> 00:31:28.260
And it's hard to – it's part of that doesn't happen overnight thing.

00:31:28.260 --> 00:31:28.800
Of course.

00:31:28.800 --> 00:31:29.880
It seems to me like one of –

00:31:29.880 --> 00:31:30.360
It's a lot of iteration.

00:31:30.860 --> 00:31:31.000
Yeah.

00:31:31.000 --> 00:31:36.740
It seems to me like one of the things that's sort of core to Daniel Pink's work is about autonomy.

00:31:36.740 --> 00:31:49.260
And he's done some really interesting experiments and other – you know, brought together other experiments around sort of when you're doing knowledge work, what makes you the happiest and the most productive.

00:31:49.260 --> 00:31:54.860
And it's not the biggest pay increase or anything like that.

00:31:54.860 --> 00:31:57.840
It's about autonomy, right?

00:31:57.840 --> 00:31:59.940
Like you get to control your future.

00:31:59.940 --> 00:32:07.200
So it sounds to me like these different teams kind of get to have a lot of say in how they work day to day.

00:32:08.300 --> 00:32:08.740
Okay.

00:32:08.740 --> 00:32:09.260
Cool.

00:32:09.260 --> 00:32:09.600
Yeah.

00:32:09.600 --> 00:32:12.620
I think if you go to each team, here is all in the world differently.

00:32:12.620 --> 00:32:17.500
And like I really like to work in my team because we don't have a lot of bureaucracy.

00:32:17.500 --> 00:32:20.780
Like we have like stand-ups every day.

00:32:20.780 --> 00:32:29.000
It's just like to check in and see what – if you need some help or if you're stuck with something else that someone can help you.

00:32:29.000 --> 00:32:34.720
But we work kind of like I would say like open source.

00:32:34.720 --> 00:32:37.800
Like we really work with GitHub Enterprise and GitHub.

00:32:37.800 --> 00:32:40.420
Like it's where our projects are.

00:32:40.420 --> 00:32:45.280
And like we have clients like Summers here, like users of our applications.

00:32:45.280 --> 00:32:48.460
So they open issues there in the repos.

00:32:48.460 --> 00:32:57.660
And then we just have these plannings every Friday that where they say like, okay, this week more or less next week we will work on those issues.

00:32:57.660 --> 00:33:01.120
And then we just assign the tickets and work on it.

00:33:01.120 --> 00:33:04.760
And there's no overhead of what meetings.

00:33:04.760 --> 00:33:11.220
And we just sit, do our work, send up a request, send a link to people, say, hey, could you please review this?

00:33:11.220 --> 00:33:15.980
And we just basically work in this GitFlow thing and it's really good.

00:33:15.980 --> 00:33:18.420
I feel really comfortable work this way.

00:33:18.420 --> 00:33:19.800
Yeah, that's cool.

00:33:19.800 --> 00:33:22.900
The whole GitFlow style is really quite fantastic.

00:33:22.900 --> 00:33:25.740
So let me put the question to you, Rafael.

00:33:25.740 --> 00:33:32.600
Like what are you – from what you're doing and where you live in the whole technical space, what are the biggest challenges you see technically?

00:33:32.600 --> 00:33:47.780
Yeah, like right now I would say that is making the teams understand how our architecture work, like how our tools work, like these stops and how to use it properly to make them work faster.

00:33:48.560 --> 00:34:03.700
So right now I have like the biggest challenge now I would say that is spreading the idea on how to use and making the documentation better and making the applications work.

00:34:03.700 --> 00:34:11.080
Because I think we developed really good tools and we need to improve them because like we are changing.

00:34:11.480 --> 00:34:27.720
And there's a lot that we did before that could be improved now and I'm just like refactoring some code, like some old code that we had and making it work faster or work better and give better feedback to the users.

00:34:27.940 --> 00:34:50.440
And yeah, I think making this open source idea more internal, like Apple, like Laurie said about in-a-sourcing, like is more about like spreading how our projects work and make people use and be autonomous to just read the documentation and start working.

00:34:50.640 --> 00:34:54.840
So we really work developing tools for other teams.

00:34:54.840 --> 00:35:07.020
So I think this is very important for my team specifically and making, yeah, making the tools easy to use for the teams and make them be able to work autonomously.

00:35:08.160 --> 00:35:19.260
I mean, one of the challenges too, just to like, when you have a team of the size and teams are really, we've encouraged people to use the tools that they want to use to get the job done.

00:35:19.260 --> 00:35:33.700
But when, when you start to have too many tools, too many languages, too many things, then it becomes hard to, it becomes hard to intersource because you may have a great project, but one team is in Java.

00:35:33.700 --> 00:35:42.940
The project is in Python and the Java folks are going to have to ramp up a little bit to learn Python and they may not have the time to do that.

00:35:42.940 --> 00:35:50.360
So we've actually created a tech radar, taking a nod from ThoughtWorks who have their tech radar.

00:35:50.360 --> 00:35:53.820
So we implemented that idea for our own team.

00:35:53.820 --> 00:35:59.480
And so we have certain languages that are, it's all organized in concentric circles.

00:35:59.480 --> 00:36:13.260
So we have like our approved list, you know, we want you to use these things and then sort of like on hold so that we're flexible enough to start working with new technologies as they become more useful and more popular.

00:36:13.260 --> 00:36:20.800
And so we have a certain collection of languages we really encourage teams to use and Pythons being one of them.

00:36:20.800 --> 00:36:21.340
But yeah.

00:36:21.340 --> 00:36:23.680
That's a really smart idea, the whole tech radar thing.

00:36:23.680 --> 00:36:24.540
That's cool.

00:36:24.760 --> 00:36:24.920
Yeah.

00:36:24.920 --> 00:36:24.960
Yeah.

00:36:24.960 --> 00:36:27.720
ThoughtWorks, their thoughts work.

00:36:27.720 --> 00:36:31.220
I don't know if they use that, but maybe they.

00:36:31.220 --> 00:36:35.000
You just gave them a new tagline.

00:36:35.000 --> 00:36:35.680
Yeah.

00:36:35.680 --> 00:36:43.680
It's really cheesy, but yeah, they're probably, they're not, they probably would not want that.

00:36:43.680 --> 00:36:45.580
So I think, but yeah.

00:36:45.920 --> 00:36:46.280
Yeah.

00:36:46.280 --> 00:36:46.560
Cool.

00:36:46.560 --> 00:36:56.780
So you said that you had started out with sort of a Java monolith app and you're kind of moving more to this microservice architecture where there's more different technologies, smaller building blocks.

00:36:56.780 --> 00:36:58.060
It's all supported by steps.

00:36:58.060 --> 00:36:59.480
Can you talk a bit about that?

00:36:59.480 --> 00:36:59.840
Sure.

00:36:59.840 --> 00:37:00.300
Yeah.

00:37:00.300 --> 00:37:05.800
So when Zalando was founded, it was like Magento, it was PBHP.

00:37:06.440 --> 00:37:10.600
And that was fine for a little while, but then the company grew.

00:37:10.600 --> 00:37:14.760
And so we moved to the JVM in about three and a half months.

00:37:14.760 --> 00:37:18.740
So you can imagine, but that was like lots of work.

00:37:18.740 --> 00:37:23.700
And that worked pretty well for about five, four years or so.

00:37:23.780 --> 00:37:28.420
But then you have a monolith, such a huge company, such a huge team.

00:37:28.420 --> 00:37:34.740
It just made fixing bugs, working really slow and difficult.

00:37:34.740 --> 00:37:40.260
It held us pretty much to feature technology.

00:37:40.260 --> 00:37:49.300
And that's not very exciting if you want to play around with different languages, different technologies, even for the hiring side.

00:37:49.300 --> 00:37:58.200
Yeah, and as an open source evangelist view, right, like you can't easily release that as a thing to the world and to participate, right?

00:37:58.200 --> 00:37:59.940
Because it's just one giant Java app.

00:37:59.940 --> 00:38:00.480
Yeah.

00:38:00.480 --> 00:38:04.920
I mean, there were Python projects coming up this whole time, right?

00:38:04.920 --> 00:38:12.940
So we have a suite of Postgres tools that were created in Python, and some of them are about three years old.

00:38:12.940 --> 00:38:20.480
So there was a little bit of room more in the platform infrasight to develop in Python.

00:38:20.480 --> 00:38:23.080
There's a lot of Python developers there.

00:38:23.080 --> 00:38:27.240
But on the whole, yeah, it was pretty monolith.

00:38:27.240 --> 00:38:32.360
So then now with practical agility, there's this shift.

00:38:32.360 --> 00:38:34.180
Raphael mentioned the rules of play.

00:38:34.180 --> 00:38:40.600
One of the rules is microservices, you know, supporting and building out this kind of architecture.

00:38:40.940 --> 00:38:46.520
And so that's where you start seeing a lot of this diversity in languages and flexibility.

00:38:46.520 --> 00:38:55.300
And you can just rewrite stuff if you want to do it differently, you know, and it shouldn't take that long because it's a lot smaller.

00:38:55.300 --> 00:38:56.220
Yeah, that's cool.

00:38:56.220 --> 00:39:04.120
And, you know, you can make those things work if you have systems like steps in place to sort of bring together smoothly.

00:39:04.120 --> 00:39:05.320
And APIs.

00:39:05.320 --> 00:39:06.680
Yeah, and APIs.

00:39:06.680 --> 00:39:07.200
Absolutely.

00:39:08.200 --> 00:39:17.760
One of the big questions or decisions people are making, and it's sort of transitioning these days, but are you guys using Python 2 or using Python 3?

00:39:17.760 --> 00:39:24.800
Yeah, so we are, like, recommending new teams to, like, they are creating new projects to use Python 3.

00:39:24.800 --> 00:39:28.220
Python 3.5 specifically, like the latest version.

00:39:29.320 --> 00:39:31.320
And, yeah, most of the teams use Python 3.5.

00:39:31.320 --> 00:39:32.320
And, yeah, most of the teams use Python 3.5.

00:39:32.320 --> 00:39:37.280
But we have some old projects that use Python 2.7.

00:39:37.280 --> 00:39:43.620
And some projects, some applications that are developed in Python and run in our data center.

00:39:43.620 --> 00:39:48.800
And in our data center, we can just deploy applications with Python 2.7.

00:39:49.440 --> 00:39:53.920
But the idea is that we want to shut down the data center very soon.

00:39:53.920 --> 00:39:56.660
So, and migrate everything to AWS.

00:39:56.660 --> 00:40:01.540
And then the teams will be able to migrate fully to Python 3.

00:40:01.540 --> 00:40:06.420
But, yeah, mostly we recommend our new projects are in Python 3.

00:40:06.420 --> 00:40:07.760
Yeah, that's really cool to hear.

00:40:08.580 --> 00:40:13.800
Do you think that the microservice architecture and the API architecture made that more possible?

00:40:13.800 --> 00:40:19.320
Like, there's not some huge million-line Python 2.4 version?

00:40:19.320 --> 00:40:20.240
Yeah, definitely.

00:40:20.240 --> 00:40:21.060
Yeah.

00:40:21.060 --> 00:40:30.420
Like, having microservices instead of a big monolith application makes it easier to just replace the old application,

00:40:30.420 --> 00:40:37.340
just fix or update the code that we had before to be compatible with Python 3.

00:40:37.340 --> 00:40:44.480
And take advantage of the new libraries and integrations in the standard library of Python 3.

00:40:44.480 --> 00:40:51.180
So we can just even, like, reduce the dependencies and just have a more concise code.

00:40:51.180 --> 00:40:51.800
Yeah, that's cool.

00:40:51.800 --> 00:41:11.700
We all want to ship our software faster, respond to user requests quicker, and build an edge on the competition.

00:41:11.700 --> 00:41:16.760
But the faster you go, the more likely a bug or issue will slip by and cause your users grief.

00:41:16.760 --> 00:41:20.000
I have the same tradeoffs with my Talk Python websites and infrastructure.

00:41:20.480 --> 00:41:21.720
That's why I use SnapCI.

00:41:21.720 --> 00:41:25.280
Every time I check in at GitHub, SnapCI springs into action.

00:41:25.280 --> 00:41:27.580
A clean copy of code is pulled from GitHub.

00:41:27.580 --> 00:41:29.600
A Python 3 virtual environment is created.

00:41:29.600 --> 00:41:31.760
All the packages and dependencies are installed.

00:41:31.760 --> 00:41:33.060
The unit tests are run.

00:41:33.060 --> 00:41:36.840
Finally, I'm notified in Slack and a menu bar on my Mac about the outcome.

00:41:36.840 --> 00:41:40.460
That way, I know it's safe to ship a shiny new version of my web app.

00:41:40.460 --> 00:41:45.860
Ship your software faster with a 30-day free trial at snap.ci slash Talk Python.

00:41:45.860 --> 00:41:57.720
So let's talk about some of the open source projects you guys have going.

00:41:57.720 --> 00:42:01.060
You have your own GitHub pages section.

00:42:01.060 --> 00:42:04.200
So, Zalando.github.io.

00:42:04.880 --> 00:42:10.460
And in there, you have a really cool, you call it a dashboard, I guess.

00:42:10.460 --> 00:42:16.300
A really cool dashboard of all of your open source projects broken down repositories by language.

00:42:16.300 --> 00:42:18.400
And there's a bunch of cool stuff.

00:42:18.400 --> 00:42:20.920
So, first of all, how did you create that page?

00:42:20.920 --> 00:42:21.760
Do you guys know?

00:42:21.900 --> 00:42:26.540
In-house, it started as an onboarding team, an onboarding project.

00:42:26.540 --> 00:42:34.960
So our onboarding is pretty intense because every month we're adding dozens of new folks to the tech team.

00:42:34.960 --> 00:42:44.680
So we had a system, a program for a while where the newbies would work on something for part of their onboarding.

00:42:44.680 --> 00:42:48.080
And so the dashboard came about as that.

00:42:48.080 --> 00:42:53.640
And then in May, we made some fixes with our UX designers.

00:42:53.640 --> 00:42:59.320
And it was a different team just redesigned it and added the search feature.

00:42:59.320 --> 00:43:07.080
And we changed the formula a little bit to reward activity and external contributors and stars.

00:43:07.080 --> 00:43:12.020
So, like, you'll see Connection, which is Rafael's main project that he's working on.

00:43:12.020 --> 00:43:13.080
It's at the top project.

00:43:13.080 --> 00:43:13.960
Yeah, way to go.

00:43:13.960 --> 00:43:14.480
That's awesome.

00:43:14.480 --> 00:43:17.740
So this is really nice, a really nice way to showcase what you're doing.

00:43:17.740 --> 00:43:22.060
There's a lot of companies that, you know, if you set up an organization in GitHub,

00:43:22.060 --> 00:43:28.740
then you automatically get some kind of like this, a little bit, but just as a GitHub profile page.

00:43:28.740 --> 00:43:29.640
But this is really nice.

00:43:29.640 --> 00:43:33.000
So I was thinking, like, oh, where's the automatic generator of this thing?

00:43:33.000 --> 00:43:33.740
Because this is cool.

00:43:33.740 --> 00:43:37.800
Yeah, we have some really talented UX designers here.

00:43:37.800 --> 00:43:38.560
Okay.

00:43:38.560 --> 00:43:45.000
Shout out to Gloria Ruprecht, who is one of the UX designers that did this, like, in her spare time.

00:43:45.000 --> 00:43:48.160
Because a lot of the engineers happen to be on her team.

00:43:48.160 --> 00:43:51.260
And so she kind of got pulled into this a little.

00:43:51.260 --> 00:43:55.140
But, yeah, she and another UX designer, Gabriel.

00:43:55.140 --> 00:43:56.320
Yeah, nice work.

00:43:56.320 --> 00:43:57.100
Props to them.

00:43:57.100 --> 00:43:57.440
That's cool.

00:43:58.160 --> 00:44:00.560
So, Rafael, let's talk about your project a little bit.

00:44:00.560 --> 00:44:01.800
Let's talk about Connections.

00:44:01.800 --> 00:44:02.080
Okay.

00:44:02.080 --> 00:44:04.700
C-O-N-N-E-X-I-O-N.

00:44:04.700 --> 00:44:05.740
What is that?

00:44:05.740 --> 00:44:06.360
Yeah.

00:44:06.480 --> 00:44:15.520
So, Connections started as we were developing this tool, like, this API in Python for deploying applications.

00:44:15.520 --> 00:44:19.760
And, actually, Juan, we started even before I joined Zalando.

00:44:20.240 --> 00:44:34.140
And he realized that not only in this API, we would need, in this microservice, we would need to have, like, this Swagger handling and creating an API based on Swagger file.

00:44:34.140 --> 00:44:38.800
Because, yeah, here in Zalando, we have this process of creating microservices.

00:44:38.800 --> 00:44:43.420
You just don't, like, you started coding directly the microservice.

00:44:43.420 --> 00:44:51.400
We have the API guild that will review the API definition, like the Swagger file.

00:44:51.400 --> 00:45:00.280
So, if you want to create a new microservice here at Zalando, you go to the, you create your API definition, the Swagger file.

00:45:00.280 --> 00:45:08.120
And then you go to the API guild and you show them there is some guidelines and there is some rules that you should follow when creating a new API.

00:45:08.420 --> 00:45:17.840
And then they give you suggestions and give you insights on how to make your API look better and better for other people that are going to use it.

00:45:17.840 --> 00:45:24.740
And then you have a definition of your whole API, even before you write the first line of code.

00:45:24.740 --> 00:45:25.700
Yeah, that's awesome.

00:45:25.700 --> 00:45:25.880
Yeah.

00:45:25.880 --> 00:45:38.100
Let me just ask you for everyone's sake, because not everybody knows what Swagger is or how Swagger defines a documentation or how it can be used to actually build an API itself.

00:45:38.100 --> 00:45:39.560
So, what's Swagger?

00:45:39.560 --> 00:45:44.940
Yeah, Swagger is like a specification that is a standard.

00:45:44.940 --> 00:46:01.740
There is many standards that started popping up around specification of APIs, like how HTTP requests should be made and which endpoints are available, which parameters you're waiting, which validations are, like which formats the parameters should be.

00:46:02.340 --> 00:46:06.260
And I would say that Swagger is the one that's winning now.

00:46:06.260 --> 00:46:09.880
And this is recently supported by the Linux Foundation.

00:46:09.880 --> 00:46:14.220
And it's changing the name from Swagger to OpenAPI.

00:46:14.220 --> 00:46:19.280
So, that's why sometimes I would say Swagger OpenAPI because it's changing the name.

00:46:19.280 --> 00:46:21.520
The official name now is OpenAPI.

00:46:21.820 --> 00:46:23.060
So, it's the version 2.

00:46:23.060 --> 00:46:24.260
It's the latest version.

00:46:24.260 --> 00:46:25.540
They are working the version 3.

00:46:25.540 --> 00:46:28.340
But, yeah, currently we use the version 2.

00:46:28.340 --> 00:46:33.960
And, yeah, it's just a way to define your API in pretty good detail.

00:46:34.160 --> 00:46:43.420
Like, you can define the endpoints, the parameters, what are the HTTP status that should be expected by the clients.

00:46:43.960 --> 00:46:48.080
And from this specification, you can generate code.

00:46:48.080 --> 00:46:50.780
Like, there is a Swagger code gen.

00:46:50.780 --> 00:46:54.920
It's a tool that you can generate code in many different languages, including Python.

00:46:55.480 --> 00:47:05.820
And if you use the Swagger code gen, you can generate actually connection, Python code that uses connection out of your Swagger definition.

00:47:05.820 --> 00:47:17.220
And you can just write the code that already have dictionary validated and the way you expect it, the way you define Swagger definition.

00:47:17.480 --> 00:47:22.160
Yeah, so connection basically is a Flask, is built on top of Flask.

00:47:22.160 --> 00:47:32.120
You give it one of these Swagger files, which is a YAML file format that talks about the various endpoints and the type of data is passed to them and so on.

00:47:32.120 --> 00:47:37.900
And it will basically automatically set up the routing and the data passing.

00:47:37.900 --> 00:47:42.100
And you just write the functions to actually do the processing.

00:47:42.100 --> 00:47:43.360
Is that the right summary?

00:47:43.360 --> 00:47:44.840
Yes, exactly.

00:47:45.060 --> 00:47:53.380
In the Swagger file, there is like a property, like operation ID, and we use this property to assign which function should be called for each endpoint.

00:47:53.380 --> 00:47:54.800
But yeah, exactly.

00:47:54.800 --> 00:47:55.680
You described it.

00:47:55.680 --> 00:47:56.940
That's really cool.

00:47:56.940 --> 00:48:01.940
So if I created an API this way, can I go to it and like ask it for help?

00:48:01.940 --> 00:48:08.560
If I don't know what it is, I just find the base endpoint and will it show me like some kind of documentation of what the operations are available?

00:48:08.560 --> 00:48:08.900
Yes.

00:48:09.240 --> 00:48:17.560
By default, like connection enables the Swagger.json endpoint where it returns the Swagger definition.

00:48:17.560 --> 00:48:29.460
So if you have an API created using connection, this is enabled by default, but you can, of course, hide this if you don't want it to be available to anyone.

00:48:29.460 --> 00:48:33.480
At Zalando, we have this by default enabled.

00:48:33.480 --> 00:48:39.580
So you can inspect in your APIs and see what they expect and how you should call it.

00:48:39.840 --> 00:48:40.500
Okay, nice.

00:48:40.500 --> 00:48:43.340
And is there a way to get like a friendly human readable format?

00:48:43.340 --> 00:48:44.140
Yes.

00:48:44.140 --> 00:48:47.520
In connection, I also provide like UI for that.

00:48:47.520 --> 00:48:54.040
There is a Swagger UI that is like a standard in Swagger projects.

00:48:54.040 --> 00:48:59.020
And connection provides this as well in the UI.

00:48:59.020 --> 00:49:01.300
Like you have API creating connection.

00:49:01.300 --> 00:49:04.860
You just dash UI and you can see this dashboard.

00:49:05.320 --> 00:49:10.800
You can also disable it if you don't want, but there is this console that you can just have.

00:49:10.800 --> 00:49:17.140
You just have like an interface, HTTP page, HTML page where you can just make requests.

00:49:17.140 --> 00:49:18.460
Okay, yeah.

00:49:18.460 --> 00:49:20.560
To your API using like an interface.

00:49:20.560 --> 00:49:21.660
Yeah, that's really cool.

00:49:21.660 --> 00:49:30.220
And so this plays like a central role in describing and building a lot of the APIs that are in your steps.

00:49:30.220 --> 00:49:31.760
They're deployed into steps.

00:49:31.760 --> 00:49:32.560
Yes, yes.

00:49:32.620 --> 00:49:35.540
We have also the same idea as connection.

00:49:35.540 --> 00:49:44.060
Like you create first the definition and then generate and then write the code that handles the endpoints defined in the Swagger definition.

00:49:44.060 --> 00:49:50.620
We have also similar projects for different programming languages like Clojure and Java.

00:49:50.620 --> 00:49:51.740
And yeah.

00:49:51.740 --> 00:49:55.820
So you can just see, you know, Zalando GitHub page.

00:49:55.820 --> 00:49:56.120
Right.

00:49:56.120 --> 00:49:56.860
Oh, that's really cool.

00:49:56.860 --> 00:50:07.440
One of the challenges of these HTTP services or RESTful services is they're really nice to work with, but they're very opaque.

00:50:07.440 --> 00:50:14.380
You have almost no way to understand what they do or how they do it unless you just, you know, go and read the docs or something.

00:50:14.380 --> 00:50:14.740
Right.

00:50:14.740 --> 00:50:18.880
And so having these somewhat self-documenting is really cool.

00:50:19.140 --> 00:50:19.940
Yes, definitely.

00:50:19.940 --> 00:50:29.260
It's very important to tell the clients like how they should call the endpoints and have these documented.

00:50:29.260 --> 00:50:30.440
This is very important.

00:50:30.980 --> 00:50:42.440
And you can just use this documentation, which is parsable with a JSON file to generate code and generate clients that are up to date with your API.

00:50:42.440 --> 00:51:03.000
So connection, like the idea of using connection to have this, your server, your Microsoft using the definition of your endpoints to handle and validate the request, make it guarantees that the clients are going to call it properly.

00:51:03.000 --> 00:51:08.660
Like that the specification, the documentation of the API is up to date with your code.

00:51:08.760 --> 00:51:09.300
Yeah, that's cool.

00:51:09.300 --> 00:51:12.840
You just change the documentation and you can regenerate the clients as well.

00:51:12.840 --> 00:51:13.460
It's pretty awesome.

00:51:13.460 --> 00:51:15.240
Very nice.

00:51:15.240 --> 00:51:15.800
Very nice.

00:51:15.800 --> 00:51:21.860
So it seems like open source is something that you guys care more than most companies, I would say.

00:51:21.860 --> 00:51:25.440
I mean, you have like a special page showcasing all your GitHub work.

00:51:25.440 --> 00:51:28.720
You have, you've trimmed it down to 200 repositories.

00:51:28.720 --> 00:51:31.060
Like, so why the focus on open source there?

00:51:31.240 --> 00:51:41.720
I think one reason is that our VP of engineering is still a developer, loves code, introduced Scala to three different companies.

00:51:41.720 --> 00:51:53.100
And so he comes to his leadership style and what has helped create a culture where we really value the actual work of coding.

00:51:53.520 --> 00:51:59.840
So open source is probably the best way to be able to learn quickly.

00:51:59.840 --> 00:52:02.120
You make new projects at work.

00:52:02.120 --> 00:52:03.260
You iterate, you innovate.

00:52:03.260 --> 00:52:13.700
There's also the fun community aspect and how amazing it is when a little idea can turn into something so huge.

00:52:13.700 --> 00:52:18.440
Like you might have seen Linus Torvald's TED talk or TED like discussion.

00:52:18.440 --> 00:52:24.140
I think it was a TED conversation where he talks about how Linux and Git grew.

00:52:24.140 --> 00:52:25.700
I mean, he's just a guy in a room.

00:52:25.700 --> 00:52:29.980
And it becomes where this project is used around the world.

00:52:29.980 --> 00:52:34.840
And there's this something pretty magical in my opinion.

00:52:34.840 --> 00:52:38.460
It's also a really great way to solve your technical challenges.

00:52:38.460 --> 00:52:50.680
If something you're working with doesn't do the job, then if you're clever, you can make your own library or component and get your job done.

00:52:50.680 --> 00:52:57.360
So I think that it's really it's the most fun take on capitalism I can think of.

00:52:57.360 --> 00:53:11.180
I mean, this idea that huge, extremely successful tech companies with billions of dollars can provide this way for creative, smart people to just work for the love of it.

00:53:11.180 --> 00:53:13.040
Yeah, it's because they want to.

00:53:13.040 --> 00:53:13.840
Yeah, it's really amazing.

00:53:13.840 --> 00:53:24.500
I try to showcase companies that are actually building their business on open source in a way that the thing that is the foundation of their business, they're actually giving away.

00:53:24.500 --> 00:53:25.120
It's on GitHub.

00:53:25.120 --> 00:53:25.880
You can go get it.

00:53:25.880 --> 00:53:28.260
And yet there are these great, vibrant companies.

00:53:28.260 --> 00:53:30.060
I think, yeah, I think it's really amazing.

00:53:30.060 --> 00:53:34.760
And it's really cool that you guys are giving away and making public so much of what you're doing.

00:53:34.760 --> 00:53:37.120
Yeah, and it's a great conversation starter.

00:53:37.120 --> 00:53:47.860
Like I did an onboarding presentation to the new hires yesterday or the day before about our open source culture and just asking who in the room has already made something.

00:53:47.860 --> 00:53:51.340
Get these people really excited to talk about their work.

00:53:51.340 --> 00:53:53.640
They contributed to another project.

00:53:53.640 --> 00:53:54.980
Okay, what was that like?

00:53:54.980 --> 00:53:55.840
What did you learn?

00:53:55.840 --> 00:54:00.020
I mean, it's just really it's just all organic and fun.

00:54:00.020 --> 00:54:01.440
Yeah, I'm sure it is.

00:54:01.760 --> 00:54:08.960
Speaking of fun to work in these environments, you guys have quite a few interesting tech jobs available, right?

00:54:08.960 --> 00:54:11.880
At tech.zalando.de slash jobs.

00:54:11.880 --> 00:54:12.360
Mm-hmm.

00:54:12.360 --> 00:54:21.280
You had something like 17 software jobs and 12 data science jobs with machine learning and all sorts of cool stuff going on.

00:54:21.280 --> 00:54:27.880
So people, a lot of people out there listening are asking me, you'll send me messages like, hey, can you recommend a cool place to work or something?

00:54:27.880 --> 00:54:29.360
Like, yeah, check this out.

00:54:29.360 --> 00:54:30.780
That's definitely a good option, right?

00:54:30.780 --> 00:54:31.140
Yeah.

00:54:31.140 --> 00:54:31.600
Yeah.

00:54:31.600 --> 00:54:34.060
We have all levels, all backgrounds.

00:54:34.060 --> 00:54:37.040
It's such a diverse team.

00:54:37.040 --> 00:54:46.200
When you think about where everybody comes from, geographically, companies they've worked for previously or if it's their first job, you know, how did they get here?

00:54:46.200 --> 00:54:46.480
Yeah.

00:54:46.480 --> 00:54:50.960
I really like the idea to work with people from everywhere around the world.

00:54:50.960 --> 00:54:58.420
Like, I'm from Brazil, but in my team there is people from Poland, from Portugal, from Netherlands and from the U.S.

00:54:58.420 --> 00:54:59.540
There is people from everywhere.

00:54:59.540 --> 00:55:00.740
And it's really cool.

00:55:00.980 --> 00:55:01.660
Like, it's really nice.

00:55:01.660 --> 00:55:08.180
You have very interesting conversation, like, at the luncheon time or, like, about different cultures and backgrounds.

00:55:08.180 --> 00:55:08.920
And it's really cool.

00:55:08.920 --> 00:55:10.040
Yeah, that's really cool.

00:55:10.040 --> 00:55:11.180
Awesome.

00:55:11.180 --> 00:55:16.180
So people, check that out if you're interested in working on these types of projects.

00:55:16.600 --> 00:55:18.600
So I just have a few moments left.

00:55:18.600 --> 00:55:25.080
Let me ask you guys two questions that I normally ask everyone at the end of the show and whoever wants can take them.

00:55:25.080 --> 00:55:34.060
So on the Python package index, there are over 80,000 packages that do, you know, open source packages that do so many amazing things.

00:55:34.420 --> 00:55:37.120
Do you guys have one you recommend or that you think is pretty cool?

00:55:37.120 --> 00:55:37.520
Yeah.

00:55:37.520 --> 00:55:37.580
Yeah.

00:55:37.580 --> 00:55:39.540
Like, we use a lot of requests.

00:55:39.540 --> 00:55:42.000
It's a pretty known package.

00:55:42.360 --> 00:55:44.000
But, yeah, we use a lot.

00:55:44.000 --> 00:55:45.420
And it's really good.

00:55:45.420 --> 00:55:47.400
Like, I really, it works really nice.

00:55:48.160 --> 00:55:52.420
So I would really recommend if you don't know, you don't use it, you should.

00:55:52.420 --> 00:55:53.640
Yeah, requests are pretty awesome.

00:55:53.640 --> 00:56:07.000
And we have an engineer on our team, Henning, who, he was largely responsible for our Python work earlier on when we were the Java monoliths and didn't have too much happening with open source.

00:56:07.000 --> 00:56:10.040
So he's got a fair number of packages up there.

00:56:10.160 --> 00:56:12.120
So I'll give a plug for NSEnter.

00:56:12.120 --> 00:56:18.840
It's a Python package that lets you add, enter Linux kernel namespaces with a single syscall.

00:56:18.840 --> 00:56:19.940
So.

00:56:19.940 --> 00:56:20.980
Okay, awesome.

00:56:20.980 --> 00:56:23.600
He probably need it and made it himself.

00:56:23.600 --> 00:56:24.860
He's kind of like that.

00:56:24.860 --> 00:56:28.000
He just puts out a lot of code and lots of projects.

00:56:28.000 --> 00:56:28.880
Yeah, that's great.

00:56:28.880 --> 00:56:31.400
It's amazing how prolific some people are, right?

00:56:31.400 --> 00:56:31.940
Yes.

00:56:31.940 --> 00:56:32.840
Cool.

00:56:32.840 --> 00:56:33.840
He's one of them.

00:56:33.840 --> 00:56:34.660
Yeah, very cool.

00:56:34.660 --> 00:56:39.240
And then the other question is, when you write Python code, what editor do you use?

00:56:39.240 --> 00:56:45.640
Yeah, I personally use Emacs, but there's not many people here in the zone that use Emacs.

00:56:45.640 --> 00:56:47.940
Like, we have a guild and there is a few people there.

00:56:47.940 --> 00:56:51.820
But most of the people that work with Python here, they use PyCharm.

00:56:51.820 --> 00:56:52.460
Okay, yeah.

00:56:52.460 --> 00:56:54.400
PyCharm is definitely a good one.

00:56:54.400 --> 00:56:59.220
Emacs, I would say, is quite popular out there from the people I've interviewed.

00:56:59.220 --> 00:57:00.440
So, yeah, that's cool.

00:57:00.440 --> 00:57:01.360
I like Adam.

00:57:01.360 --> 00:57:02.360
Yeah.

00:57:02.360 --> 00:57:03.320
Adam works for me.

00:57:03.720 --> 00:57:09.960
Yeah, I think Emacs is like, if you really want to sharp your tool, like, I really like

00:57:09.960 --> 00:57:17.400
to spend time just configuring my editor and seeing it working better and having new key

00:57:17.400 --> 00:57:20.360
bindings that work, do magical things for me.

00:57:20.360 --> 00:57:20.760
Okay.

00:57:20.760 --> 00:57:21.500
Yeah, that's cool.

00:57:21.500 --> 00:57:22.480
Yeah, Emacs is great for that.

00:57:22.480 --> 00:57:24.540
And yeah, Adam, I like Adam as well.

00:57:24.540 --> 00:57:25.320
Yeah.

00:57:25.420 --> 00:57:28.300
Sublime Text also does the job.

00:57:28.300 --> 00:57:29.340
Yeah, very cool.

00:57:29.340 --> 00:57:30.940
I'm not too picky on features.

00:57:30.940 --> 00:57:38.420
It's like bare minimum, but I think both are so very loved by people who are picky about

00:57:38.420 --> 00:57:38.780
things.

00:57:38.780 --> 00:57:39.460
Nice.

00:57:39.460 --> 00:57:40.160
All right.

00:57:40.160 --> 00:57:41.440
Final call to action.

00:57:41.440 --> 00:57:45.120
People want to get started with your open source stuff or learn more about it.

00:57:45.120 --> 00:57:45.760
What do they do?

00:57:45.760 --> 00:57:47.720
You should go to Zalando.

00:57:48.560 --> 00:57:52.420
So that's Z-A-L-A-N-D-O dot GitHub dot I-O.

00:57:52.420 --> 00:57:54.340
Look at what we have.

00:57:54.340 --> 00:57:55.480
Poke around.

00:57:55.480 --> 00:57:57.640
See if there's something that looks interesting.

00:57:57.640 --> 00:58:00.560
Definitely try out a connection.

00:58:00.560 --> 00:58:01.380
Check it out.

00:58:01.380 --> 00:58:05.480
See if there's some feature or bug you want to fix.

00:58:05.480 --> 00:58:06.800
Ping Raphael.

00:58:06.800 --> 00:58:09.640
He'll probably be the one responding to you if it's not Jao.

00:58:09.640 --> 00:58:12.560
We have a bunch of open source features there.

00:58:12.560 --> 00:58:14.820
You can just pick one and work on it.

00:58:14.820 --> 00:58:19.180
And there's another project, too, that's pretty exciting called Patroni that's also

00:58:19.180 --> 00:58:20.220
coded in Python.

00:58:20.220 --> 00:58:25.660
And we're actually trying to get more folks that use Kubernetes with Google Cloud Engine

00:58:25.660 --> 00:58:26.960
to try that one out.

00:58:26.960 --> 00:58:30.920
But we have a lot of Postgres fans.

00:58:30.920 --> 00:58:32.940
We have a couple experts even in Postgres.

00:58:32.940 --> 00:58:34.720
We've been using it for several years.

00:58:34.720 --> 00:58:38.020
And so Patroni is a template for Postgres high availability.

00:58:38.020 --> 00:58:41.540
And you can use it with Zookeeper, etcd, or console.

00:58:41.540 --> 00:58:43.440
And we developed it.

00:58:43.440 --> 00:58:45.380
We have Josh Burgess of Red Hat.

00:58:45.380 --> 00:58:46.300
He's made a couple.

00:58:46.300 --> 00:58:47.440
Maybe I should say.

00:58:47.440 --> 00:58:48.760
I shouldn't be.

00:58:48.760 --> 00:58:51.060
He's made quite a number of contributions.

00:58:51.060 --> 00:58:54.100
And has also talked about it at KubeCon.

00:58:54.100 --> 00:59:00.340
So we're really trying to get more users of it, especially in the Kubernetes community.

00:59:00.340 --> 00:59:02.200
Yeah, those sound like great projects.

00:59:02.200 --> 00:59:08.020
And yeah, you guys have a ton of open source things available on your GitHub pages of links.

00:59:08.020 --> 00:59:10.120
So be sure to link to all those things.

00:59:10.120 --> 00:59:12.680
Lori, Raphael, it's been great to talk to you.

00:59:12.680 --> 00:59:13.380
Thanks for being on the show.

00:59:13.620 --> 00:59:14.520
Yeah, thank you.

00:59:14.520 --> 00:59:14.880
Yep.

00:59:14.880 --> 00:59:15.160
Bye.

00:59:16.740 --> 00:59:19.660
This has been another episode of Talk Python To Me.

00:59:20.220 --> 00:59:22.800
Today's guests have been Lori Apple and Raphael Carricio.

00:59:22.800 --> 00:59:25.920
And this episode has been sponsored by Hired and SnapCI.

00:59:25.920 --> 00:59:27.840
Thank you both for supporting the show.

00:59:27.840 --> 00:59:30.860
Hired wants to help you find your next big thing.

00:59:30.860 --> 00:59:36.660
Visit Hired.com slash Talk Python To Me to get five or more offers with salary and equity presented right up front.

00:59:36.860 --> 00:59:39.360
And a special listener signing bonus of $2,000.

00:59:39.360 --> 00:59:43.700
SnapCI is modern, continuous integration and delivery.

00:59:43.700 --> 00:59:46.300
Build, test, and deploy your code directly from GitHub.

00:59:46.300 --> 00:59:49.560
All in your browser with debugging, Docker, and parallels included.

00:59:49.940 --> 00:59:52.620
Try them for free at SnapCI slash Talk Python.

00:59:52.620 --> 00:59:58.980
I'm so excited to finally be able to unveil my Python for Entrepreneurs course that I told you about at the top of the show.

00:59:59.220 --> 01:00:07.340
If you want to learn Python web development and launch an online business, you owe it to yourself to check out the Kickstarter at talkpython.fm/launch.

01:00:07.340 --> 01:00:09.960
I hope we can build something amazing together.

01:00:09.960 --> 01:00:16.240
You can find the links from this episode at talkpython.fm/episodes slash show slash 72.

01:00:16.960 --> 01:00:18.680
Be sure to subscribe to the show.

01:00:18.680 --> 01:00:20.880
Open your favorite podcatcher and search for Python.

01:00:20.880 --> 01:00:22.120
We should be right at the top.

01:00:22.120 --> 01:00:31.400
You can also find the iTunes feed at /itunes, Google Play feed at /play, and direct RSS feed at /rss on talkpython.fm.

01:00:31.400 --> 01:00:36.360
Our theme music is Developers, Developers, Developers by Corey Smith, who goes by Smix.

01:00:36.360 --> 01:00:43.040
Corey just recently started selling his tracks on iTunes, so I recommend you check it out at talkpython.fm/music.

01:00:43.220 --> 01:00:48.420
You can browse his tracks he has for sale on iTunes and listen to the full-length version of the theme song.

01:00:48.420 --> 01:00:50.300
This is your host, Michael Kennedy.

01:00:50.300 --> 01:00:51.580
Thanks so much for listening.

01:00:51.580 --> 01:00:52.780
I really appreciate it.

01:00:52.780 --> 01:00:54.920
Smix, let's get out of here.

01:00:54.920 --> 01:01:16.480
Stay tuned.

01:01:16.480 --> 01:01:16.640
you

01:01:16.640 --> 01:01:17.140
you

01:01:17.140 --> 01:01:47.120
Thank you.

