WEBVTT

00:00:00.001 --> 00:00:01.740
Let's talk about running Django in production.

00:00:01.740 --> 00:00:05.460
On this episode, you'll meet Michael Herman, who used to work on realpython.com,

00:00:05.460 --> 00:00:07.580
and today is running testdriven.io.

00:00:07.580 --> 00:00:12.220
We'll cover some of the trade-offs between a set of microservices and a monolith,

00:00:12.220 --> 00:00:14.140
and a round-trip journey between them as well.

00:00:14.140 --> 00:00:19.060
This is Talk Python To Me, episode 206, recorded February 19th, 2019.

00:00:19.060 --> 00:00:35.480
Welcome to Talk Python To Me, a weekly podcast on Python,

00:00:35.480 --> 00:00:38.540
the language, the libraries, the ecosystem, and the personalities.

00:00:38.540 --> 00:00:40.480
This is your host, Michael Kennedy.

00:00:40.480 --> 00:00:42.620
Follow me on Twitter, where I'm @mkennedy.

00:00:42.620 --> 00:00:46.360
Keep up with the show and listen to past episodes at talkpython.fm,

00:00:46.360 --> 00:00:48.860
and follow the show on Twitter via at Talk Python.

00:00:49.860 --> 00:00:51.080
Michael, welcome to Talk Python.

00:00:51.080 --> 00:00:51.640
Thank you.

00:00:51.640 --> 00:00:52.500
It's great to have you here.

00:00:52.500 --> 00:00:55.100
You've been doing so many cool things in the community

00:00:55.100 --> 00:00:57.860
and creating all these community projects

00:00:57.860 --> 00:01:01.180
and really helping a lot of people learn Python and programming.

00:01:01.180 --> 00:01:04.900
So I'm excited to have you on the show and dig into all of those things and more.

00:01:04.900 --> 00:01:07.960
But before we do, before we get to them, let's start with your story.

00:01:07.960 --> 00:01:09.200
How did you get into programming in Python?

00:01:09.200 --> 00:01:09.880
Sure, yeah.

00:01:09.880 --> 00:01:12.880
So I started programming back in, say, seventh grade.

00:01:12.880 --> 00:01:14.560
I think that was like 96, 97.

00:01:14.560 --> 00:01:17.620
And it was really to compete with my best friend, Derek,

00:01:17.620 --> 00:01:22.180
who started a very popular PlayStation website called PlayStation Fan.

00:01:22.180 --> 00:01:27.080
Started out in GeoCities and then eventually moved to a domain name.

00:01:27.080 --> 00:01:31.440
But yeah, just started off with HTML and CSS and a bit of JavaScript.

00:01:31.440 --> 00:01:31.960
Wow.

00:01:31.960 --> 00:01:32.900
That's really interesting.

00:01:32.900 --> 00:01:33.600
GeoCities.

00:01:33.600 --> 00:01:36.340
That's something I haven't thought about for a while.

00:01:36.340 --> 00:01:40.060
But for younger people, like that was the WordPress of the day,

00:01:40.060 --> 00:01:41.640
the WordPress.com of the day or whatever.

00:01:41.640 --> 00:01:43.720
You could just go and click a button and make your site.

00:01:43.900 --> 00:01:45.600
They were often quite cheesy, right?

00:01:45.600 --> 00:01:45.900
Yeah.

00:01:45.900 --> 00:01:46.640
Yeah, definitely.

00:01:46.640 --> 00:01:54.880
Yeah, I started with a PlayStation website as well, PlayStation Extreme, and then moved on to Final Fantasy.

00:01:54.880 --> 00:02:00.420
Got really big into Final Fantasy VII and then started a Final Fantasy VIII enthusiast website,

00:02:00.560 --> 00:02:06.040
the FIFOF8.org, and sort of paid the bills around that with ModChip advertising.

00:02:06.040 --> 00:02:09.140
I don't know if you remember ModChips, but it basically allowed you to...

00:02:09.140 --> 00:02:10.220
No, I don't know that at all.

00:02:10.220 --> 00:02:10.500
No.

00:02:10.500 --> 00:02:11.020
Yeah.

00:02:11.020 --> 00:02:12.460
You solder them onto your PlayStation.

00:02:12.460 --> 00:02:17.940
You can play or you could play games that were outside the U.S.

00:02:18.080 --> 00:02:18.620
Oh, interesting.

00:02:18.620 --> 00:02:23.420
So a little bit of a side loading, like get around the restrictions of the PlayStation there.

00:02:23.420 --> 00:02:26.940
So did they get pretty popular or were they just sort of hobby things?

00:02:26.940 --> 00:02:28.020
They did get pretty popular.

00:02:28.020 --> 00:02:30.040
I had a lot of companies like SendMeGames.

00:02:30.040 --> 00:02:31.480
They wanted me to review.

00:02:31.480 --> 00:02:38.260
And I think sort of with the Final Fantasy VIII website, I had like an early bootleg copy of it.

00:02:38.260 --> 00:02:42.220
Of course, it was in Japanese and being an RPG, couldn't really do much with it.

00:02:42.220 --> 00:02:45.960
But yeah, I did get a lot of early copies of games and whatnot to review.

00:02:46.160 --> 00:02:46.820
Wow, that's really cool.

00:02:46.820 --> 00:02:51.820
So maybe if that was today, you would be doing a Twitch channel at that age or something like that.

00:02:51.820 --> 00:02:54.160
But back then it was the website.

00:02:54.160 --> 00:02:54.460
Yeah.

00:02:54.460 --> 00:02:55.020
Yeah.

00:02:55.020 --> 00:02:55.380
Yeah.

00:02:55.380 --> 00:02:56.240
Interesting.

00:02:56.240 --> 00:02:59.740
So there's not a whole lot of programming there per se, though, is there?

00:02:59.740 --> 00:03:02.860
I mean, that's like kind of getting you started in the web world.

00:03:02.860 --> 00:03:05.740
But where'd you really get like into programming for real?

00:03:05.740 --> 00:03:09.600
So then I learned a bit of the LAMP stack, mostly the M and the P.

00:03:10.240 --> 00:03:17.960
And then I really started looking at VBulletin and sort of the message forums of the day.

00:03:17.960 --> 00:03:23.460
And got really good into adding just like tweaks and hacks to them.

00:03:23.460 --> 00:03:29.240
In high school, I took a basic in Pascal and then a C++ class.

00:03:30.120 --> 00:03:35.720
And that was sort of my sophomore year of high school or freshman and sophomore year.

00:03:35.720 --> 00:03:42.480
And then my junior and senior year, I actually went half days at high school and half days at a vocational tech program.

00:03:42.480 --> 00:03:45.120
And with the hardware side, got A-plus certified.

00:03:45.120 --> 00:03:48.500
And that was back in the day with desktops.

00:03:49.040 --> 00:03:52.120
So I don't think it means anything these days.

00:03:52.120 --> 00:03:55.920
You don't get too many recruiters reaching out to you for that?

00:03:55.920 --> 00:03:56.540
No, no.

00:03:56.540 --> 00:04:00.700
No, that's a super cool thing that you can do at high school, though, right?

00:04:00.700 --> 00:04:04.140
I mean, there's so many classes you take that are kind of fluffy.

00:04:04.140 --> 00:04:07.460
Just you got to do something for the day at high school.

00:04:07.460 --> 00:04:09.000
That sounds really constructive and useful.

00:04:09.000 --> 00:04:09.840
Did you enjoy it?

00:04:09.840 --> 00:04:10.100
Yeah.

00:04:10.100 --> 00:04:11.240
Yeah, it was very practical.

00:04:11.240 --> 00:04:16.600
Gave me a lot of skills and learned quite a bit about the hardware side of things.

00:04:16.780 --> 00:04:19.160
Also got a Cisco certified.

00:04:19.160 --> 00:04:22.260
I think it was the CCNA network administrator.

00:04:22.260 --> 00:04:25.120
That might mean something a little bit more now, but not sure.

00:04:25.120 --> 00:04:31.120
Yeah, still, it sounds like a really cool project, especially for when you're in high school.

00:04:31.120 --> 00:04:31.420
Yeah.

00:04:31.420 --> 00:04:32.640
Would you get a CS degree from there?

00:04:32.640 --> 00:04:33.480
No.

00:04:33.480 --> 00:04:37.160
So in college, I ended up starting in computer science.

00:04:37.160 --> 00:04:40.460
I took a philosophy class that steered me into philosophy.

00:04:40.460 --> 00:04:45.860
My dad was subsidizing most of my education, so I ended up with a practical business degree.

00:04:45.860 --> 00:04:46.540
Yeah, that's cool.

00:04:46.620 --> 00:04:50.580
He's like, look, you can take these philosophy classes, but you can't live on philosophy very

00:04:50.580 --> 00:04:52.140
easily, so go get a regular degree.

00:04:52.140 --> 00:04:52.460
Right.

00:04:52.460 --> 00:04:55.560
Basically, unless you're going to law school, you're going to do something different.

00:04:55.560 --> 00:04:58.100
Yeah, that makes a lot of sense.

00:04:58.100 --> 00:05:03.160
Philosophy is really fun, but it's a hard job to have, I think, unless you just want to be

00:05:03.160 --> 00:05:03.680
a teacher.

00:05:03.680 --> 00:05:04.020
Yeah.

00:05:04.020 --> 00:05:04.700
Yeah, for sure.

00:05:04.700 --> 00:05:07.200
Okay, so a lot of interesting background there.

00:05:07.200 --> 00:05:08.200
How did you get to Python?

00:05:08.200 --> 00:05:14.860
So after my undergrad, I ended up moving to New York and was working in a sort of a sales

00:05:14.860 --> 00:05:21.200
support, sales operation type role for Yahoo, and sort of got back into coding there.

00:05:21.360 --> 00:05:26.400
I was doing a lot of Excel, doing a lot of VBA, writing little macros here and there.

00:05:27.040 --> 00:05:31.240
And eventually, that led me to San Francisco and started working at startups, started wearing

00:05:31.240 --> 00:05:32.360
multiple hats.

00:05:32.360 --> 00:05:39.860
And so sort of my finance and Excel experience led to a Python because I found I could do things

00:05:39.860 --> 00:05:45.680
a lot quicker and do things a lot more efficient with Python and having that control Excel over

00:05:45.680 --> 00:05:46.120
VBA.

00:05:46.320 --> 00:05:47.320
Yeah, that makes a lot of sense.

00:05:47.320 --> 00:05:51.340
And that sort of debate and functionality is still raging today.

00:05:51.340 --> 00:05:57.120
We've got that user voice issue where everyone's trying to get Python into Excel and Microsoft

00:05:57.120 --> 00:05:59.180
has kind of put their head in the sand and ignored it.

00:05:59.180 --> 00:06:02.760
But every couple of days, there's a new person who goes, what a great idea.

00:06:02.760 --> 00:06:04.340
Like thousands and thousands of votes.

00:06:04.340 --> 00:06:05.700
But yeah, we'll see.

00:06:05.700 --> 00:06:07.460
I think a lot of people go on that path.

00:06:07.460 --> 00:06:11.660
So when you got to San Francisco, was this like the dot-com heyday or was it after that?

00:06:11.660 --> 00:06:12.300
It was after that.

00:06:12.300 --> 00:06:15.640
This was 2008, 2009.

00:06:15.640 --> 00:06:15.980
Yeah.

00:06:16.260 --> 00:06:18.640
I would have been wild to be there, 98, 99.

00:06:18.640 --> 00:06:19.760
Yeah.

00:06:19.760 --> 00:06:21.140
At that time, it would have been crazy.

00:06:21.140 --> 00:06:22.680
But I wasn't there either.

00:06:22.680 --> 00:06:24.240
So all right.

00:06:24.240 --> 00:06:25.720
So that was your history.

00:06:25.720 --> 00:06:26.900
How about today?

00:06:26.900 --> 00:06:27.880
What are you doing day to day?

00:06:27.880 --> 00:06:33.440
So these days, I'm spending about 50% on a startup that I started called TestDriven.io.

00:06:33.440 --> 00:06:38.840
So we're developing the platform, doing content marketing, course development, and then 50%

00:06:38.840 --> 00:06:39.720
on freelance.

00:06:39.720 --> 00:06:40.100
Okay.

00:06:40.100 --> 00:06:41.140
That sounds really fun.

00:06:41.140 --> 00:06:46.160
You know, you get to control quite a bit of what you do and always building.

00:06:46.200 --> 00:06:48.140
These new platforms, these new products.

00:06:48.140 --> 00:06:49.600
It's so exciting, right?

00:06:49.600 --> 00:06:49.940
Yeah.

00:06:49.940 --> 00:06:52.620
So I went back to freelance, let's say, a couple weeks ago.

00:06:52.620 --> 00:06:58.200
So I've been free from a day job for about two weeks.

00:06:58.200 --> 00:06:59.020
Yeah.

00:06:59.020 --> 00:07:01.240
Are you having like cubicle withdrawal or anything like that?

00:07:01.240 --> 00:07:01.660
Are you okay?

00:07:01.820 --> 00:07:02.180
I'm fine.

00:07:02.180 --> 00:07:02.480
I'm fine.

00:07:02.480 --> 00:07:02.500
I'm fine.

00:07:02.500 --> 00:07:02.700
Yeah.

00:07:02.700 --> 00:07:05.400
Nice.

00:07:05.400 --> 00:07:06.420
Yeah.

00:07:06.420 --> 00:07:06.860
How's it going?

00:07:06.860 --> 00:07:07.400
Are you enjoying it?

00:07:07.400 --> 00:07:07.580
Yeah.

00:07:07.580 --> 00:07:08.480
The commute is a lot better.

00:07:08.480 --> 00:07:08.880
Yeah.

00:07:08.880 --> 00:07:11.160
So we get up, roll out of bed right there.

00:07:11.160 --> 00:07:11.400
Yeah.

00:07:11.400 --> 00:07:11.980
That sounds great.

00:07:11.980 --> 00:07:14.280
We're definitely going to talk a lot about TestDriven.

00:07:14.440 --> 00:07:19.820
And I feel like TestDriven is, it's got a lot of parallels to what you did before.

00:07:19.820 --> 00:07:24.140
Even going back to your story that you already told, you know, about starting like the Final

00:07:24.140 --> 00:07:29.460
Fantasy and the PlayStation sites, and then moving on to something that you're pretty well

00:07:29.460 --> 00:07:31.760
known for is starting real Python, right?

00:07:31.760 --> 00:07:33.820
This is like the next generation of that maybe?

00:07:34.000 --> 00:07:34.040
Yeah.

00:07:34.040 --> 00:07:38.840
So I've definitely been drawn towards tech education and teaching in general.

00:07:38.840 --> 00:07:41.040
I taught at a bootcamp for a number of years.

00:07:41.040 --> 00:07:43.700
I was full stack JavaScript, so we won't talk about that.

00:07:43.700 --> 00:07:48.220
But I've definitely, I'm a programmer first and I'm a teacher second.

00:07:48.220 --> 00:07:50.660
So that's why I'm not teaching right now.

00:07:50.660 --> 00:07:55.380
But yeah, there's definitely a lot of parallels between real Python and TestDriven.

00:07:55.380 --> 00:07:59.780
I would say that TestDriven, targeting a little different audience, starting in the intermediate

00:07:59.780 --> 00:08:04.440
to advanced level web developers, whereas Python was all targeting just the basics.

00:08:04.440 --> 00:08:05.880
Yeah, I'm sure that makes a lot of sense.

00:08:05.880 --> 00:08:11.200
You know, I feel like you said you're a little bit more of a developer than a teacher, but

00:08:11.200 --> 00:08:12.040
also a teacher.

00:08:12.040 --> 00:08:20.060
And I feel like really to be a proper teacher who teaches developers, you have to have your,

00:08:20.060 --> 00:08:21.740
you have to get your hands dirty, right?

00:08:21.740 --> 00:08:22.860
You have to write this code.

00:08:22.860 --> 00:08:25.420
Like, it's not enough to just know it works this way.

00:08:25.420 --> 00:08:28.420
You have to know, actually, I tried it that way.

00:08:28.980 --> 00:08:30.680
And that seemed like it was going to work.

00:08:30.680 --> 00:08:32.200
But in practice, it was really painful.

00:08:32.200 --> 00:08:36.280
And it's other like, you need to have those scars to like help people along, I think.

00:08:36.280 --> 00:08:36.620
Right.

00:08:36.620 --> 00:08:40.940
And that's one of the things that the boot camp that I worked for struggled with how to

00:08:40.940 --> 00:08:46.520
continually scratch that itch for those developers first that really wanted to get back into the

00:08:46.520 --> 00:08:46.820
field.

00:08:46.820 --> 00:08:51.440
And I don't really think there's a correct or right answer there for that.

00:08:51.440 --> 00:08:53.880
But it was definitely something that they struggled with.

00:08:53.880 --> 00:08:55.700
It's definitely something I struggle with as well.

00:08:55.960 --> 00:08:58.580
But yeah, I enjoy working freelance jobs.

00:08:58.580 --> 00:09:01.200
And I also enjoy working on the test driven platform.

00:09:01.200 --> 00:09:05.360
That's one of the reasons why I decided to build a platform was so actually I had something

00:09:05.360 --> 00:09:09.140
there, something that can actually work on something I can actually scale on whatnot.

00:09:09.140 --> 00:09:09.500
Yeah.

00:09:09.500 --> 00:09:11.040
I'll be interested to hear your thoughts on this.

00:09:11.040 --> 00:09:16.320
But for me, a lot of times when I look out there and I'm like, I need something to solve

00:09:16.320 --> 00:09:17.000
some kind of problem.

00:09:17.100 --> 00:09:21.400
And I could grab something off the shelf and use it or I could build it myself.

00:09:21.400 --> 00:09:22.980
There's always that.

00:09:22.980 --> 00:09:26.860
Does it make sense for me to put that time and effort into it versus just grab something

00:09:26.860 --> 00:09:29.300
and it won't be quite the perfect fit, but it'll be good enough.

00:09:29.300 --> 00:09:35.480
But for me, another thing I've always got going in the back of my mind is if I did have to or

00:09:35.480 --> 00:09:39.560
went down the path of building this myself, would it give me something really interesting to

00:09:39.560 --> 00:09:42.480
learn and teach other people?

00:09:42.620 --> 00:09:48.120
Maybe I could just get some teaching platform, but if I built my own, hey, maybe I could use

00:09:48.120 --> 00:09:51.960
the lessons learned from there to actually create courses or create interviews and things like

00:09:51.960 --> 00:09:52.200
that.

00:09:52.200 --> 00:09:54.020
Do you think about stuff that way as well?

00:09:54.020 --> 00:09:56.700
Yeah, definitely the build versus buy type thing.

00:09:56.700 --> 00:10:01.480
I think a lot of educators out there that are on the internet, they use a lot of the existing

00:10:01.480 --> 00:10:06.760
platforms and maybe they're more teachers, maybe they're more into building content and whatnot.

00:10:06.760 --> 00:10:08.720
I'm a doer, I'm a hacker.

00:10:08.720 --> 00:10:11.640
And so, yeah, I definitely like having that platform there.

00:10:12.140 --> 00:10:14.760
Somebody is like, hey, I will promote your courses.

00:10:14.760 --> 00:10:19.160
If you have this little tweak in there, I can go in there and just add that little tweak.

00:10:19.160 --> 00:10:23.320
Whereas if I'm using some other platform, then I'm at the whim of the developers there.

00:10:23.320 --> 00:10:26.920
Yeah, it's usually more painful up front, but often in the end, you're like, I'm so glad

00:10:26.920 --> 00:10:29.280
I get to completely control this experience, right?

00:10:29.280 --> 00:10:29.500
Right.

00:10:29.500 --> 00:10:29.740
Yeah.

00:10:29.740 --> 00:10:31.440
So a bit of a time shift.

00:10:31.440 --> 00:10:36.540
By the time this episode comes out, I will have released a show with Ned Batchelder and a

00:10:36.540 --> 00:10:39.140
couple of other folks called Beginners and Experts.

00:10:39.320 --> 00:10:41.980
But that hasn't been released yet, so you have no chance to have heard it.

00:10:41.980 --> 00:10:43.940
So I'll just tell you real quick.

00:10:43.940 --> 00:10:47.840
We talked about a lot of the challenges that beginners and experts had.

00:10:48.720 --> 00:10:53.120
And it seemed like, you know, the syntax people could learn pretty well and other things they

00:10:53.120 --> 00:10:53.980
could follow along.

00:10:53.980 --> 00:11:00.220
But the real challenge is looking at a problem and going, this is how I break down that problem.

00:11:00.220 --> 00:11:01.160
These are the steps.

00:11:01.160 --> 00:11:03.600
Like, okay, this needs this type of database.

00:11:03.780 --> 00:11:06.620
Like, that's better as a web app versus as a command line app.

00:11:06.620 --> 00:11:11.140
Like, just these quick analyses that you do with experience that when you're new, you're

00:11:11.140 --> 00:11:13.060
like, I don't even know what tools to bring to bear.

00:11:13.060 --> 00:11:15.100
Like, once I knew that, I could probably do it pretty well.

00:11:15.100 --> 00:11:17.680
But I don't know what to start with.

00:11:18.300 --> 00:11:22.760
And that comes back to this sort of the scars and the boot camp story you're telling me.

00:11:22.760 --> 00:11:29.100
Like, you know, how do you think that people can at least speed up that learning process to

00:11:29.100 --> 00:11:30.520
sort of get that experience?

00:11:30.520 --> 00:11:31.360
Do you have any shortcuts?

00:11:31.360 --> 00:11:33.720
We didn't have any great options, honestly.

00:11:33.720 --> 00:11:36.080
I mean, maybe reading other people's code and stuff.

00:11:36.080 --> 00:11:39.140
But really, like, how do I decide how to attack a problem?

00:11:40.020 --> 00:11:40.980
Do you have any advice there?

00:11:40.980 --> 00:11:44.020
I don't have any real advice in terms of speeding things up.

00:11:44.020 --> 00:11:45.640
I think that just, you know, takes time.

00:11:45.640 --> 00:11:50.040
And yeah, I mean, it is about being able to break a problem up into manageable pieces.

00:11:50.040 --> 00:11:52.780
I think really focusing on information retrieval skills.

00:11:52.780 --> 00:11:57.360
I think that was one thing that I always, like, told my classes is the one thing that differentiates

00:11:57.360 --> 00:12:01.340
myself from you all is, like, I'm a better, way better Googler.

00:12:01.340 --> 00:12:07.580
I can find Stack Overflow questions or answers to Stack Overflow questions, that sort of thing

00:12:07.580 --> 00:12:11.720
within the first three or four pages or whatever, like, when I Google something.

00:12:11.720 --> 00:12:15.540
And I'd always tell them, if you're, like, on that, like, end of the second page, end of

00:12:15.540 --> 00:12:19.820
the third page of, like, your Google results, you probably need to recraft your query.

00:12:19.820 --> 00:12:20.140
Yeah.

00:12:20.140 --> 00:12:24.500
And part of that is, like, filtering it out, going, no, irrelevant, irrelevant, irrelevant.

00:12:24.500 --> 00:12:25.860
This is the one, right?

00:12:25.860 --> 00:12:29.560
But when you're new, it's hard to go, these are irrelevant, right?

00:12:29.560 --> 00:12:29.760
Yeah.

00:12:29.760 --> 00:12:31.480
I think that's part of the challenge as well.

00:12:31.480 --> 00:12:34.560
Yeah, I do have a Master's of Science in Information Science.

00:12:34.920 --> 00:12:37.840
And for a bit there, I was thinking about going the librarian route.

00:12:37.840 --> 00:12:43.600
And I see a lot of parallels between web developers and librarians.

00:12:43.600 --> 00:12:46.220
Whereas librarians are not subject matter experts.

00:12:46.220 --> 00:12:50.160
They're just able to connect with information quickly.

00:12:50.160 --> 00:12:54.940
And I think a lot of web developers, sort of the jack of all trades, master of none, have

00:12:54.940 --> 00:12:58.540
that same sort of philosophy that they can pick up things really fast.

00:12:58.540 --> 00:13:03.120
They might not be an expert in any one particular area, but they can wear many hats and go up and

00:13:03.120 --> 00:13:03.740
down the stack.

00:13:03.960 --> 00:13:08.020
Yeah, especially if you're a JavaScript developer, because whatever you know is out of date five,

00:13:08.020 --> 00:13:09.480
you know, six months later, right?

00:13:09.480 --> 00:13:10.280
Right.

00:13:10.280 --> 00:13:11.780
The new framework is not the one.

00:13:11.780 --> 00:13:12.280
Yeah.

00:13:12.280 --> 00:13:14.640
The new shiny comes along really quick in that space.

00:13:14.640 --> 00:13:15.080
Definitely.

00:13:15.080 --> 00:13:19.500
So since we're on the topic of boot camps, let me ask you just a couple of questions about

00:13:19.500 --> 00:13:19.700
that.

00:13:19.700 --> 00:13:27.160
Like, do you, putting aside whether it's JavaScript or Python or whatever the subject is being taught

00:13:27.160 --> 00:13:28.700
at the boot camp, do you think they're a good value?

00:13:28.700 --> 00:13:33.640
Do you see people getting like lots of success, maybe relative to a CS degree or relative to

00:13:33.640 --> 00:13:36.300
just like, hey, I bought some books and took an online course?

00:13:36.300 --> 00:13:37.780
Do you think it's worth a while?

00:13:37.780 --> 00:13:40.240
They're pretty expensive, but you know, maybe it's worth it.

00:13:40.240 --> 00:13:41.360
I definitely think it's worth it.

00:13:41.360 --> 00:13:44.060
A lot of times it depends on the type of jobs that you're looking for.

00:13:44.260 --> 00:13:50.200
If you're looking to build an Angular type framework, you probably need a CS degree.

00:13:50.200 --> 00:13:56.580
If you're looking to leverage Angular to build your own type of products, then you're probably

00:13:56.580 --> 00:13:58.540
fine with just going to a boot camp.

00:13:58.540 --> 00:13:59.560
I definitely agree with that.

00:13:59.560 --> 00:14:04.200
Like, there's a lot of times you're in a CS degree and those more formal programs, you're

00:14:04.200 --> 00:14:09.880
taught way more theory and like deeper level stuff than you probably need to know.

00:14:09.880 --> 00:14:13.160
You probably have to take differential equations as a CS degree.

00:14:13.160 --> 00:14:18.160
You probably have to like learn how to like create an operating system and those kinds.

00:14:18.160 --> 00:14:22.980
And like all that stuff is good to know, but you could be a completely competent functional

00:14:22.980 --> 00:14:27.920
web developer or whatever kind of developer, unless, you know, you really are building an

00:14:27.920 --> 00:14:28.580
OS or something.

00:14:28.580 --> 00:14:32.940
Just knowing like the APIs and a little bit of a little bit of theory, which seems like a

00:14:32.940 --> 00:14:34.040
lot of that you could get at a boot camp.

00:14:34.040 --> 00:14:34.300
Right.

00:14:34.300 --> 00:14:35.160
Yeah, definitely.

00:14:35.160 --> 00:14:35.540
Yeah.

00:14:35.540 --> 00:14:35.860
Cool.

00:14:36.480 --> 00:14:39.060
Were you there helping people get jobs afterwards?

00:14:39.060 --> 00:14:41.120
Like what was that side of the thing?

00:14:41.120 --> 00:14:44.760
Was that, that was probably like a big celebration, like somebody who just got a job who recently

00:14:44.760 --> 00:14:45.920
graduated or something like that.

00:14:45.920 --> 00:14:46.120
Yeah.

00:14:46.120 --> 00:14:47.980
The placement rates of the program were pretty high.

00:14:47.980 --> 00:14:52.420
I mean, they were in the nineties, which you think of, you know, college and you think

00:14:52.420 --> 00:14:56.820
of some of those degrees, like, do you, like that's why they don't post the placement rates.

00:14:56.820 --> 00:15:02.780
But yeah, I was, even though I wasn't like a formally part of sort of that transition to the job

00:15:02.780 --> 00:15:06.660
market, it was like, you know, I had that double edged sword where it was like, I think I cared a

00:15:06.660 --> 00:15:07.500
little bit too much.

00:15:07.500 --> 00:15:12.540
And so, you know, I was like all in and kind of like lost myself a little bit in teaching.

00:15:12.540 --> 00:15:16.820
But yeah, I was definitely there, you know, helping students interview, connecting students

00:15:16.820 --> 00:15:18.440
with people I knew in the community and whatnot.

00:15:18.440 --> 00:15:18.780
Yeah.

00:15:18.780 --> 00:15:19.040
Cool.

00:15:19.040 --> 00:15:23.040
Real quick, single piece of advice for people trying to get a job coming out of a boot camp.

00:15:23.040 --> 00:15:23.660
What would you tell them?

00:15:23.660 --> 00:15:24.960
Ooh, yeah.

00:15:24.960 --> 00:15:26.340
So, so many.

00:15:26.340 --> 00:15:31.140
Keep coding, I guess, you know, there's just too many.

00:15:31.140 --> 00:15:34.080
Keep coding, go to meetups, keep connecting with people.

00:15:34.080 --> 00:15:35.100
It's difficult.

00:15:35.100 --> 00:15:39.360
I don't think there is a single piece of advice, but definitely keep coding, go to meetups, connect

00:15:39.360 --> 00:15:39.740
with people.

00:15:39.740 --> 00:15:40.040
Awesome.

00:15:40.040 --> 00:15:40.420
Yeah.

00:15:40.420 --> 00:15:40.960
Sounds good.

00:15:40.960 --> 00:15:41.240
All right.

00:15:41.240 --> 00:15:45.220
So let's bring it back to a little bit more of what we were going to talk about originally.

00:15:45.220 --> 00:15:45.480
Sure.

00:15:45.480 --> 00:15:49.820
I want to definitely talk about testdriven.io and what you're doing there and some of the lessons

00:15:49.820 --> 00:15:50.380
you've learned.

00:15:50.380 --> 00:15:53.020
But let's start at the beginning on that side of the thing.

00:15:53.020 --> 00:15:57.500
So as I said before, you founded realpython.com.

00:15:57.500 --> 00:16:00.060
And did you do it alone or did you do it with some other folks?

00:16:00.300 --> 00:16:00.400
Yeah.

00:16:00.400 --> 00:16:02.260
So there were two other co-founders.

00:16:02.260 --> 00:16:09.040
So Fletcher, the original co-founder or the original founder founded it in, I want to say

00:16:09.040 --> 00:16:09.860
2010.

00:16:09.860 --> 00:16:14.840
And he did the original Kickstarter for the first real Python course.

00:16:14.840 --> 00:16:16.940
And I actually wasn't involved in it then.

00:16:16.940 --> 00:16:17.180
Okay.

00:16:17.240 --> 00:16:21.440
I came after that and I can't remember who contacted who, but we were talking about, hey,

00:16:21.440 --> 00:16:28.700
how can we take sort of the philosophy of real Python, the learning by doing and apply it to

00:16:28.700 --> 00:16:29.500
web development?

00:16:29.500 --> 00:16:29.840
Yeah.

00:16:29.840 --> 00:16:30.500
That's really cool.

00:16:30.980 --> 00:16:33.500
So it was started as a Kickstarter, huh?

00:16:33.500 --> 00:16:34.620
Started as a Kickstarter.

00:16:34.620 --> 00:16:36.520
Each of the courses were Kickstarted.

00:16:36.520 --> 00:16:40.220
I was heavily involved in the second and the third Kickstarters.

00:16:40.220 --> 00:16:43.960
But we really started it because there were just no beginner courses out there.

00:16:45.020 --> 00:16:49.780
And now it's like kind of a dime a dozen, which sort of leads to testdriven.io.

00:16:49.780 --> 00:16:53.940
But yeah, we started it because there was just nothing really practical out there.

00:16:53.940 --> 00:16:54.220
Yeah.

00:16:54.220 --> 00:16:55.120
It's super interesting.

00:16:55.120 --> 00:16:57.300
I don't think I saw the original Kickstarter.

00:16:57.300 --> 00:17:02.740
I probably saw your last Kickstarter that you did, that you all did.

00:17:02.740 --> 00:17:04.660
And I was really impressed.

00:17:04.660 --> 00:17:06.680
I mean, you guys, you ran it well.

00:17:06.680 --> 00:17:08.000
It was super successful.

00:17:08.000 --> 00:17:13.220
I was, it was actually a big inspiration to me as I was thinking about starting my own teaching

00:17:13.220 --> 00:17:14.320
platform, right?

00:17:14.320 --> 00:17:15.500
Training.talkpython.fm.

00:17:15.500 --> 00:17:21.620
And I was sort of exploring the, like, how am I going to get the word out about this?

00:17:21.620 --> 00:17:22.620
What is the right way?

00:17:22.620 --> 00:17:25.720
Should I just talk about the podcast or, you know, what should I do?

00:17:25.720 --> 00:17:25.900
Right.

00:17:25.900 --> 00:17:31.400
And I came across your Kickstarter thinking like, wow, there's actually like a real need

00:17:31.400 --> 00:17:31.580
here.

00:17:31.580 --> 00:17:33.160
People seem to be really into this.

00:17:33.160 --> 00:17:35.080
And it was, it was well done.

00:17:35.080 --> 00:17:35.460
Good job.

00:17:35.460 --> 00:17:35.720
Yeah.

00:17:35.720 --> 00:17:36.060
Thank you.

00:17:36.060 --> 00:17:38.000
I actually wrote a blog post.

00:17:38.000 --> 00:17:42.760
I don't remember if it was after the second or the third Kickstarter, but it's on segment.com

00:17:42.760 --> 00:17:43.800
or something like that.

00:17:43.800 --> 00:17:49.000
But it's on how to use Kickstarter to model sort of like the lean philosophy.

00:17:49.000 --> 00:17:53.060
So how can you get something out there real quick just to see if you can get product market

00:17:53.060 --> 00:17:53.420
fit?

00:17:53.420 --> 00:17:56.620
And I was really into the lean philosophy at the time and still am.

00:17:56.620 --> 00:17:59.280
So I think you can use Kickstarter for that.

00:17:59.280 --> 00:17:59.800
I do too.

00:17:59.800 --> 00:18:04.860
I think Kickstarter is a little bit of a challenge because you have to have a little bit of an

00:18:04.860 --> 00:18:09.080
audience or you've got to have a really good marketing team or you have to be lucky.

00:18:09.080 --> 00:18:09.320
Right.

00:18:09.320 --> 00:18:09.640
Right.

00:18:09.640 --> 00:18:13.220
Like you already had maybe a little bit of an audience around the real Python stuff.

00:18:13.360 --> 00:18:16.160
So it was enough to get it rolling, right?

00:18:16.160 --> 00:18:16.480
Yeah.

00:18:16.480 --> 00:18:21.440
You really want to get to your hundred percent level really within the first couple of days

00:18:21.440 --> 00:18:23.200
because it's really the popularity bias.

00:18:23.200 --> 00:18:24.900
Kickstarter will start promoting it.

00:18:24.900 --> 00:18:28.480
People want to invest and be part in something that's popular.

00:18:28.480 --> 00:18:33.060
So really getting to that hundred percent of your goal within the first couple of days.

00:18:33.060 --> 00:18:36.720
And that was really what I really focused on at first.

00:18:36.860 --> 00:18:42.100
So like if you need $5,000, maybe actually put it at $2,000 so that way you get up there

00:18:42.100 --> 00:18:42.980
much quicker.

00:18:42.980 --> 00:18:44.240
I absolutely agree.

00:18:44.240 --> 00:18:48.500
And anyone who is out there thinking about having a Kickstarter, it's absolutely about

00:18:48.500 --> 00:18:53.020
getting to your goal as quick as possible, even if that's not your real goal.

00:18:53.020 --> 00:18:53.540
Right.

00:18:53.540 --> 00:18:59.140
Because like you said, the way Kickstarter, I launched my first course on Kickstarter as

00:18:59.140 --> 00:19:01.920
well, and it was funded in 12 hours.

00:19:01.920 --> 00:19:07.160
And then it spent like three weeks, the number one Kickstarter on software on Kickstarter.

00:19:07.160 --> 00:19:08.280
Yeah.

00:19:08.280 --> 00:19:15.140
And it's, I could have put $20,000 for it and may, I probably would have funded maybe, but

00:19:15.140 --> 00:19:19.940
I put like, I don't remember what I put like three or something silly, like something small

00:19:19.940 --> 00:19:21.640
because I was going to do it anyway.

00:19:21.640 --> 00:19:23.000
I was going to write the course anyway.

00:19:23.000 --> 00:19:27.960
So it's, it's not like it was hardware and I would have to invest in like a bunch of CNC

00:19:27.960 --> 00:19:31.180
machines and dyes and like, I'm going to do it anyway.

00:19:31.180 --> 00:19:34.040
And I don't exactly need the money to pay to do it.

00:19:34.040 --> 00:19:39.860
All the money would really help basically take the edge off of the nervousness of like quitting

00:19:39.860 --> 00:19:40.680
your job and doing that.

00:19:40.680 --> 00:19:40.940
Right.

00:19:40.940 --> 00:19:41.460
Right.

00:19:41.460 --> 00:19:44.500
But it's, yeah, it's, it's super important to get it funded quick.

00:19:44.500 --> 00:19:44.760
Yeah.

00:19:44.760 --> 00:19:45.400
Yeah.

00:19:45.400 --> 00:19:46.760
I mean, we would have done it anyway too.

00:19:46.760 --> 00:19:49.800
It was just, you know, an extra way to bring in a little bit of revenue.

00:19:50.160 --> 00:19:54.160
And then, yeah, it was just also sort of the popularity around that.

00:19:54.160 --> 00:19:56.400
We got our name out a little bit more with Kickstarter.

00:19:56.400 --> 00:19:57.080
Yeah, absolutely.

00:19:57.080 --> 00:20:01.820
You know, one thing that was really surprising to me was I thought like the vast majority of

00:20:01.820 --> 00:20:06.460
the funders of the Kickstarter would be people that I would somehow tell about either on social

00:20:06.460 --> 00:20:09.240
media or on the podcast or some other way.

00:20:09.240 --> 00:20:09.480
Right.

00:20:10.260 --> 00:20:14.360
And 40% came just from Kickstarter, not from me.

00:20:14.360 --> 00:20:14.440
Yeah.

00:20:14.440 --> 00:20:15.640
It was really surprising.

00:20:15.640 --> 00:20:17.280
So I think that was quite a good deal.

00:20:17.280 --> 00:20:17.520
Yeah.

00:20:20.040 --> 00:20:22.960
This portion of Talk Python To Me is brought to you by Linode.

00:20:22.960 --> 00:20:26.680
Are you looking for hosting that's fast, simple, and incredibly affordable?

00:20:26.680 --> 00:20:31.800
Well, look past that bookstore and check out Linode at talkpython.fm/Linode.

00:20:31.800 --> 00:20:33.700
That's L-I-N-O-D-E.

00:20:33.700 --> 00:20:38.120
Plans start at just $5 a month for a dedicated server with a gig of RAM.

00:20:38.440 --> 00:20:40.320
They have 10 data centers across the globe.

00:20:40.320 --> 00:20:44.140
So no matter where you are or where your users are, there's a data center for you.

00:20:44.140 --> 00:20:48.640
Whether you want to run a Python web app, host a private Git server, or just a file server,

00:20:48.640 --> 00:20:55.440
you'll get native SSDs on all the machines, a newly upgraded 200 gigabit network, 24-7 friendly

00:20:55.440 --> 00:20:58.560
support even on holidays, and a seven-day money-back guarantee.

00:20:58.560 --> 00:21:00.200
Need a little help with your infrastructure?

00:21:00.200 --> 00:21:04.920
They even offer professional services to help you with architecture, migrations, and more.

00:21:04.920 --> 00:21:07.880
Do you want a dedicated server for free for the next four months?

00:21:08.240 --> 00:21:10.940
Just visit talkpython.fm/Linode.

00:21:10.940 --> 00:21:14.440
So you had these three courses originally.

00:21:14.440 --> 00:21:15.840
Do you remember what they were, the names?

00:21:15.840 --> 00:21:19.160
So it was real, I mean, it was basically real Python 1, 2, and 3.

00:21:19.160 --> 00:21:24.360
We didn't really have like, you know, names for it, but real, you know, the first real Python

00:21:24.360 --> 00:21:26.520
course was just the Python fundamentals.

00:21:26.520 --> 00:21:30.140
The second one was web development and I guess unofficially Flask.

00:21:30.140 --> 00:21:34.380
And then the third one was just more of a little bit more of an advanced course.

00:21:34.380 --> 00:21:35.820
And that was all Django based.

00:21:35.820 --> 00:21:36.760
Yeah, that's really cool.

00:21:36.820 --> 00:21:40.040
How long did it take for you to write the courses?

00:21:40.040 --> 00:21:45.360
So I'm the author of the second course and I want to say six months.

00:21:45.360 --> 00:21:46.000
Yeah.

00:21:46.000 --> 00:21:47.340
Sounds about right.

00:21:47.340 --> 00:21:49.860
How long is it for the students to take the course?

00:21:49.860 --> 00:21:52.440
Oh gosh, there is so much content there.

00:21:52.440 --> 00:21:55.460
There's way, way too much content.

00:21:55.520 --> 00:22:00.000
Yeah, I would probably say it's like six or 700, you know, pages of content there.

00:22:00.000 --> 00:22:05.640
And it goes into web fundamentals, you know, it goes into HTTP, goes into web scraping.

00:22:05.640 --> 00:22:09.100
And then you sort of build a CGI based framework.

00:22:09.100 --> 00:22:11.020
And then you go into Flask.

00:22:11.020 --> 00:22:13.420
And then I do a little bit of Web 2 Pie.

00:22:13.420 --> 00:22:17.740
Oh, and then actually at the end of the course, there is a bit of Django that sort of leads

00:22:17.740 --> 00:22:19.200
into the last course.

00:22:19.300 --> 00:22:20.460
Yeah, that's a lot of content.

00:22:20.460 --> 00:22:25.720
You got to get yourself in the right mindset to work on something that's going to be six

00:22:25.720 --> 00:22:27.840
months out before you know whether it's successful.

00:22:27.840 --> 00:22:33.000
And, you know, just work on something that long before you figure out whether it was a good

00:22:33.000 --> 00:22:33.260
idea.

00:22:33.260 --> 00:22:39.680
Yeah, it takes a lot of planning, a lot of discipline, a lot of pain, a lot of lonely

00:22:39.680 --> 00:22:40.120
nights.

00:22:40.120 --> 00:22:42.080
But it's rewarding in the end, right?

00:22:42.080 --> 00:22:42.860
Yes, yes.

00:22:42.860 --> 00:22:44.040
I think so.

00:22:44.040 --> 00:22:47.700
Although I would say like, if you actually want to make money, don't write a book.

00:22:47.700 --> 00:22:49.620
But I keep writing books.

00:22:49.620 --> 00:22:52.360
So I should probably actually listen to my own advice here.

00:22:52.360 --> 00:22:53.560
Yeah, someday maybe, right?

00:22:53.560 --> 00:22:54.420
Right.

00:22:54.420 --> 00:22:55.240
That's funny.

00:22:55.240 --> 00:22:56.180
Another life.

00:22:56.180 --> 00:22:56.880
Yeah, for sure.

00:22:56.880 --> 00:23:02.160
So RealPython now, realpython.com now has more than just those three courses, right?

00:23:02.160 --> 00:23:03.940
There's like a ton of content.

00:23:03.940 --> 00:23:08.340
And when I throw it into the various analytics systems, that'll tell me like the amount of

00:23:08.340 --> 00:23:10.800
traffic going to realpython.com and stuff.

00:23:10.800 --> 00:23:12.600
It's pretty seriously impressive.

00:23:12.600 --> 00:23:19.440
You guys show up or that site that you built rather shows up quite high on a lot of Google

00:23:19.440 --> 00:23:20.920
searches for anything to do with Python.

00:23:20.920 --> 00:23:22.400
Yeah, it's pretty, pretty incredible.

00:23:22.400 --> 00:23:24.320
I don't own RealPython anymore.

00:23:24.320 --> 00:23:26.300
Dan Bader actually took that over.

00:23:26.300 --> 00:23:32.060
But yeah, he has done an amazing job of really kind of creating a sort of like New Yorker-esque

00:23:32.060 --> 00:23:34.020
type magazine for Python.

00:23:34.020 --> 00:23:38.120
He hired somebody to do all the graphic design.

00:23:38.120 --> 00:23:43.460
And each individual article has its own like unique sort of graphic to it.

00:23:43.460 --> 00:23:45.460
And then, yeah, there's more courses on there now.

00:23:45.460 --> 00:23:48.480
So it's really incredible just to see what he has done.

00:23:48.480 --> 00:23:50.900
Yeah, I'm super impressed with what Dan has done.

00:23:50.900 --> 00:23:53.420
And he's really turned the knob up a little bit more.

00:23:53.420 --> 00:23:55.940
And he's got a lot of people participating.

00:23:56.460 --> 00:24:00.620
And whenever there's an article on there, it's not just one of these, you know, like three

00:24:00.620 --> 00:24:05.760
paragraph and then a bunch of like weird, unrelated other articles at the bottom.

00:24:05.760 --> 00:24:08.860
Those are like little mini books almost, right?

00:24:08.860 --> 00:24:11.640
Like those are serious articles that Dan's putting together.

00:24:11.800 --> 00:24:15.360
Yeah, his articles focus a little more on the Python basics or fundamentals.

00:24:15.360 --> 00:24:17.660
So they'll probably stand the test of time a little bit more.

00:24:17.660 --> 00:24:19.420
I like I enjoyed the website.

00:24:19.420 --> 00:24:23.400
And so I focused a little bit more on like the practical sort of tutorials.

00:24:23.400 --> 00:24:27.600
And those are out of date within, you know, could be within hours, you know, depending on

00:24:27.600 --> 00:24:28.100
what happens.

00:24:28.100 --> 00:24:34.140
But yeah, I mean, they definitely don't stand the test of time quite as well as the fundamentals.

00:24:34.140 --> 00:24:36.160
Yeah, that's definitely a challenge for sure.

00:24:36.160 --> 00:24:41.020
So I think Dan is doing a super job with RealPython, but why did you guys sell it?

00:24:41.020 --> 00:24:42.860
Well, I mean, different opportunities came our way.

00:24:42.860 --> 00:24:45.660
We wanted to focus on other things.

00:24:45.660 --> 00:24:51.280
The original founder, Fletcher Heisler, he was getting into security and he actually started

00:24:51.280 --> 00:24:53.340
a company called Hunter 2.

00:24:53.340 --> 00:24:58.100
And he went through Y Combinator and I believe he's still working on that.

00:24:58.100 --> 00:25:02.860
Jeremy ended up, he had a software testing business.

00:25:02.860 --> 00:25:06.080
He lived abroad in Malaysia for a number of years.

00:25:06.080 --> 00:25:10.660
He moved his wife and his family to Cambridge and got a job at Harvard.

00:25:10.660 --> 00:25:14.580
And yeah, I wanted to focus a little bit more on teaching.

00:25:14.580 --> 00:25:20.500
And also I wanted to focus on sort of teaching more intermediate to advanced level developers,

00:25:20.500 --> 00:25:23.820
just those that could already build sort of a crud up.

00:25:23.820 --> 00:25:26.600
And so that transitions us into test revenue.

00:25:26.600 --> 00:25:27.660
Yeah, absolutely.

00:25:27.660 --> 00:25:29.820
That sounds totally normal, right?

00:25:29.820 --> 00:25:33.480
Like you have a couple of people working on stuff and they just kind of start to drift

00:25:33.480 --> 00:25:34.360
in different directions.

00:25:34.360 --> 00:25:40.340
And working on something like RealPython.com, it takes a lot of not just effort, but like

00:25:40.340 --> 00:25:41.540
enthusiasm, right?

00:25:41.540 --> 00:25:45.120
You're like, okay, you know, you have to wake up and go, okay, there's this great new topic

00:25:45.120 --> 00:25:47.020
I want to write this article about.

00:25:47.100 --> 00:25:51.320
And if you're just distracted with other things that are more, you know, seem more valuable

00:25:51.320 --> 00:25:53.500
to you at the moment, then it's hard to do that, right?

00:25:53.500 --> 00:25:54.100
Yeah.

00:25:54.100 --> 00:25:57.740
Do you think it would have been different if just one person ran it?

00:25:57.740 --> 00:26:00.000
Like let's say if it was just you running it by yourself?

00:26:00.000 --> 00:26:01.400
I think I would have burned out quicker.

00:26:01.400 --> 00:26:03.780
I think I would have moved on quicker.

00:26:03.780 --> 00:26:04.400
Interesting.

00:26:04.620 --> 00:26:04.860
Yeah.

00:26:04.860 --> 00:26:06.180
I don't know.

00:26:06.180 --> 00:26:07.220
That's difficult to say.

00:26:07.220 --> 00:26:11.960
But yeah, I think if it may have just been my baby, I may have like stuck with it and,

00:26:11.960 --> 00:26:12.880
you know, seen it through.

00:26:12.880 --> 00:26:19.040
But since it was, you know, all three of ours, we just kind of were both at a point or all

00:26:19.040 --> 00:26:22.060
of us were at a point where it's like, hey, this is a good time to transition.

00:26:22.060 --> 00:26:22.820
Yeah, that makes sense.

00:26:22.820 --> 00:26:27.280
I couldn't guess really whether it would mean like you'd be done with it sooner or with you

00:26:27.280 --> 00:26:31.120
would have like, you know, had a little more like, I'm just going to guide it my way.

00:26:31.260 --> 00:26:31.380
Yeah.

00:26:31.380 --> 00:26:31.860
Interesting.

00:26:31.860 --> 00:26:32.640
All right.

00:26:32.640 --> 00:26:34.560
So yeah, you mentioned test driven.

00:26:34.560 --> 00:26:36.020
Let's talk about test driven.

00:26:36.020 --> 00:26:43.060
So your current project is test driven.io and it looks somewhat similar to the way you

00:26:43.060 --> 00:26:45.100
described the origin of real Python itself.

00:26:45.100 --> 00:26:45.460
Yeah.

00:26:45.460 --> 00:26:50.640
So test driven really came from a similar origin as real Python.

00:26:50.640 --> 00:26:53.360
Whereas real Python, there are no beginner courses on the market.

00:26:53.360 --> 00:26:58.420
Test driven came about because there were basically too many beginner courses on the market and

00:26:58.420 --> 00:27:00.920
there are not enough intermediate to advanced level courses.

00:27:00.920 --> 00:27:07.220
And also I was sort of transitioning from, I'd say, application development more towards

00:27:07.220 --> 00:27:08.920
infrastructure platform development.

00:27:08.920 --> 00:27:11.620
I kind of wanted to write a little bit more about that.

00:27:11.620 --> 00:27:16.680
Microservices, Docker, Kubernetes, you know, all the latest buzzwords these days.

00:27:16.680 --> 00:27:17.020
Yeah.

00:27:17.020 --> 00:27:17.260
Yeah.

00:27:17.260 --> 00:27:19.540
We'll definitely talk about that a little bit.

00:27:19.540 --> 00:27:24.060
It sounds to me a little bit like some of these courses are coming from your experience

00:27:24.060 --> 00:27:28.480
of running things like real Python and other consulting projects that you're doing.

00:27:28.480 --> 00:27:31.380
kind of like I mentioned before, the build versus buy story.

00:27:31.380 --> 00:27:31.740
Yeah.

00:27:31.740 --> 00:27:32.080
Yeah.

00:27:32.080 --> 00:27:34.920
They definitely come from a real world experience.

00:27:34.920 --> 00:27:40.480
Just at my last couple of, you know, full-time gigs, just moving a little bit more towards

00:27:40.480 --> 00:27:45.100
DevOps side of things or platform, you know, developments and helping companies transition

00:27:45.100 --> 00:27:47.360
into more of like a DevOps-y type mindset.

00:27:47.360 --> 00:27:47.780
Yeah.

00:27:47.780 --> 00:27:48.240
Yeah.

00:27:48.240 --> 00:27:48.700
That's really cool.

00:27:49.080 --> 00:27:54.200
So right now it looks like you have microservices with Docker, Flask and React and real-time apps

00:27:54.200 --> 00:27:55.820
with Django channels and Angular.

00:27:55.820 --> 00:28:02.520
And they definitely have this flavor of Python on the back end and rich JavaScript front-end

00:28:02.520 --> 00:28:04.720
frameworks like React or Angular.

00:28:04.720 --> 00:28:05.040
Yeah.

00:28:05.120 --> 00:28:06.840
Is that kind of your vibe these days?

00:28:06.840 --> 00:28:08.140
How you like to build web apps?

00:28:08.140 --> 00:28:08.580
Yeah.

00:28:08.580 --> 00:28:08.920
Yeah.

00:28:08.920 --> 00:28:13.620
The stacks that I work on are usually Django or Flask on the back end.

00:28:13.620 --> 00:28:19.220
And then, you know, some sort of single-page application type framework like React, Angular

00:28:19.220 --> 00:28:20.800
Vue on the client side.

00:28:20.800 --> 00:28:21.100
Nice.

00:28:21.180 --> 00:28:24.300
I've been doing some stuff with Vue lately and I'm really enjoying it.

00:28:24.300 --> 00:28:26.240
What's your favorite front-end framework these days?

00:28:26.240 --> 00:28:27.600
I like Vue too.

00:28:27.600 --> 00:28:29.360
You can move a little bit faster with Vue.

00:28:29.360 --> 00:28:33.540
You do get the two-way binding with Vue that you don't get from Angular and React.

00:28:33.540 --> 00:28:36.280
So just spinning up forms is so much easier.

00:28:36.280 --> 00:28:39.360
I don't know as much about Vue at scale, though.

00:28:39.360 --> 00:28:42.900
I don't know if you can lock down two-way binding back down to one-way binding.

00:28:42.900 --> 00:28:46.020
But I definitely like the Vue way of doing things.

00:28:46.020 --> 00:28:46.700
Yeah, I do too.

00:28:46.700 --> 00:28:47.700
It's quite nice.

00:28:48.040 --> 00:28:51.240
testdriven.io itself, is this built on Python?

00:28:51.240 --> 00:28:52.680
Like, how are you running that site?

00:28:52.680 --> 00:28:54.760
So yeah, it's a Django back end.

00:28:54.760 --> 00:28:59.700
I am using server-side templating because I don't think single-page applications are for

00:28:59.700 --> 00:29:02.740
everything, especially when you're a single-person development team.

00:29:02.740 --> 00:29:05.880
So I can move a little bit faster with server-side templating.

00:29:05.880 --> 00:29:09.300
And then I just use just vanilla JavaScript on the client.

00:29:09.300 --> 00:29:11.240
That's always an interesting tension, isn't it?

00:29:11.240 --> 00:29:16.960
Of having just a full-on JavaScript front-end type of app versus, you know, like you said,

00:29:16.960 --> 00:29:17.840
a server-side app.

00:29:17.840 --> 00:29:18.240
Yeah.

00:29:18.240 --> 00:29:18.640
I don't know.

00:29:18.640 --> 00:29:20.780
I'm still a little bit partial to the server-side stuff.

00:29:20.780 --> 00:29:23.200
I feel like the SEO is a little simpler a lot of times.

00:29:23.200 --> 00:29:25.660
There's less compatibility to worry about.

00:29:25.660 --> 00:29:29.900
Like, if I send the HTML, I know that's the HTML they got, not like what kind of JavaScript

00:29:29.900 --> 00:29:33.620
platform are they running, like some crappy old browser or something like that.

00:29:33.620 --> 00:29:33.880
Right.

00:29:33.880 --> 00:29:34.080
Yeah.

00:29:34.080 --> 00:29:38.700
If you're using a single-page application, then yeah, you have to actually guide the search

00:29:38.700 --> 00:29:43.460
engine to crawl through the, kind of trick the search engine almost to like crawl all

00:29:43.460 --> 00:29:43.960
the pages.

00:29:44.300 --> 00:29:46.820
So you get SEI out of the box with server-side templating.

00:29:46.820 --> 00:29:51.920
Also, I'm not maintaining a lot of state between views on the client side, so it just made sense

00:29:51.920 --> 00:29:53.680
to keep, to stick with server-side templating.

00:29:53.680 --> 00:29:53.980
Yeah.

00:29:53.980 --> 00:29:54.300
Right.

00:29:54.300 --> 00:29:58.600
If you're going to pull down a bunch of data and continually work with it, like Gmail or Google

00:29:58.600 --> 00:30:00.060
Maps or something like that, right?

00:30:00.060 --> 00:30:02.380
Then like all of a sudden it makes a lot more sense perhaps.

00:30:02.380 --> 00:30:02.720
Yeah.

00:30:02.820 --> 00:30:03.060
Okay.

00:30:03.060 --> 00:30:03.560
Cool.

00:30:03.560 --> 00:30:04.920
So people can check that out.

00:30:04.920 --> 00:30:06.860
That's definitely a nice project.

00:30:06.860 --> 00:30:12.480
And I think maybe let's dig into some of the philosophies or steps that kind of got you to running

00:30:12.480 --> 00:30:13.460
that on Django.

00:30:13.460 --> 00:30:18.520
Originally, were you working with Flask and then got converted over to Django?

00:30:18.520 --> 00:30:19.120
Is that right?

00:30:19.340 --> 00:30:19.640
Yeah.

00:30:19.640 --> 00:30:24.740
So, I mean, we fast or we go back, you know, five or six years, something like that.

00:30:24.740 --> 00:30:26.180
And I was entirely Django.

00:30:26.180 --> 00:30:30.340
Well, and somewhere along the way, it was like, oh, Flask is really cool.

00:30:30.340 --> 00:30:32.020
So let's work with Flask.

00:30:32.020 --> 00:30:37.740
I can sort of rebuild Django in the way that I see fit for that particular application.

00:30:38.120 --> 00:30:42.200
And then I was talking to my friend William Vincent over the summer.

00:30:42.200 --> 00:30:44.340
And he's a big Django guy.

00:30:44.340 --> 00:30:50.800
He wrote a couple of Django courses or Django books, Django for Beginners and API development

00:30:50.800 --> 00:30:51.800
one for Django.

00:30:51.800 --> 00:30:53.240
The name is escaping me right now.

00:30:53.240 --> 00:30:53.540
Yeah.

00:30:53.540 --> 00:30:54.840
I just had him on the show, actually.

00:30:54.840 --> 00:30:55.360
Yeah.

00:30:55.360 --> 00:31:01.380
And he convinced me to move to Django and he wanted to hack on the application as well.

00:31:01.380 --> 00:31:05.820
And so it was an opportunity to look back at Django and pick that up.

00:31:05.820 --> 00:31:06.840
So just ran with it.

00:31:06.840 --> 00:31:07.300
Yeah, it's cool.

00:31:07.400 --> 00:31:09.620
It feels like Django is definitely still going strong, right?

00:31:09.620 --> 00:31:14.760
They just did their 2.0 release and dropped Legacy Python support and are talking about

00:31:14.760 --> 00:31:17.940
the async future as whatever that might be.

00:31:17.940 --> 00:31:19.620
But it seems like things are going well there.

00:31:19.620 --> 00:31:19.940
Yeah.

00:31:19.940 --> 00:31:20.280
Yeah.

00:31:20.280 --> 00:31:21.360
I'm really impressed.

00:31:21.360 --> 00:31:22.940
Django 2.2 is coming out here soon.

00:31:22.940 --> 00:31:24.540
That's the next LTS release.

00:31:24.540 --> 00:31:28.800
And then Django 3 at the end of the year should have a bunch of async madness in it.

00:31:28.800 --> 00:31:29.040
Yeah.

00:31:29.040 --> 00:31:30.960
Actually, that'll be really fun.

00:31:30.960 --> 00:31:36.580
I think async is interesting because it's something that most people don't really need, but it's often

00:31:36.680 --> 00:31:43.440
something that people feel like, oh, I can't use Python for this because it doesn't have this amazing async support on the server or whatever.

00:31:43.440 --> 00:31:50.520
In practice, most of the time, people don't actually have the problem that they feel like they're trying to avoid or get out of.

00:31:50.520 --> 00:31:53.700
I mean, sometimes they do, but it will be great to have async on the server.

00:31:53.700 --> 00:31:55.060
And there are some already, right?

00:31:55.120 --> 00:31:56.300
Like we have court.

00:31:56.300 --> 00:31:57.420
We have Sanic.

00:31:57.420 --> 00:31:59.880
We have responder from Kenneth Reitz.

00:31:59.880 --> 00:32:06.600
There's certainly some options, but it'll be cool to have these more mainstream, really popular frameworks.

00:32:06.600 --> 00:32:08.980
Just get this feature, right?

00:32:08.980 --> 00:32:09.320
Yeah.

00:32:09.320 --> 00:32:13.520
I see actually async.io more and more in code bases these days.

00:32:13.520 --> 00:32:15.720
Just little things here and there.

00:32:15.960 --> 00:32:22.480
But yeah, it will be exciting to have that full potential, the full async capabilities in the Django views.

00:32:22.720 --> 00:32:23.060
Yeah, absolutely.

00:32:23.060 --> 00:32:23.440
All right.

00:32:23.440 --> 00:32:31.180
So another thing that I think was interesting is this whole monolith versus microservices debate, right?

00:32:31.200 --> 00:32:37.080
Like you can have a little bit more complicated, big monolith application where everything works together and fits together.

00:32:37.080 --> 00:32:38.840
And the complexity is kind of in the code.

00:32:38.840 --> 00:32:44.020
Or you can say, let's break it into a bunch of little pieces or a bunch of little simple services that work together.

00:32:44.020 --> 00:32:48.000
And then the complexity kind of shifts to the infrastructure a little bit, right?

00:32:48.000 --> 00:32:53.880
I got to keep them all running and like talking and like what happens if one goes down and the other is not and all that.

00:32:53.880 --> 00:32:55.700
And I think it's a really great way of looking at it.

00:32:55.720 --> 00:33:02.300
You're sort of shifting the complexity around so it's not so much in the application like code base.

00:33:02.300 --> 00:33:06.440
And then it's more on sort of the infrastructure or the DevOps sort of people.

00:33:06.440 --> 00:33:09.040
So you should, in theory, have smaller code bases.

00:33:09.040 --> 00:33:12.140
Smaller code bases, you should have less bugs in them.

00:33:12.140 --> 00:33:14.460
You can throw juniors on them easier.

00:33:14.460 --> 00:33:14.800
Exactly, yeah.

00:33:14.800 --> 00:33:16.320
You should be able to move a little bit faster.

00:33:16.320 --> 00:33:21.940
Yeah, which is interesting because if you're like a big company and you've got some big site, you can break in little pieces.

00:33:21.940 --> 00:33:26.980
And like you said, you can throw some junior folks to maintain this part, this little microservice.

00:33:26.980 --> 00:33:30.380
And that you don't have to understand the whole giant thing, right?

00:33:30.380 --> 00:33:35.380
So you can sort of have each person divvy up the work in a more clear, simple way.

00:33:35.380 --> 00:33:37.540
And if you have a lot of people working on it, that's great.

00:33:37.540 --> 00:33:42.900
But, you know, I feel like a lot of folks want to say, well, I need to have all these microservices.

00:33:42.900 --> 00:33:46.440
But really, they're just like one or two devs on that project.

00:33:46.440 --> 00:33:50.100
You know, it's like, well, does that really help?

00:33:50.100 --> 00:33:51.460
You know, is that really a good idea?

00:33:51.460 --> 00:33:51.940
What do you think?

00:33:51.940 --> 00:33:53.020
Definitely not a great idea.

00:33:53.020 --> 00:33:59.740
I think with microservices, I think too many folks tend to focus on sort of the technology side.

00:33:59.740 --> 00:34:04.060
So learning Kubernetes or learning Docker, you know, learning whatever it is.

00:34:04.060 --> 00:34:05.500
It's always fun to learn these things, right?

00:34:05.500 --> 00:34:08.060
You're like, oh, this will be my chance to like learn this way.

00:34:08.060 --> 00:34:12.040
And then microservices, then on pods, and we're just going to scale it and it'll be beautiful, right?

00:34:12.040 --> 00:34:12.340
Right.

00:34:12.340 --> 00:34:13.880
But I think it's more of a culture shift.

00:34:13.980 --> 00:34:20.600
I think you have to focus more on top-down culture shift where you can't just take your normal like siloed teams.

00:34:20.600 --> 00:34:32.700
So maybe a back-end team, front-end team, QA, operations, and sort of introduce microservices in an environment where each team is siloed and just tossing artifacts over the fence to the next team.

00:34:32.820 --> 00:34:48.380
So you sort of have to look at the culture, maybe introduce feature teams, but start bringing in folks, bringing in teams that can start product inception all the way to delivery and introduce that type of change in your organization before introducing microservices.

00:34:48.380 --> 00:34:52.220
Yeah.

00:34:52.220 --> 00:34:56.480
Well, also, I think, you know, it makes a lot of sense to play to your strengths, right?

00:34:56.480 --> 00:35:06.200
If your strengths are running the infrastructure and Kubernetes and all of these things, microservices are probably the right way to go because you can balance that really well.

00:35:06.200 --> 00:35:15.260
But if you just learn Django and you're thinking, well, I need to get my app out there, you're probably better off focusing on just like, well, let's just push it to Heroku or something like that.

00:35:15.260 --> 00:35:15.780
Yeah, exactly.

00:35:15.780 --> 00:35:16.260
Interesting.

00:35:16.880 --> 00:35:23.800
So on Python Bytes, other podcasts, we spoke about this a while ago about how you're not Google, you're not Facebook, you're not LinkedIn.

00:35:23.800 --> 00:35:30.400
And a lot of engineers will see the really cool stuff, like let's say Instagram is doing with Django.

00:35:30.400 --> 00:35:32.700
And they're like, well, that's how you do it, right?

00:35:32.700 --> 00:35:34.360
I want my app to be good and professional.

00:35:34.360 --> 00:35:36.600
So it's going to be like that, right?

00:35:36.600 --> 00:35:45.020
But their app gets, you know, 100 or 1,000 or 10,000 visitors a day, not per second, right?

00:35:45.020 --> 00:35:47.860
And so there's not 20, 30, 50 people working on it.

00:35:47.860 --> 00:35:57.280
And so I think in the industry, there's a lot of sort of admiration of the big successful applications and then trying to model that.

00:35:57.280 --> 00:35:57.560
Right.

00:35:57.560 --> 00:36:06.040
And a lot of times I think that can be, it's like a little bit like the code level equivalent of premature optimization where you're like, oh, this has got to be super fast.

00:36:06.080 --> 00:36:07.560
You're like, you know what, make it right.

00:36:07.560 --> 00:36:09.800
We're not making it fast when it matters, right?

00:36:09.800 --> 00:36:10.620
What do you think?

00:36:10.620 --> 00:36:12.860
Well, yeah, you definitely have to pick and choose your battles.

00:36:12.860 --> 00:36:14.300
You can't do everything.

00:36:14.300 --> 00:36:26.020
So if you're a single person team or, you know, you have two or three developers, you probably want to focus a little bit more on the application rather than the infrastructure, unless the infrastructure is sort of your bread and butter.

00:36:26.020 --> 00:36:33.440
But yeah, you just really need to think from a product standpoint, you know, what is differentiating my product from the market?

00:36:33.440 --> 00:36:38.220
Is it the actual, you know, what's in the application or is it something to do with the infrastructure?

00:36:41.360 --> 00:36:47.620
This portion of Talk Python To Me is brought to you by StellarS, the AI-powered talent agent for top tech talent.

00:36:47.620 --> 00:36:50.620
Hate your job or feeling just kind of meh about it?

00:36:50.620 --> 00:36:55.120
StellarS will help you find a new job you'll actually be excited to go to.

00:36:55.120 --> 00:36:59.520
StellarS knows that a job is much more than just how it sounds in a job description.

00:36:59.520 --> 00:37:03.760
So they built their AI-powered talent agent to help you find the ideal job.

00:37:03.760 --> 00:37:08.780
StellarS does all the work and screening for you, scouting out the best companies and roles

00:37:08.780 --> 00:37:13.420
and introducing you to opportunities outside your network that you wouldn't have otherwise found.

00:37:13.420 --> 00:37:19.560
Combining deep AI matching with human support, StellarS pairs things down to a maximum of five opportunities

00:37:19.560 --> 00:37:26.220
that tightly match your goals, like compensation, work-life balance, working on products you're passionate about, and team chemistry.

00:37:26.220 --> 00:37:33.180
They then facilitate warm intros, and there's never any pressure, just opportunities to explore what's out there.

00:37:33.180 --> 00:37:38.960
To get started and find a job that's just right for you, visit talkpython.fm/StellarS.

00:37:38.960 --> 00:37:44.100
That's talkpython.fm/S-T-E-L-L-A-R-E-S.

00:37:44.100 --> 00:37:46.900
Or just click the link in your show notes in your podcast player.

00:37:48.820 --> 00:38:02.000
Generally, the rule probably should be, if whatever the thing is, the part you're talking about, is not your core business, like, outsource that, get a package that does that, or, like, find some easy way to just make that get solved, you know?

00:38:02.000 --> 00:38:03.900
And focus on what's really important, right?

00:38:03.900 --> 00:38:04.640
What makes you special.

00:38:04.640 --> 00:38:04.940
Right.

00:38:04.940 --> 00:38:06.800
You don't have to reinvent the wheel for everything.

00:38:06.800 --> 00:38:07.300
Yeah, yeah.

00:38:07.300 --> 00:38:09.660
There's always an awesome Python you can go look up and find.

00:38:09.660 --> 00:38:11.340
Probably something right there.

00:38:11.340 --> 00:38:12.280
Yeah.

00:38:12.280 --> 00:38:12.900
Yeah.

00:38:12.900 --> 00:38:15.080
So how are you deploying testdriven.io?

00:38:15.080 --> 00:38:16.120
Are you, how's it running?

00:38:16.120 --> 00:38:16.900
Is it a monolith?

00:38:16.900 --> 00:38:17.600
Is it a microservice?

00:38:17.600 --> 00:38:18.820
Does it, where does it run?

00:38:18.820 --> 00:38:21.920
So it's a monolith, and yeah, I just did the easy thing.

00:38:21.920 --> 00:38:23.540
I just deployed it right directly to Heroku.

00:38:23.540 --> 00:38:24.600
Okay, nice.

00:38:24.600 --> 00:38:26.660
Yeah, I don't have that much experience with Heroku.

00:38:26.660 --> 00:38:29.440
More work with the virtual machines and stuff.

00:38:29.440 --> 00:38:33.000
But the people who I know who do use it, they seem to really like it.

00:38:33.000 --> 00:38:34.280
Like, what do you like about Heroku?

00:38:34.440 --> 00:38:37.560
Well, I guess first off, yeah, I am using a monolith and I am using Heroku.

00:38:37.560 --> 00:38:42.120
So it feels, it feels a little bit old school, even though these tools and technologies, you

00:38:42.120 --> 00:38:45.400
know, they're not that old, like 2005 or, you know, something like that.

00:38:45.400 --> 00:38:49.320
But it does feel dirty saying like, yeah, test driven is a monolith.

00:38:49.320 --> 00:38:53.720
Well, I think that just speaks to like some of this culture that I was talking about, right?

00:38:53.720 --> 00:38:59.740
Like, it's so easy to look and go, well, this is the way, you know, these big web apps

00:38:59.740 --> 00:39:01.660
are run and yours didn't like that.

00:39:01.660 --> 00:39:02.500
So it must be wrong.

00:39:02.560 --> 00:39:06.980
It's like, no, it's like, it's totally a different calculation when one or two or three

00:39:06.980 --> 00:39:10.760
people work on something versus a whole group or whole sets of teams, right?

00:39:10.760 --> 00:39:11.620
Yeah, definitely.

00:39:11.620 --> 00:39:12.000
Yeah.

00:39:12.000 --> 00:39:12.560
Interesting.

00:39:12.560 --> 00:39:15.160
So what features over at Heroku are you using?

00:39:15.160 --> 00:39:17.100
Like, are you using Postgres?

00:39:17.100 --> 00:39:17.980
What else?

00:39:17.980 --> 00:39:18.380
Tell me about it.

00:39:18.380 --> 00:39:21.800
Yeah, I think the powerful thing about Heroku is the add-on system.

00:39:21.800 --> 00:39:22.400
Okay.

00:39:22.400 --> 00:39:27.280
So instead of, you know, having to build a number of different tools and services and

00:39:27.280 --> 00:39:31.780
link them all together, you really just, you know, pop Gunicorn on there, pop Django on

00:39:31.780 --> 00:39:32.040
there.

00:39:32.040 --> 00:39:37.940
And then you can focus on using the Heroku add-on system for sort of like your remainder

00:39:37.940 --> 00:39:39.880
of tools that you need.

00:39:39.880 --> 00:39:48.020
So yeah, I use Postgres, Redis, use SendGrid, use Sentry, use Log Entries as my log aggregator.

00:39:48.020 --> 00:39:49.120
And then I use New Relic.

00:39:49.120 --> 00:39:52.460
And those are all just, they all come from the add-on system.

00:39:52.680 --> 00:39:54.860
So it takes minutes to basically set up.

00:39:54.860 --> 00:39:59.040
So now I can just focus, you know, 100% of my time on the actual application.

00:39:59.040 --> 00:39:59.360
Yeah.

00:39:59.360 --> 00:40:03.900
That's kind of the opposite of focusing on the microservices and juggling the infrastructure.

00:40:03.900 --> 00:40:06.400
That's like, just let them handle all that.

00:40:06.400 --> 00:40:07.640
Here's my code.

00:40:07.640 --> 00:40:08.840
Make it go.

00:40:08.840 --> 00:40:09.480
Yeah.

00:40:09.480 --> 00:40:12.660
And I mean, again, it depends on what you want to focus your time on.

00:40:12.660 --> 00:40:17.920
And yeah, I love tinkering with infrastructure and whatnot, but I did not want to do that for

00:40:17.920 --> 00:40:21.600
testdriven.io because I just wanted to get it up out the door.

00:40:22.120 --> 00:40:24.920
And yeah, maybe I'll start scaling out some bits and pieces of it.

00:40:24.920 --> 00:40:28.460
Like there's a separate service in there, or there's a couple of separate services that

00:40:28.460 --> 00:40:32.740
I want to actually break out or a couple of separate pieces of the app that I want to break

00:40:32.740 --> 00:40:33.880
out into separate services.

00:40:33.880 --> 00:40:36.660
So maybe I'll look in doing that here soon.

00:40:36.660 --> 00:40:41.680
But you know, the backlog is just full of bugs and features and stuff that I need to tackle

00:40:41.680 --> 00:40:43.740
first before I start looking at the fun stuff.

00:40:43.740 --> 00:40:46.140
It's more important to just like get content out there.

00:40:46.140 --> 00:40:46.460
Yeah.

00:40:46.460 --> 00:40:50.480
Once you have something working, then it is to like get some cool feature refactored.

00:40:50.480 --> 00:40:50.780
Yeah.

00:40:50.780 --> 00:40:51.200
Whatever.

00:40:51.560 --> 00:40:52.000
Interesting.

00:40:52.000 --> 00:40:52.740
Okay.

00:40:52.740 --> 00:40:54.660
Well, it sounds like that's working out really well for you.

00:40:54.660 --> 00:40:57.440
And like I said, people I've talked to also said the same thing.

00:40:57.440 --> 00:40:58.480
That's cool.

00:40:58.480 --> 00:41:02.240
Now, another thing that you have going on that I want to make sure we get a chance to talk

00:41:02.240 --> 00:41:04.800
about before we run out of time is Pi Colorado.

00:41:04.800 --> 00:41:05.780
Yeah, sure.

00:41:05.780 --> 00:41:06.100
Yeah.

00:41:06.100 --> 00:41:07.400
So what's the story?

00:41:07.400 --> 00:41:10.600
This is one of the local regional PyCons, right?

00:41:10.600 --> 00:41:12.820
In Colorado, I would guess, given the name there.

00:41:12.820 --> 00:41:13.160
Yeah.

00:41:13.300 --> 00:41:14.960
So basically, Pi Colorado.

00:41:14.960 --> 00:41:15.320
Yeah.

00:41:15.320 --> 00:41:17.260
It's going to be a regional PyCon.

00:41:17.260 --> 00:41:23.700
It's going to be the 6th, 7th, 8th, and 9th of September of 2019.

00:41:23.700 --> 00:41:30.560
And it really just came about because Denver seems to get overlooked right now in terms of

00:41:30.560 --> 00:41:31.800
tech conferences and whatnot.

00:41:31.800 --> 00:41:34.040
And there's really a lot happening here.

00:41:34.180 --> 00:41:35.400
There's a lot of Python developers.

00:41:35.400 --> 00:41:36.880
There's a lot of JavaScript developers.

00:41:36.880 --> 00:41:38.780
I run a meetup in the area.

00:41:38.780 --> 00:41:40.140
I've ran it since 2013.

00:41:40.140 --> 00:41:41.900
But there's really a lot going on here.

00:41:41.900 --> 00:41:43.580
You also have the Boulder market here, too.

00:41:43.580 --> 00:41:46.680
So a lot of tech companies are moving their second headquarters here.

00:41:46.680 --> 00:41:48.500
Slack just moved their second headquarters.

00:41:48.500 --> 00:41:51.080
A couple, Quizlet as well, a couple other companies.

00:41:51.080 --> 00:41:53.140
But yeah, there's a lot going on here.

00:41:53.140 --> 00:41:56.280
And so we just felt like we needed some Python representation.

00:41:56.280 --> 00:41:56.960
That's nice.

00:41:56.960 --> 00:41:58.140
So you're involved with this, right?

00:41:58.140 --> 00:42:03.160
And so basically, it's one of these stories of, well, why isn't there this conference here?

00:42:03.280 --> 00:42:06.160
Like, well, maybe you just have to be the change you want to see in the world, right?

00:42:06.160 --> 00:42:06.520
Right.

00:42:06.520 --> 00:42:06.980
Yeah.

00:42:06.980 --> 00:42:07.460
Yeah.

00:42:07.460 --> 00:42:09.700
So I'm on the education side of things.

00:42:09.700 --> 00:42:11.460
So I'm going to be putting workshops together.

00:42:11.460 --> 00:42:15.040
So I think I'm officially the education chair of Pi Colorado.

00:42:15.040 --> 00:42:15.480
Okay.

00:42:15.480 --> 00:42:16.460
Nice.

00:42:16.460 --> 00:42:19.320
How, I know the tickets are not even on sale yet.

00:42:19.320 --> 00:42:21.920
So that's, no, maybe they are at the time of the release.

00:42:21.920 --> 00:42:23.860
But at the time of the recording, they're not yet on sale.

00:42:23.860 --> 00:42:28.900
So how big are you aiming for in terms of number of people?

00:42:28.900 --> 00:42:30.980
What are you expecting and things like that?

00:42:31.160 --> 00:42:36.240
I think it's somewhere between three and 400 people are what we're shooting for.

00:42:36.240 --> 00:42:40.100
And that includes like volunteers and whatnot, but three to 400 people.

00:42:40.100 --> 00:42:45.520
And so, yeah, tickets will be going on sale on March 4th, which, but yes, by the time that

00:42:45.520 --> 00:42:47.480
this airs, they will already be on sale.

00:42:47.480 --> 00:42:50.720
So the call for proposal and ticket sales do open March 4th.

00:42:50.940 --> 00:42:54.540
And then the CFP and ticket sales close on May 9th.

00:42:54.540 --> 00:42:54.680
Yeah.

00:42:54.680 --> 00:43:00.140
So if you're anywhere near Colorado or you want to go to Colorado, because, you know,

00:43:00.140 --> 00:43:02.040
Denver and Boulder, those are some of my favorite cities.

00:43:02.040 --> 00:43:03.240
Those are really nice places.

00:43:03.240 --> 00:43:03.660
Yeah.

00:43:03.660 --> 00:43:08.240
We'll probably put together like some like hikes and, you know, whatnot the, you know, days

00:43:08.240 --> 00:43:11.680
before, you know, days after a lot of breweries out here.

00:43:11.680 --> 00:43:15.520
It's just a lot of like cool, you know, type things that are happening right now in Colorado.

00:43:15.700 --> 00:43:15.820
Yeah.

00:43:15.820 --> 00:43:16.400
That's awesome.

00:43:16.400 --> 00:43:17.060
Yeah.

00:43:17.060 --> 00:43:18.300
So people could check that out.

00:43:18.300 --> 00:43:19.560
Is there a website they can go to?

00:43:19.560 --> 00:43:20.020
Yes.

00:43:20.020 --> 00:43:21.180
PyColorado.org.

00:43:21.180 --> 00:43:21.540
All right.

00:43:21.540 --> 00:43:21.820
Perfect.

00:43:21.820 --> 00:43:23.360
I'll put that in the show notes as well.

00:43:23.360 --> 00:43:24.320
But yeah.

00:43:24.320 --> 00:43:29.320
So if people want to speak there, a call for proposal should be open now by the time due

00:43:29.320 --> 00:43:32.700
to the magic of time shifting and podcasting that, that this releases.

00:43:32.700 --> 00:43:34.140
So they can check that out.

00:43:34.140 --> 00:43:35.400
If not, it should be like any day.

00:43:35.400 --> 00:43:35.620
Yeah.

00:43:35.620 --> 00:43:35.760
Yeah.

00:43:35.760 --> 00:43:36.040
Cool.

00:43:36.040 --> 00:43:42.840
So you said you're the education chair and I've been to the education summit at the main

00:43:42.840 --> 00:43:43.920
PyCon in North America.

00:43:45.020 --> 00:43:46.900
And I felt it was a little interesting.

00:43:46.900 --> 00:43:51.260
So like, I feel like I'm in education more or less in the Python space, right?

00:43:51.260 --> 00:43:53.860
With the podcasts and with the training courses and so on.

00:43:53.860 --> 00:43:58.460
And that feels like education to me, but I didn't feel exactly like that's what the focus

00:43:58.460 --> 00:44:01.840
of the education summit at PyCon was.

00:44:01.840 --> 00:44:06.820
It felt that was more a little bit towards like teachers at regular like high schools or

00:44:06.820 --> 00:44:09.740
working on projects with students that live in that space.

00:44:09.740 --> 00:44:11.120
Like what's the focus here?

00:44:11.340 --> 00:44:11.420
Yeah.

00:44:11.420 --> 00:44:16.100
So really the education chair, what I'm supposed to say, I'm like still like forming, you know,

00:44:16.100 --> 00:44:18.900
what it means, but it's really just going to be workshops.

00:44:18.900 --> 00:44:21.600
So we're going to have three different tracks for workshops.

00:44:21.600 --> 00:44:26.040
We're going to have Python, web development, and then data science.

00:44:26.040 --> 00:44:28.360
And the Python one is just going to be generic Python.

00:44:28.360 --> 00:44:32.660
And then from that, we'll have a beginner track and then have an intermediate to advanced level

00:44:32.660 --> 00:44:38.440
tracks where I am modeling it sort of after the PyCon workshops where they're a little bit

00:44:38.440 --> 00:44:38.820
longer.

00:44:38.820 --> 00:44:40.400
They are on a separate day.

00:44:40.400 --> 00:44:44.900
Some of the regional Python conferences, they do workshops, but they kind of stick them into

00:44:44.900 --> 00:44:46.220
like the other like talks.

00:44:46.380 --> 00:44:50.980
So I did a tutorial slash workshop at a regional conference.

00:44:50.980 --> 00:44:55.400
And I would say 90% of the people that came to it didn't even realize it was a workshop.

00:44:55.400 --> 00:45:01.100
So I'm just trying to do a good job of differentiating between, hey, this is a workshop and these are

00:45:01.100 --> 00:45:02.060
actually talks.

00:45:02.060 --> 00:45:02.400
Right.

00:45:02.400 --> 00:45:07.060
Like you should probably bring your laptop and prepare to be participating in a way, right?

00:45:07.060 --> 00:45:07.700
Yeah.

00:45:07.880 --> 00:45:12.940
So it sounds to me like your plan is this is like education for people to learn stuff

00:45:12.940 --> 00:45:19.060
about Python more than it is a separate segment for educators of Python.

00:45:19.060 --> 00:45:19.500
Is that right?

00:45:19.500 --> 00:45:19.820
Yeah.

00:45:19.820 --> 00:45:24.400
And we have been talking about maybe doing some sort of education summit similar to PyCon,

00:45:24.400 --> 00:45:29.120
maybe a little bit different, not targeting so much like high school and university type

00:45:29.120 --> 00:45:31.180
teachers, maybe targeting more people like yourself.

00:45:31.180 --> 00:45:36.400
But for right now, I am focusing most of my time on the workshop aspect of it.

00:45:36.400 --> 00:45:36.980
Oh, that's cool.

00:45:36.980 --> 00:45:39.500
Well, it sounds like it's going to be a great conference.

00:45:39.500 --> 00:45:43.840
I'm sure you're going to be worn out by the time September 10th arrives.

00:45:43.840 --> 00:45:44.960
Oh, I'm already worn out.

00:45:44.960 --> 00:45:47.500
It's a lot of work.

00:45:47.500 --> 00:45:48.000
It has.

00:45:48.000 --> 00:45:48.180
Yeah.

00:45:48.180 --> 00:45:48.460
Yeah.

00:45:48.460 --> 00:45:48.860
That's cool.

00:45:48.860 --> 00:45:53.380
I'm sure people will love it, but it's, there's so much stuff that happens behind the scenes

00:45:53.380 --> 00:45:55.060
and like not glorious stuff.

00:45:55.060 --> 00:45:55.260
Right.

00:45:55.260 --> 00:45:58.720
And not necessarily that you're doing, but like, who's going to make sure there are napkins?

00:45:58.720 --> 00:46:01.320
Who's going to make sure that there's food and proper food choices?

00:46:01.320 --> 00:46:04.380
And like, just, you know, what happens if this hotel sells out, right?

00:46:04.380 --> 00:46:05.980
There's just so much logistics, right?

00:46:06.080 --> 00:46:06.220
Yeah.

00:46:06.220 --> 00:46:07.260
We do have a napkin chair.

00:46:07.260 --> 00:46:09.120
Nice.

00:46:09.120 --> 00:46:09.900
Joking, joking.

00:46:09.900 --> 00:46:13.900
There is a chair just about for everything else though, but.

00:46:13.900 --> 00:46:14.440
Yeah.

00:46:14.440 --> 00:46:16.760
That's funny.

00:46:16.760 --> 00:46:17.460
Cool.

00:46:17.460 --> 00:46:17.800
All right.

00:46:17.800 --> 00:46:21.700
Well, it's like I said, it sounds like a cool conference and, you know, maybe I'll see if

00:46:21.700 --> 00:46:23.120
I can get out to Colorado as well.

00:46:23.120 --> 00:46:23.680
I don't know yet.

00:46:23.680 --> 00:46:25.780
It's a ways out, but it definitely sounds fun.

00:46:25.780 --> 00:46:26.960
I'm so glad you're doing that.

00:46:26.960 --> 00:46:27.180
It's cool.

00:46:27.180 --> 00:46:27.700
All right.

00:46:27.700 --> 00:46:32.680
Well, Michael, I think we should probably leave it there for all the main topics because

00:46:32.680 --> 00:46:34.220
we're getting short on time.

00:46:34.220 --> 00:46:38.240
But let me ask you the final two questions before we call it a day.

00:46:38.240 --> 00:46:43.620
If you're going to write some Python code or other code, even what editor do you use?

00:46:43.740 --> 00:46:44.560
I like VS Code.

00:46:44.560 --> 00:46:49.760
I typically, you know, go back and forth between front end JavaScript and back in Python.

00:46:49.760 --> 00:46:53.040
So VS Code provides a nice balance for me.

00:46:53.040 --> 00:46:53.320
Yeah.

00:46:53.320 --> 00:46:55.360
Visual Studio Code's pretty nice these days.

00:46:55.360 --> 00:47:01.040
And I hear when I started this podcast, there was a lot of them sort of answers and then a

00:47:01.040 --> 00:47:01.960
sprinkling of other.

00:47:01.960 --> 00:47:05.840
And I would say VS Code is probably the most popular choice these days.

00:47:05.840 --> 00:47:06.860
It's pretty impressive.

00:47:06.860 --> 00:47:07.260
Yeah.

00:47:07.260 --> 00:47:07.980
Yeah.

00:47:07.980 --> 00:47:13.600
I moved away from them when I started teaching because I wanted to use an editor that sort

00:47:13.600 --> 00:47:16.880
of students understood when they saw me like coding in front of them.

00:47:16.880 --> 00:47:20.340
And so I moved to move back to Sublime, moved to Atom.

00:47:20.340 --> 00:47:22.140
And now I am on VS Code.

00:47:22.140 --> 00:47:22.440
Yeah.

00:47:22.440 --> 00:47:27.260
Do you think it's interesting that Microsoft made Visual Studio Code?

00:47:27.260 --> 00:47:30.320
Do you feel like they had to like overcome a little bit of resistance?

00:47:30.320 --> 00:47:32.420
People going, oh, I don't want to use this thing from Microsoft.

00:47:32.420 --> 00:47:33.440
Like, what are they up to?

00:47:33.440 --> 00:47:34.980
Or do you think it was per se that way?

00:47:34.980 --> 00:47:38.300
Microsoft is like a different company today than it was five years ago.

00:47:38.300 --> 00:47:43.160
So, I mean, they have, it seems like they're, they got, you know, GitHub, they got VS Code,

00:47:43.160 --> 00:47:47.100
probably a number of other tools and technologies I can't think of now.

00:47:47.100 --> 00:47:47.580
That's right.

00:47:47.580 --> 00:47:49.080
They're just a very different company.

00:47:49.080 --> 00:47:53.520
I mean, I think pretty soon they're probably going to have the developer, you know, ecosystem.

00:47:53.520 --> 00:47:53.980
Yeah.

00:47:53.980 --> 00:47:55.840
It seems like what they're definitely going for.

00:47:55.840 --> 00:47:57.740
And, you know, I think that's kind of the heart of the company.

00:47:57.740 --> 00:47:59.800
So it's not that surprising, right?

00:47:59.800 --> 00:48:00.080
Yeah.

00:48:00.080 --> 00:48:00.360
All right.

00:48:00.360 --> 00:48:04.680
So notable PyPI packages, maybe not the most popular, but something you're like,

00:48:04.740 --> 00:48:05.680
people should know about this.

00:48:05.680 --> 00:48:06.460
I saw it the other day.

00:48:06.460 --> 00:48:06.920
It was awesome.

00:48:06.920 --> 00:48:08.340
So I use a lot of Django RQ.

00:48:08.340 --> 00:48:12.420
So that's Django flavor of Redis Q.

00:48:12.420 --> 00:48:16.000
Just allows you to use Redis Q a little bit easier inside of Django.

00:48:16.000 --> 00:48:16.720
That's cool.

00:48:16.720 --> 00:48:21.680
Is that to like kick off background work or for caching or what is it?

00:48:21.680 --> 00:48:22.060
Yeah.

00:48:22.060 --> 00:48:23.100
It's for kicking off.

00:48:23.100 --> 00:48:23.700
Yeah.

00:48:23.700 --> 00:48:23.920
Yeah.

00:48:23.920 --> 00:48:25.160
It's a task queue.

00:48:25.160 --> 00:48:26.580
So just kicking off background work.

00:48:26.580 --> 00:48:28.180
So it's like, it's an alternative to Celery.

00:48:28.180 --> 00:48:29.940
It's a little bit easier to use than Celery.

00:48:29.940 --> 00:48:30.240
Yeah.

00:48:30.240 --> 00:48:32.620
I get the sense that Redis might be a little simpler than Celery.

00:48:32.620 --> 00:48:33.580
Okay, cool.

00:48:33.580 --> 00:48:34.200
Got any more?

00:48:34.200 --> 00:48:36.880
Or you have a couple here on this list that you were sharing?

00:48:36.880 --> 00:48:37.340
Oh, yeah.

00:48:37.340 --> 00:48:38.720
I use Flake 8 a lot.

00:48:38.720 --> 00:48:40.320
I mean, every single day.

00:48:40.320 --> 00:48:41.900
I mean, that's running in the background.

00:48:41.900 --> 00:48:43.580
So that's just a linter.

00:48:43.580 --> 00:48:47.380
And then Hypothesis, which I use for hypothesis testing.

00:48:47.380 --> 00:48:49.180
Hypothesis testing is interesting.

00:48:49.180 --> 00:48:51.920
Or property-based testing is quite interesting, right?

00:48:51.980 --> 00:48:54.760
Like, you know, we'd covered that on the show quite a long time ago.

00:48:54.760 --> 00:48:58.100
I had the founder or the creator of that on.

00:48:58.100 --> 00:49:01.580
And it was, it's an interesting way to do tests, right?

00:49:01.580 --> 00:49:06.760
It's like, well, it takes a number and a string and just go make some numbers and strings and

00:49:06.760 --> 00:49:09.120
figure out what the right ones to put in here are, right?

00:49:09.120 --> 00:49:09.360
Yeah.

00:49:09.360 --> 00:49:13.800
I mean, if you're really focusing on testing that contract between functions, between,

00:49:13.800 --> 00:49:18.620
you know, modules, you know, whatever it is, Hypothesis definitely really, it works

00:49:18.620 --> 00:49:20.060
really, really well for that.

00:49:20.060 --> 00:49:20.620
Yeah, it's cool.

00:49:20.760 --> 00:49:21.960
Definitely a cool project.

00:49:21.960 --> 00:49:22.740
All right.

00:49:22.740 --> 00:49:24.020
So final call to action.

00:49:24.020 --> 00:49:27.580
People are excited about what you're doing over Test Driven or maybe the conference.

00:49:27.580 --> 00:49:29.140
What do you say to folks?

00:49:29.140 --> 00:49:32.920
Yeah, definitely check out testdriven.io and also check out PyColorado.

00:49:32.920 --> 00:49:34.340
So two call to actions there.

00:49:34.340 --> 00:49:37.360
But yeah, I really appreciate you having me on the show.

00:49:37.360 --> 00:49:40.340
Yeah, it's great to have you on the show and get a chance to catch up with you.

00:49:40.340 --> 00:49:42.880
So thanks for being here and sharing the history of real Python,

00:49:42.880 --> 00:49:45.580
what you're doing today and some of your other thoughts as well.

00:49:45.580 --> 00:49:46.180
Yeah, likewise.

00:49:46.180 --> 00:49:46.620
Thank you.

00:49:46.620 --> 00:49:46.900
You bet.

00:49:46.900 --> 00:49:47.100
Bye.

00:49:47.100 --> 00:49:47.320
Bye.

00:49:48.280 --> 00:49:50.980
This has been another episode of Talk Python To Me.

00:49:50.980 --> 00:49:55.180
Our guest on this episode was Michael Herman, and it's been brought to you by Linode and Stellaris.

00:49:55.180 --> 00:49:59.120
Linode is your go-to hosting for whatever you're building with Python.

00:49:59.120 --> 00:50:02.660
Get four months free at talkpython.fm/Linode.

00:50:02.660 --> 00:50:04.540
That's L-I-N-O-D-E.

00:50:05.480 --> 00:50:10.580
Find the right job for you with Stellaris, the AI-powered talent agent for the top tech talent.

00:50:10.580 --> 00:50:14.500
Visit talkpython.fm/Stellaris to get started.

00:50:14.500 --> 00:50:19.380
That's talkpython.fm/S-T-E-L-L-A-R-E-S.

00:50:19.380 --> 00:50:20.040
Stellaris.

00:50:20.040 --> 00:50:22.540
Want to level up your Python?

00:50:22.540 --> 00:50:27.400
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.

00:50:27.660 --> 00:50:35.540
Or if you're looking for something more advanced, check out our new async course that digs into all the different types of async programming you can do in Python.

00:50:35.540 --> 00:50:40.220
And of course, if you're interested in more than one of these, be sure to check out our Everything Bundle.

00:50:40.220 --> 00:50:42.100
It's like a subscription that never expires.

00:50:42.100 --> 00:50:44.400
Be sure to subscribe to the show.

00:50:44.400 --> 00:50:46.820
Open your favorite podcatcher and search for Python.

00:50:46.820 --> 00:50:48.040
We should be right at the top.

00:50:48.040 --> 00:50:57.020
You can also find the iTunes feed at /itunes, the Google Play feed at /play, and the direct RSS feed at /rss on talkpython.fm.

00:50:57.020 --> 00:50:59.120
This is your host, Michael Kennedy.

00:50:59.120 --> 00:51:00.620
Thanks so much for listening.

00:51:00.620 --> 00:51:01.680
I really appreciate it.

00:51:01.680 --> 00:51:03.440
Now get out there and write some Python code.

00:51:03.440 --> 00:51:24.020
I'll see you next time.

00:51:24.020 --> 00:51:54.000
Thank you.