#72: Fashion-driven open source software at Zalando Transcript
00:00 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:07 Well, you'll find out on this episode of Talk Python to Me.
00:10 We'll meet Lori Apple and Rafael Carricio from Zalando, where developers there have published almost 200 open-source projects on GitHub.
00:17 Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the ecosystem.
00:47 This is your host, Michael Kennedy. Follow me on Twitter, where I'm @mkennedy.
00:53 Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via at Talk Python.
00:59 This episode is brought to you by Hired and SnapCI.
01:03 Thank them for supporting the show on Twitter via at Hired underscore HQ and at Snap underscore CI.
01:10 Hey, everyone. Last episode, I told you about my crazy student reward for the Kickstarter.
01:15 Well, it turns out that Kickstarter is not super keen on us doing that.
01:19 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.
01:26 So sadly, we'll have to pull back that cool offer.
01:28 However, I'm replacing it with something that might even be better.
01:31 Instead of funding some of the businesses that successfully launch out of the course,
01:34 we'll have a special Talk Python to Me episode featuring and looking inside a couple of them.
01:39 Keep an eye out for that in six months or so.
01:42 Now, let's talk about fashionable open source code.
01:44 Lori, Raphael, welcome to the show.
01:47 Thanks.
01:48 Thanks.
01:48 It's good to be here.
01:49 Yeah, I'm really excited to talk to you guys about what's going on in Zalando.
01:52 It seems like you're doing a lot of cool Python things, and I think it'll be a fun story for the audience.
01:58 Yeah, I hope so.
01:59 Yeah, definitely.
02:00 All right, so both of you guys on the show.
02:03 So let's get started by talking about your background a little bit.
02:07 How did you get into software?
02:09 Lori, you want to go first?
02:10 Sure.
02:11 My name is Lori Apple, and I'm the open source evangelist in Zalando.
02:15 And I came into technology after law school.
02:20 So my background is not really in programming.
02:22 It's more in journalism.
02:23 I did some PR.
02:25 I also studied law.
02:28 And so right after law school, I started working in tech companies on and off.
02:32 And then in 2012, I started working at Gilt and became their technology evangelist.
02:39 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.
02:50 And then I came to Zalando 2015, so last February.
02:55 And first I was doing technology evangelism.
02:57 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.
03:06 If you look at our dashboard, we have almost 200 projects.
03:10 And so there's lots to maintain.
03:13 And I'm also managing agile project managing a team.
03:16 So I guess I have two jobs here.
03:19 Yeah, that sounds really fun.
03:20 And you guys do have a lot going on.
03:22 We'll talk about some of your open source projects.
03:25 But, yeah, you pull that up and it's quite a list of stuff there.
03:29 Yeah, and there used to be a lot more.
03:30 But I will talk about why there isn't that much.
03:33 Oh, interesting.
03:34 Okay.
03:34 Yeah, cool.
03:35 Yeah.
03:35 And I think software developer evangelist or even more specialized, open source evangelist, I think that's such a fun sounding job.
03:46 It's never been a job I've had, but I've known some people who've done it.
03:48 And it seems like you get some of the best part of the tech community, right?
03:52 You get to bring people together to have fun, to talk about the cool, exciting stuff they're doing.
03:56 That's great.
03:57 Yeah, I mean, you link people together.
03:59 And what I like about open source evangelism is I get to focus on code and working with engineers.
04:04 And I love products and UX and even other aspects of technology evangelism.
04:12 But really working with the engineers and getting them to think of their code and their projects as products is really fun.
04:20 Yeah, that's awesome.
04:21 Raphael, how about you?
04:23 What's your story?
04:23 So I started playing with computers like around 2000.
04:28 But I only started like real programming in 2005 when I started my university.
04:35 I don't know why I didn't go into programming before because I was playing with Linux since 2002.
04:43 But I was mostly like fascinated about web.
04:48 And I discovered that everything was HTML.
04:51 So I started like learning about that.
04:53 But I don't count that as programming.
04:56 But I started programming, like programming things that were really fun in 2005.
05:03 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.
05:12 That's really interesting.
05:13 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.
05:27 It just seemed so unattainable to me in the beginning.
05:30 But then it turns out it wasn't, right?
05:33 Yeah, it's a growing story.
05:33 Yeah.
05:34 Yeah.
05:34 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.
05:46 So I just was doing my stuff myself and reading blogs online and things.
05:51 So but when I started programming, I got really excited.
05:55 And like in the first two weeks, I was learning Pascal at that time.
06:00 And the first two weeks, I just wrote this poem in the console.
06:03 My professor was really impressed and it was really cool.
06:06 Since then, I just got crazy and I really liked everything that I was learning.
06:12 And then I had to find a job quickly because my parents didn't have money to pay for my university in Brazil.
06:19 So yeah, I'm from Brazil.
06:21 And then I found a job in the first year of university.
06:26 And I was working with Java at that time because in my hometown is not a big city.
06:31 So I had only like job positions in Java.
06:35 And then in 2007, I discovered Python.
06:40 I was just looking for like a easier or more like concise way of writing code.
06:47 And then I found Python.
06:50 I was really happy.
06:51 Like I really like it.
06:53 I found it strange like this spacing and like indentation to define blocks in Python.
07:00 But then I just got over it and I really like Python.
07:04 I started loving it, but I couldn't work with that professionally at the time.
07:08 And then in 2009, I had the opportunity to like create my own company.
07:12 Someone just contacted me and said, hey, I have this idea.
07:15 Do you want to work with this with me?
07:18 And then I said, okay, yeah.
07:19 And I started to work with Python for web development used in Django.
07:24 And it was really cool.
07:25 And since then, I just mostly have been working with Python.
07:29 I worked with Ruby for like two years recently.
07:32 But it was just an adventure like in another language to get to know more about different
07:38 communities.
07:39 But I really like Python.
07:41 And I decided to like get back to Python.
07:43 And this year, I joined Zalando.
07:45 And I started working with Python again.
07:47 And I really like it.
07:48 Oh, yeah.
07:49 That's a cool story.
07:50 I think a lot of people get freaked out by the white space, the significant white space
07:54 and the indentation.
07:55 You're like, you know, especially if you come from a...
07:58 Just two up.
07:58 It's totally a...
08:00 It's a different way of thinking, right?
08:02 Normally, you're used to other languages, C languages, JavaScript-y languages that have
08:08 curly braces and semicolons and all this formality in the language that's extra symbols in the
08:15 language, I guess.
08:16 And they just seem required when you learn programming.
08:19 But then if you go and learn Python, if you learn Python first, I suspect it's different.
08:24 But if you go and then learn Python, you're like, well, how can it work without all these
08:28 support symbols?
08:29 But it takes about a day.
08:31 And then you're like, I don't miss those anymore.
08:33 Yeah.
08:33 I think I started understanding more when I started like getting into parsers and writing,
08:39 like trying to write compilers and things.
08:41 I really like this.
08:42 Like language, like creation things.
08:45 And then after I got some experience, I studied that in university and I started doing some work
08:52 myself on that.
08:54 I discovered like, OK, yeah, you can just like space to define blocks.
08:58 And it's not that hard.
09:00 And then I understood fully in this Python thing.
09:03 And it's actually better now.
09:05 I feel like it's good that you can just write less and have more power when you write something.
09:12 That's why I like it, too.
09:13 I mean, I've done coding in Python, especially with Django Girls.
09:18 They've got great workshops.
09:20 Yeah, Django Girls are great.
09:22 Yeah.
09:22 So I did their weekend make a blog from scratch.
09:27 Oh, nice.
09:27 And it was really, really quite fun.
09:29 But I think for somebody who likes to be sparse with language, it's great.
09:35 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,
09:43 like what it means philosophically, because there's nothing there, but there's everything there.
09:48 You know, I'm sure like somebody could have a lot of fun with something going on.
09:53 Yeah, that would be a cool, like, language philosophy talk.
09:57 Yeah, that's awesome.
09:58 Yeah.
09:58 Free conference talk idea for anyone who wants to pursue it.
10:03 There you go.
10:05 Yeah, I think there is a lot of things online about that.
10:08 Yeah.
10:09 I'm not sure.
10:09 But I'm sure I read things about that.
10:12 Nice.
10:14 Yeah.
10:14 Many people have the same practice.
10:16 They have the same experience.
10:17 Yeah, that's cool.
10:18 I think, you know, you said Django Girls.
10:20 And I think one of the things that's special about Python and open source is the community is just so supportive and enthusiastic.
10:29 Mm-hmm.
10:30 It's huge.
10:31 I remember I had a PC once, and I had to download all of these little components, like Sigwin.
10:37 And it was just, you know, on a Mac, it's so simple.
10:40 And then my computer was old and screwed up, and I brought it to this meetup.
10:45 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.
10:58 We didn't actually get there, but it got far.
11:01 That's too bad.
11:02 It was a piece of crap computer.
11:06 It's been really hard on Windows traditionally to do Python, but it's getting better, actually.
11:12 You know, the guy's one of the Python core developers, Steve Dowers, works at Microsoft, and he's reworking.
11:18 He reworked, I think it's probably a continuing project, the installer.
11:23 So things install a lot better at work.
11:25 And so it's a better story these days.
11:28 But, yeah, it's still tough.
11:29 So let's talk about Zalando a little bit, just the background of it.
11:33 So a lot of people probably haven't heard of it.
11:36 What is Zalando?
11:36 Yeah, so a lot of people in Europe have heard of it.
11:39 But as an American, you're American too.
11:42 Yeah, I didn't know about the company until my former colleague had started working here as the VP of engineering.
11:49 So he's basically the head of engineering for the company.
11:53 So Zalando is Europe's leading fashion platform.
11:56 And so it's in 15 countries in Europe.
11:59 Just today we got new figures.
12:02 So we have now more than 19 million active users, more than 11,000 employees.
12:08 So about 1,300 plus are tech.
12:12 And we're based in Berlin.
12:14 We have tech hubs.
12:16 This is just for tech, not just the whole company, but for the department.
12:21 We have tech hubs in Dublin, Helsinki, a couple other German cities.
12:27 So the company has been growing like crazy.
12:31 When I got here, the tech team was maybe 650.
12:34 So that was just 18 months ago.
12:36 Wow.
12:37 So it's almost doubled, huh?
12:39 Yeah, and we didn't have a Dublin office or a Helsinki office.
12:42 We've acquired a couple of companies to build ourselves out as a platform for real.
12:48 So we have ad tech happening now and lots of content features coming up.
12:57 I mean, it's quite a...
12:59 That's really cool.
13:00 Yeah, that's quite a powerhouse.
13:01 So you guys, your major product is sort of online fashion stuff, right?
13:09 So if I want to buy clothes or like a cool suit or slacks or something like that?
13:13 Right.
13:14 So we work with all of the major brands you're familiar with.
13:18 Any household fashion brand, you're probably going to find it on our website.
13:24 And we went public two years ago too.
13:26 So that was a nice success.
13:29 Yeah, that's cool.
13:30 That's really cool.
13:31 So is it a technical challenge, both the software development side and carrying this open source
13:39 message when you guys are growing so fast and acquiring other companies that maybe have
13:44 different approaches?
13:44 Oh, sure.
13:45 And if you think about...
13:46 We're very international in our tech team as well.
13:50 So you have lots of different interpretations of how a tech team should work and what agile
13:57 is.
13:58 And some of our engineers, they've never really worked in an agile environment.
14:02 And so when you're growing that fast and you're trying to scale so quickly and work in an agile
14:08 way, it's very interesting.
14:10 This company was not always agile.
14:13 There was a shift last spring.
14:16 So spring 2015 towards this mindset called radical agility.
14:20 And this is where we officially introduced autonomous teams and mastery and purpose.
14:26 So the pillars are based on Daniel Pink's drive, which was where autonomy, mastery and purpose
14:33 comes from.
14:34 Daniel Pink has a really cool book and way of thinking.
14:37 So we basically adopted that and revamped the tech organization.
14:44 I mean, some teams had already been working in this fashion, but not department wide.
14:49 And so we said, OK, teams, you're autonomous.
14:52 And then now you're also going to have twice as many teams within 18 months.
14:57 And we're still growing.
14:58 So, yeah, there's all kinds of interesting learnings and experiences that you get when you
15:03 when you subject yourself to something so courageous.
15:07 It really is courageous for the tech leadership to take such a change on because you just don't
15:13 do it overnight.
15:13 You know, when I heard the first time about Zalando, it was just a website where you could
15:18 buy clothes and stuff.
15:20 And many people here still have this idea that Zalando is just, oh, it's just a shop.
15:24 It's just a shop online, a website.
15:26 But when I got here, I discovered that there is much more than just a website, a shop where
15:32 you can buy things like Zalando have the Datware warehouse, like where they store all the
15:37 clothing, take pictures of every article, like every piece of clothing and to put in the
15:43 website, tweet the photos.
15:45 So there is a lot of things that happen behind the scenes to this website to work.
15:51 And all of this is developed in-house, like the technology for all these levels, let's say.
15:58 And then when I started here, I discovered that and I was like, whoa, yeah, there is a lot
16:03 to do here.
16:04 Yeah.
16:05 It's not just a website.
16:06 Yeah, that's really cool.
16:07 You guys have the whole sort of web property of a bunch of API things going on.
16:12 You have some machine learning.
16:14 We're going to dig into all those things in time.
16:16 But yeah, there's definitely a bunch of cool stuff happening there.
16:19 Laura, you talked about what you do at Zalando with the open source evangelists and project
16:24 management and stuff like that.
16:26 Raphael, how about you?
16:28 What are you working on there?
16:29 Yeah.
16:29 So I currently work at the continuous delivery team.
16:32 So my team, there is like three sub teams in the team I work.
16:38 But basically, we maintain the continuous deployment for other things, like tools around that and
16:45 jenks.
16:46 So each team have Jenkins instance to run tests and like deployment jobs.
16:54 So currently working, like creating these tools to enable teams to deploy easier, like and automatic.
17:03 So they don't need to manually go to the machine, like SSH to the machine to make a deploy or anything
17:09 like that.
17:09 So we just use some tools.
17:11 So we have some open source tools like Senza and like all the things that we use to deploy.
17:18 And I also work in some open source projects at Zalando that support like that we use to create
17:26 those tools.
17:27 So connection is one of those projects.
17:30 Yeah.
17:31 And basically, that's what I do.
17:34 I develop software here.
17:36 And I also support teams also in like helping them.
17:39 Like they come to me.
17:40 They sit next to me and say, hey, Raphael, I cannot deploy.
17:42 Like there's a problem here.
17:44 And I see if it's a bug or if he just missed using the tool.
17:48 Sure.
17:49 Oh, that's really cool.
17:51 And I saw that you guys are using a lot of interesting container technologies.
17:56 So are you using Docker?
17:58 Yes.
18:00 Yes.
18:01 Basically, like our applications that we deploy in production, like we use AWS CloudFormation
18:08 API.
18:09 And like we have infrastructure around AWS, which is called Stubs platform.
18:17 It's completely open source.
18:19 Like there's many applications that work together for deployment.
18:22 And yeah, we use Docker as a packaging format for the applications that we have.
18:30 And then we have like our one Docker repository, which is P1.
18:37 So we push the image there.
18:44 And we use AWS CloudFormation API to like create the whole stack of the application.
18:51 Like the whole stack when we release a new version of the application.
18:56 And then we just switch the traffic to this new stack.
18:58 So yeah.
18:59 So yeah.
19:00 And there is other tools to access the machine.
19:03 And everything is logged.
19:06 So you know, like, you know, like, who accesses which machine for what and which time, in what time.
19:13 And this is very important for traceability and for compliance here in Europe.
19:19 Yeah.
19:19 Of course.
19:21 How many different systems do you have running in AWS?
19:24 It must be a ton, right?
19:25 Yeah.
19:27 There is a lot.
19:28 I don't even know.
19:29 Yeah.
19:30 How do you guys keep track of that?
19:31 Each team have their one AWS account.
19:34 And we have one service that like in this Stops platform, we have one service that crawls like all the APIs that we have.
19:44 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.
19:56 Yeah.
19:57 So you've got like an app to manage your apps.
19:59 Okay.
20:00 That seems pretty standard in Docker though, right?
20:02 Because it's hard to know what is where.
20:04 Yeah.
20:05 Yeah.
20:05 So here we have like a central point where we register all applications.
20:09 So from that, you get access, like your application can get credentials to access Amazon and to access other applications endpoints using OAuth 2.
20:21 And also these applications manage the versions for like the new versions of each application.
20:28 And there is another tool that crawls all the endpoints that are resisting this queue.
20:35 That's the name of the application where we register.
20:38 So basically you can make an API call to this crawler.
20:43 And yeah, it will list to like all endpoints that we have.
20:48 I see.
20:49 So it does kind of like a service discovery thing for you.
20:51 So you might start by saying, I want to talk to the credit card service.
20:55 Where is it?
20:56 Oh, it's over here.
20:57 Okay.
20:57 And then you go make a secondary call to that, something like this?
21:00 Yes.
21:01 And we use like, we make extensive use of Swagger, open API definitions for every application.
21:09 We create like every application that use, that we have APIs for that.
21:14 And all the definitions, like the Swagger definitions, they are like in an open endpoint.
21:19 So we can describe like and know what API is waiting, like call or like what are the parameters and everything.
21:29 And we have also a bunch of tools around Swagger and connection.
21:34 It's one of these tools.
21:36 Yeah.
21:36 And this thing, Stoops, if you go, it's stups.io.
21:41 And a lot of the components there are made out of Python.
21:45 Like Raphael's team is currently working on Senzo, which is part of the Stoops ecosystem.
21:51 They have this project called Lizzie that also is like works with Stoops.
21:57 Raphael can explain it better for you.
21:59 But a lot of that is Python, but also Java.
22:04 And there's some closure, but.
22:06 Yeah.
22:06 Everything that I'm talking about here is in this Stoops.io and everything is open source.
22:12 So you can just find it online.
22:15 The documentation is online.
22:16 Oh, that's really cool.
22:17 Yeah.
22:18 And it's really well documented.
22:19 And it looks like it's really built to manage this type of set of applications within AWS.
22:27 Right.
22:27 Like it's built on cloud formation and cloud trail and all those different types of things.
22:34 Right.
22:34 Yeah.
22:35 And they're built.
22:36 They're based around making.
22:38 So the idea of autonomy, right, is factored into the way that Stoops is architected.
22:43 So if you have every team with their own AWS account, then Stoops helps those teams.
22:50 Okay.
22:50 Yeah.
22:51 Work autonomously.
22:52 But also helps us to consolidate a lot of this information flying around with all the different applications.
22:59 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.
23:08 Okay.
23:10 Yeah.
23:10 It's a way of managing what the teams are doing.
23:12 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.
23:24 We have like rules of play here at Zalando.
23:26 We have to follow these rules, like basically rules like of software development, like some best practices.
23:33 And some of these practices are verified using this tool full stop automatically and it generates violations for the team.
23:42 So it's like an alert and the team knows like, oh, I forgot to create a new version for this application.
23:48 Or I forgot to like enable the swagger definition and point in my application or something.
23:54 So it's really useful.
23:56 And then it gets reported to your turn, which is like this fun.
24:00 And you can go and search for your violations by your team.
24:04 I see.
24:05 Wow.
24:05 This is really fascinating.
24:06 That's quite a system that you guys have in place there.
24:09 And the integration with swagger, which we can talk about in a little bit, is also really nice.
24:14 So you can discover it in a meaningful way, not just know that it exists, right?
24:19 Yeah.
24:19 Yeah.
24:20 Okay.
24:20 Awesome.
24:21 I'll definitely link to that in the show notes because that's a cool project.
24:24 Mm-hmm.
24:24 This portion of Talk Python is brought to you by Hired.
24:39 Hired is the platform for top Python developer jobs.
24:42 Create your profile and instantly get access to 3,500 companies who will work to compete with you.
24:46 Take it from one of Hired's users who recently got a job and said, I had my first offer on Thursday after going live on Monday and I ended up getting eight offers in total.
24:55 I've worked with recruiters in the past, but they've always been pretty hit and miss.
24:58 I tried LinkedIn, but I found Hired to be the best.
25:01 I really like knowing the salary up front.
25:03 Privacy was also a huge seller for me.
25:05 Sounds awesome, doesn't it?
25:07 Well, wait until you hear about the signing bonus.
25:09 Everyone who accepts a job from Hired gets $1,000 signing bonus.
25:13 And as Talk Python listeners, it gets way sweeter.
25:15 Use the link Hired.com slash Talk Python to me and Hired will double the signing bonus to $2,000.
25:20 Opportunities knocking.
25:22 Visit Hired.com slash Talk Python to me and answer the door.
25:26 Vivi, Lori, go first on this question.
25:35 What are some of the real technical challenges you guys have at Zalanda?
25:38 Well, I think we talked about the scalability.
25:40 So that's one.
25:42 You know, when you're growing a team so quickly and how do you get everybody on board?
25:47 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?
26:03 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,
26:11 you're talking about engineers doing a lot of the teams of engineers.
26:16 And so, you know, you're talking about engineers doing a lot of functional tasks and seeing themselves as the back ender.
26:19 So why would I want to talk about the team?
26:27 You know, about API calls and a lot of the team?
26:36 And so, you know, so that's something that we're actually working on more recently.
26:40 We're starting to we've rolled out an intersource pilot.
26:43 So we've rolled out an intersource pilot.
26:44 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.
26:57 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.
27:05 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.
27:16 Because radical agility was just very exciting for a lot of engineers.
27:21 Like they get to finally like do open source.
27:23 And so they just went to town.
27:25 And now it's sort of like, OK, what is the purpose?
27:28 Bringing that idea of purpose back into the work.
27:31 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.
27:37 But, you know, ourselves isn't just our own team.
27:41 It's the other team down the hall and the team in Dublin and the team in Helsinki.
27:45 So we're really pushing this idea of inner source so that we can foster more collaboration internally.
27:53 And over time, like you see, we have some repos where one engineer makes 600 commits and the next engineer makes maybe 100.
28:02 Right.
28:03 So there's this team imbalance with inner source.
28:06 If you have more eyes on your work, more people asking questions, maybe making contributions.
28:12 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.
28:22 So this is a challenge because, you know, some teams are more ready for it than others.
28:28 Right.
28:28 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.
28:35 Right.
28:36 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.
28:56 Yeah.
28:57 Okay.
28:57 Yeah, that's really cool.
28:58 I'm a function.
28:59 I'm a robot.
29:01 I work on the database connection part or whatever.
29:05 Yeah.
29:06 Exactly.
29:07 Yeah.
29:07 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.
29:25 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.
29:32 But can you talk a little bit about what makes radical agility different than, say, Scrum?
29:39 Like, what is it like to actually do radical agility?
29:42 Sure.
29:42 So with Scrum, it's sort of your ceremonies, right?
29:46 You have the Scrum process and you have the sprint and you have the certain number of meetings and it's pretty straightforward.
29:56 You know, it's your start, your check-ins, your end and your retrospective.
30:01 The team I'm working with has more of a Kanban approach.
30:05 So I let them choose the backlog.
30:08 So they order the tasks that they want to work on.
30:11 They rate their priorities and we do a daily stand-up, but we don't have, like, fixed periods of time.
30:20 Like, we're not doing a month long.
30:22 We're just checking in regularly to make sure that the work gets done and keeps flowing.
30:28 But there's also Scrum elements in that.
30:31 So that's just with my team.
30:32 But if you go down the hall, they may be working in a Scrum setup, like, to the book.
30:38 You may go down the other hall and you may see a team that's doing some kind of Scrum waterfall Kanban mixture.
30:48 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.
30:55 Scrum works for everyone.
30:57 Or Kanban works for everyone.
31:00 Teams have different personalities.
31:01 They bring different ingredients to the table.
31:04 And really what autonomy means is you find something that works, that helps you deliver, and you iterate on that.
31:11 And it doesn't have to be any sort of fixed thing.
31:14 I mean, you start talking about fixed systems, then you're counter-agile.
31:19 Yeah.
31:20 So that's – it's abstract.
31:23 And it's hard to – it's part of that doesn't happen overnight thing.
31:28 Of course.
31:28 It seems to me like one of – It's a lot of iteration.
31:30 Yeah.
31:31 It seems to me like one of the things that's sort of core to Daniel Pink's work is about autonomy.
31:36 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.
31:49 And it's not the biggest pay increase or anything like that.
31:54 It's about autonomy, right?
31:57 Like you get to control your future.
31:59 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.
32:08 Okay.
32:08 Cool.
32:09 Yeah.
32:09 I think if you go to each team, here is all in the world differently.
32:12 And like I really like to work in my team because we don't have a lot of bureaucracy.
32:17 Like we have like stand-ups every day.
32:20 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.
32:29 But we work kind of like I would say like open source.
32:34 Like we really work with GitHub Enterprise and GitHub.
32:37 Like it's where our projects are.
32:40 And like we have clients like Summers here, like users of our applications.
32:45 So they open issues there in the repos.
32:48 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.
32:57 And then we just assign the tickets and work on it.
33:01 And there's no overhead of what meetings.
33:04 And we just sit, do our work, send up a request, send a link to people, say, hey, could you please review this?
33:11 And we just basically work in this GitFlow thing and it's really good.
33:15 I feel really comfortable work this way.
33:18 Yeah, that's cool.
33:19 The whole GitFlow style is really quite fantastic.
33:22 So let me put the question to you, Rafael.
33:25 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?
33:32 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.
33:48 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.
34:03 Because I think we developed really good tools and we need to improve them because like we are changing.
34:11 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.
34:27 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.
34:50 So we really work developing tools for other teams.
34:54 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.
35:08 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.
35:19 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.
35:33 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.
35:42 So we've actually created a tech radar, taking a nod from ThoughtWorks who have their tech radar.
35:50 So we implemented that idea for our own team.
35:53 And so we have certain languages that are, it's all organized in concentric circles.
35:59 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.
36:13 And so we have a certain collection of languages we really encourage teams to use and Pythons being one of them.
36:20 But yeah.
36:21 That's a really smart idea, the whole tech radar thing.
36:23 That's cool.
36:24 Yeah.
36:24 Yeah.
36:24 ThoughtWorks, their thoughts work.
36:27 I don't know if they use that, but maybe they.
36:31 You just gave them a new tagline.
36:35 Yeah.
36:35 It's really cheesy, but yeah, they're probably, they're not, they probably would not want that.
36:43 So I think, but yeah.
36:45 Yeah.
36:46 Cool.
36:46 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.
36:56 It's all supported by steps.
36:58 Can you talk a bit about that?
36:59 Sure.
36:59 Yeah.
37:00 So when Zalando was founded, it was like Magento, it was PBHP.
37:06 And that was fine for a little while, but then the company grew.
37:10 And so we moved to the JVM in about three and a half months.
37:14 So you can imagine, but that was like lots of work.
37:18 And that worked pretty well for about five, four years or so.
37:23 But then you have a monolith, such a huge company, such a huge team.
37:28 It just made fixing bugs, working really slow and difficult.
37:34 It held us pretty much to feature technology.
37:40 And that's not very exciting if you want to play around with different languages, different technologies, even for the hiring side.
37:49 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?
37:58 Because it's just one giant Java app.
37:59 Yeah.
38:00 I mean, there were Python projects coming up this whole time, right?
38:04 So we have a suite of Postgres tools that were created in Python, and some of them are about three years old.
38:12 So there was a little bit of room more in the platform infrasight to develop in Python.
38:20 There's a lot of Python developers there.
38:23 But on the whole, yeah, it was pretty monolith.
38:27 So then now with practical agility, there's this shift.
38:32 Raphael mentioned the rules of play.
38:34 One of the rules is microservices, you know, supporting and building out this kind of architecture.
38:40 And so that's where you start seeing a lot of this diversity in languages and flexibility.
38:46 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.
38:55 Yeah, that's cool.
38:56 And, you know, you can make those things work if you have systems like steps in place to sort of bring together smoothly.
39:04 And APIs.
39:05 Yeah, and APIs.
39:06 Absolutely.
39:08 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?
39:17 Yeah, so we are, like, recommending new teams to, like, they are creating new projects to use Python 3.
39:24 Python 3.5 specifically, like the latest version.
39:29 And, yeah, most of the teams use Python 3.5.
39:31 And, yeah, most of the teams use Python 3.5.
39:32 But we have some old projects that use Python 2.7.
39:37 And some projects, some applications that are developed in Python and run in our data center.
39:43 And in our data center, we can just deploy applications with Python 2.7.
39:49 But the idea is that we want to shut down the data center very soon.
39:53 So, and migrate everything to AWS.
39:56 And then the teams will be able to migrate fully to Python 3.
40:01 But, yeah, mostly we recommend our new projects are in Python 3.
40:06 Yeah, that's really cool to hear.
40:08 Do you think that the microservice architecture and the API architecture made that more possible?
40:13 Like, there's not some huge million-line Python 2.4 version?
40:19 Yeah, definitely.
40:20 Yeah.
40:21 Like, having microservices instead of a big monolith application makes it easier to just replace the old application,
40:30 just fix or update the code that we had before to be compatible with Python 3.
40:37 And take advantage of the new libraries and integrations in the standard library of Python 3.
40:44 So we can just even, like, reduce the dependencies and just have a more concise code.
40:51 Yeah, that's cool.
40:51 We all want to ship our software faster, respond to user requests quicker, and build an edge on the competition.
41:11 But the faster you go, the more likely a bug or issue will slip by and cause your users grief.
41:16 I have the same tradeoffs with my Talk Python websites and infrastructure.
41:20 That's why I use SnapCI.
41:21 Every time I check in at GitHub, SnapCI springs into action.
41:25 A clean copy of code is pulled from GitHub.
41:27 A Python 3 virtual environment is created.
41:29 All the packages and dependencies are installed.
41:31 The unit tests are run.
41:33 Finally, I'm notified in Slack and a menu bar on my Mac about the outcome.
41:36 That way, I know it's safe to ship a shiny new version of my web app.
41:40 Ship your software faster with a 30-day free trial at snap.ci slash Talk Python.
41:45 So let's talk about some of the open source projects you guys have going.
41:57 You have your own GitHub pages section.
42:01 So, Zalando.github.io.
42:04 And in there, you have a really cool, you call it a dashboard, I guess.
42:10 A really cool dashboard of all of your open source projects broken down repositories by language.
42:16 And there's a bunch of cool stuff.
42:18 So, first of all, how did you create that page?
42:20 Do you guys know?
42:21 In-house, it started as an onboarding team, an onboarding project.
42:26 So our onboarding is pretty intense because every month we're adding dozens of new folks to the tech team.
42:34 So we had a system, a program for a while where the newbies would work on something for part of their onboarding.
42:44 And so the dashboard came about as that.
42:48 And then in May, we made some fixes with our UX designers.
42:53 And it was a different team just redesigned it and added the search feature.
42:59 And we changed the formula a little bit to reward activity and external contributors and stars.
43:07 So, like, you'll see Connection, which is Rafael's main project that he's working on.
43:12 It's at the top project.
43:13 Yeah, way to go.
43:13 That's awesome.
43:14 So this is really nice, a really nice way to showcase what you're doing.
43:17 There's a lot of companies that, you know, if you set up an organization in GitHub,
43:22 then you automatically get some kind of like this, a little bit, but just as a GitHub profile page.
43:28 But this is really nice.
43:29 So I was thinking, like, oh, where's the automatic generator of this thing?
43:33 Because this is cool.
43:33 Yeah, we have some really talented UX designers here.
43:37 Okay.
43:38 Shout out to Gloria Ruprecht, who is one of the UX designers that did this, like, in her spare time.
43:45 Because a lot of the engineers happen to be on her team.
43:48 And so she kind of got pulled into this a little.
43:51 But, yeah, she and another UX designer, Gabriel.
43:55 Yeah, nice work.
43:56 Props to them.
43:57 That's cool.
43:58 So, Rafael, let's talk about your project a little bit.
44:00 Let's talk about Connections.
44:01 Okay.
44:02 C-O-N-N-E-X-I-O-N.
44:04 What is that?
44:05 Yeah.
44:06 So, Connections started as we were developing this tool, like, this API in Python for deploying applications.
44:15 And, actually, Juan, we started even before I joined Zalando.
44:20 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.
44:34 Because, yeah, here in Zalando, we have this process of creating microservices.
44:38 You just don't, like, you started coding directly the microservice.
44:43 We have the API guild that will review the API definition, like the Swagger file.
44:51 So, if you want to create a new microservice here at Zalando, you go to the, you create your API definition, the Swagger file.
45:00 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.
45:08 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.
45:17 And then you have a definition of your whole API, even before you write the first line of code.
45:24 Yeah, that's awesome.
45:25 Yeah.
45:25 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.
45:38 So, what's Swagger?
45:39 Yeah, Swagger is like a specification that is a standard.
45:44 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.
46:02 And I would say that Swagger is the one that's winning now.
46:06 And this is recently supported by the Linux Foundation.
46:09 And it's changing the name from Swagger to OpenAPI.
46:14 So, that's why sometimes I would say Swagger OpenAPI because it's changing the name.
46:19 The official name now is OpenAPI.
46:21 So, it's the version 2.
46:23 It's the latest version.
46:24 They are working the version 3.
46:25 But, yeah, currently we use the version 2.
46:28 And, yeah, it's just a way to define your API in pretty good detail.
46:34 Like, you can define the endpoints, the parameters, what are the HTTP status that should be expected by the clients.
46:43 And from this specification, you can generate code.
46:48 Like, there is a Swagger code gen.
46:50 It's a tool that you can generate code in many different languages, including Python.
46:55 And if you use the Swagger code gen, you can generate actually connection, Python code that uses connection out of your Swagger definition.
47:05 And you can just write the code that already have dictionary validated and the way you expect it, the way you define Swagger definition.
47:17 Yeah, so connection basically is a Flask, is built on top of Flask.
47:22 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.
47:32 And it will basically automatically set up the routing and the data passing.
47:37 And you just write the functions to actually do the processing.
47:42 Is that the right summary?
47:43 Yes, exactly.
47:45 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.
47:53 But yeah, exactly.
47:54 You described it.
47:55 That's really cool.
47:56 So if I created an API this way, can I go to it and like ask it for help?
48:01 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?
48:08 Yes.
48:09 By default, like connection enables the Swagger.json endpoint where it returns the Swagger definition.
48:17 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.
48:29 At Zalando, we have this by default enabled.
48:33 So you can inspect in your APIs and see what they expect and how you should call it.
48:39 Okay, nice.
48:40 And is there a way to get like a friendly human readable format?
48:43 Yes.
48:44 In connection, I also provide like UI for that.
48:47 There is a Swagger UI that is like a standard in Swagger projects.
48:54 And connection provides this as well in the UI.
48:59 Like you have API creating connection.
49:01 You just dash UI and you can see this dashboard.
49:05 You can also disable it if you don't want, but there is this console that you can just have.
49:10 You just have like an interface, HTTP page, HTML page where you can just make requests.
49:17 Okay, yeah.
49:18 To your API using like an interface.
49:20 Yeah, that's really cool.
49:21 And so this plays like a central role in describing and building a lot of the APIs that are in your steps.
49:30 They're deployed into steps.
49:31 Yes, yes.
49:32 We have also the same idea as connection.
49:35 Like you create first the definition and then generate and then write the code that handles the endpoints defined in the Swagger definition.
49:44 We have also similar projects for different programming languages like Clojure and Java.
49:50 And yeah.
49:51 So you can just see, you know, Zalando GitHub page.
49:55 Right.
49:56 Oh, that's really cool.
49:56 One of the challenges of these HTTP services or RESTful services is they're really nice to work with, but they're very opaque.
50:07 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.
50:14 Right.
50:14 And so having these somewhat self-documenting is really cool.
50:19 Yes, definitely.
50:19 It's very important to tell the clients like how they should call the endpoints and have these documented.
50:29 This is very important.
50:30 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.
50:42 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.
51:03 Like that the specification, the documentation of the API is up to date with your code.
51:08 Yeah, that's cool.
51:09 You just change the documentation and you can regenerate the clients as well.
51:12 It's pretty awesome.
51:13 Very nice.
51:15 Very nice.
51:15 So it seems like open source is something that you guys care more than most companies, I would say.
51:21 I mean, you have like a special page showcasing all your GitHub work.
51:25 You have, you've trimmed it down to 200 repositories.
51:28 Like, so why the focus on open source there?
51:31 I think one reason is that our VP of engineering is still a developer, loves code, introduced Scala to three different companies.
51:41 And so he comes to his leadership style and what has helped create a culture where we really value the actual work of coding.
51:53 So open source is probably the best way to be able to learn quickly.
51:59 You make new projects at work.
52:02 You iterate, you innovate.
52:03 There's also the fun community aspect and how amazing it is when a little idea can turn into something so huge.
52:13 Like you might have seen Linus Torvald's TED talk or TED like discussion.
52:18 I think it was a TED conversation where he talks about how Linux and Git grew.
52:24 I mean, he's just a guy in a room.
52:25 And it becomes where this project is used around the world.
52:29 And there's this something pretty magical in my opinion.
52:34 It's also a really great way to solve your technical challenges.
52:38 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.
52:50 So I think that it's really it's the most fun take on capitalism I can think of.
52:57 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.
53:11 Yeah, it's because they want to.
53:13 Yeah, it's really amazing.
53:13 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.
53:24 It's on GitHub.
53:25 You can go get it.
53:25 And yet there are these great, vibrant companies.
53:28 I think, yeah, I think it's really amazing.
53:30 And it's really cool that you guys are giving away and making public so much of what you're doing.
53:34 Yeah, and it's a great conversation starter.
53:37 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.
53:47 Get these people really excited to talk about their work.
53:51 They contributed to another project.
53:53 Okay, what was that like?
53:54 What did you learn?
53:55 I mean, it's just really it's just all organic and fun.
54:00 Yeah, I'm sure it is.
54:01 Speaking of fun to work in these environments, you guys have quite a few interesting tech jobs available, right?
54:08 At tech.zalando.de slash jobs.
54:11 Mm-hmm.
54:12 You had something like 17 software jobs and 12 data science jobs with machine learning and all sorts of cool stuff going on.
54:21 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?
54:27 Like, yeah, check this out.
54:29 That's definitely a good option, right?
54:30 Yeah.
54:31 Yeah.
54:31 We have all levels, all backgrounds.
54:34 It's such a diverse team.
54:37 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?
54:46 Yeah.
54:46 I really like the idea to work with people from everywhere around the world.
54:50 Like, I'm from Brazil, but in my team there is people from Poland, from Portugal, from Netherlands and from the U.S.
54:58 There is people from everywhere.
54:59 And it's really cool.
55:00 Like, it's really nice.
55:01 You have very interesting conversation, like, at the luncheon time or, like, about different cultures and backgrounds.
55:08 And it's really cool.
55:08 Yeah, that's really cool.
55:10 Awesome.
55:11 So people, check that out if you're interested in working on these types of projects.
55:16 So I just have a few moments left.
55:18 Let me ask you guys two questions that I normally ask everyone at the end of the show and whoever wants can take them.
55:25 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.
55:34 Do you guys have one you recommend or that you think is pretty cool?
55:37 Yeah.
55:37 Yeah.
55:37 Like, we use a lot of requests.
55:39 It's a pretty known package.
55:42 But, yeah, we use a lot.
55:44 And it's really good.
55:45 Like, I really, it works really nice.
55:48 So I would really recommend if you don't know, you don't use it, you should.
55:52 Yeah, requests are pretty awesome.
55:53 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.
56:07 So he's got a fair number of packages up there.
56:10 So I'll give a plug for NSEnter.
56:12 It's a Python package that lets you add, enter Linux kernel namespaces with a single syscall.
56:18 So.
56:19 Okay, awesome.
56:20 He probably need it and made it himself.
56:23 He's kind of like that.
56:24 He just puts out a lot of code and lots of projects.
56:28 Yeah, that's great.
56:28 It's amazing how prolific some people are, right?
56:31 Yes.
56:31 Cool.
56:32 He's one of them.
56:33 Yeah, very cool.
56:34 And then the other question is, when you write Python code, what editor do you use?
56:39 Yeah, I personally use Emacs, but there's not many people here in the zone that use Emacs.
56:45 Like, we have a guild and there is a few people there.
56:47 But most of the people that work with Python here, they use PyCharm.
56:51 Okay, yeah.
56:52 PyCharm is definitely a good one.
56:54 Emacs, I would say, is quite popular out there from the people I've interviewed.
56:59 So, yeah, that's cool.
57:00 I like Adam.
57:01 Yeah.
57:02 Adam works for me.
57:03 Yeah, I think Emacs is like, if you really want to sharp your tool, like, I really like
57:09 to spend time just configuring my editor and seeing it working better and having new key
57:17 bindings that work, do magical things for me.
57:20 Okay.
57:20 Yeah, that's cool.
57:21 Yeah, Emacs is great for that.
57:22 And yeah, Adam, I like Adam as well.
57:24 Yeah.
57:25 Sublime Text also does the job.
57:28 Yeah, very cool.
57:29 I'm not too picky on features.
57:30 It's like bare minimum, but I think both are so very loved by people who are picky about
57:38 things.
57:38 Nice.
57:39 All right.
57:40 Final call to action.
57:41 People want to get started with your open source stuff or learn more about it.
57:45 What do they do?
57:45 You should go to Zalando.
57:48 So that's Z-A-L-A-N-D-O dot GitHub dot I-O.
57:52 Look at what we have.
57:54 Poke around.
57:55 See if there's something that looks interesting.
57:57 Definitely try out a connection.
58:00 Check it out.
58:01 See if there's some feature or bug you want to fix.
58:05 Ping Raphael.
58:06 He'll probably be the one responding to you if it's not Jao.
58:09 We have a bunch of open source features there.
58:12 You can just pick one and work on it.
58:14 And there's another project, too, that's pretty exciting called Patroni that's also
58:19 coded in Python.
58:20 And we're actually trying to get more folks that use Kubernetes with Google Cloud Engine
58:25 to try that one out.
58:26 But we have a lot of Postgres fans.
58:30 We have a couple experts even in Postgres.
58:32 We've been using it for several years.
58:34 And so Patroni is a template for Postgres high availability.
58:38 And you can use it with Zookeeper, etcd, or console.
58:41 And we developed it.
58:43 We have Josh Burgess of Red Hat.
58:45 He's made a couple.
58:46 Maybe I should say.
58:47 I shouldn't be.
58:48 He's made quite a number of contributions.
58:51 And has also talked about it at KubeCon.
58:54 So we're really trying to get more users of it, especially in the Kubernetes community.
59:00 Yeah, those sound like great projects.
59:02 And yeah, you guys have a ton of open source things available on your GitHub pages of links.
59:08 So be sure to link to all those things.
59:10 Lori, Raphael, it's been great to talk to you.
59:12 Thanks for being on the show.
59:13 Yeah, thank you.
59:14 Yep.
59:14 Bye.
59:16 This has been another episode of Talk Python to Me.
59:20 Today's guests have been Lori Apple and Raphael Carricio.
59:22 And this episode has been sponsored by Hired and SnapCI.
59:25 Thank you both for supporting the show.
59:27 Hired wants to help you find your next big thing.
59:30 Visit Hired.com slash Talk Python to me to get five or more offers with salary and equity presented right up front.
59:36 And a special listener signing bonus of $2,000.
59:39 SnapCI is modern, continuous integration and delivery.
59:43 Build, test, and deploy your code directly from GitHub.
59:46 All in your browser with debugging, Docker, and parallels included.
59:49 Try them for free at SnapCI slash Talk Python.
59:52 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.
59:59 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 I hope we can build something amazing together.
01:00:09 You can find the links from this episode at talkpython.fm/episodes slash show slash 72.
01:00:16 Be sure to subscribe to the show.
01:00:18 Open your favorite podcatcher and search for Python.
01:00:20 We should be right at the top.
01:00:22 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 Our theme music is Developers, Developers, Developers by Corey Smith, who goes by Smix.
01:00:36 Corey just recently started selling his tracks on iTunes, so I recommend you check it out at talkpython.fm/music.
01:00:43 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 This is your host, Michael Kennedy.
01:00:50 Thanks so much for listening.
01:00:51 I really appreciate it.
01:00:52 Smix, let's get out of here.
01:00:54 Stay tuned.
01:01:16 you you Thank you.