Let's talk about running Django in production.
On this episode, you'll meet Michael Herman, who used to work on realpython.com,
and today is running testdriven.io.
We'll cover some of the trade-offs between a set of microservices and a monolith,
and a round-trip journey between them as well.
This is Talk Python to Me, episode 206, recorded February 19th, 2019.
Welcome to Talk Python to Me, a weekly podcast on Python,
the language, the libraries, the ecosystem, and the personalities.
This is your host, Michael Kennedy.
Follow me on Twitter, where I'm @mkennedy.
Keep up with the show and listen to past episodes at talkpython.fm,
and follow the show on Twitter via at Talk Python.
Michael, welcome to Talk Python.
Thank you.
It's great to have you here.
You've been doing so many cool things in the community
and creating all these community projects
and really helping a lot of people learn Python and programming.
So I'm excited to have you on the show and dig into all of those things and more.
But before we do, before we get to them, let's start with your story.
How did you get into programming in Python?
Sure, yeah.
So I started programming back in, say, seventh grade.
I think that was like 96, 97.
And it was really to compete with my best friend, Derek,
who started a very popular PlayStation website called PlayStation Fan.
Started out in GeoCities and then eventually moved to a domain name.
But yeah, just started off with HTML and CSS and a bit of JavaScript.
Wow.
That's really interesting.
GeoCities.
That's something I haven't thought about for a while.
But for younger people, like that was the WordPress of the day,
the WordPress.com of the day or whatever.
You could just go and click a button and make your site.
They were often quite cheesy, right?
Yeah.
Yeah, definitely.
Yeah, I started with a PlayStation website as well, PlayStation Extreme, and then moved on to Final Fantasy.
Got really big into Final Fantasy VII and then started a Final Fantasy VIII enthusiast website,
the FIFOF8.org, and sort of paid the bills around that with ModChip advertising.
I don't know if you remember ModChips, but it basically allowed you to...
No, I don't know that at all.
No.
Yeah.
You solder them onto your PlayStation.
You can play or you could play games that were outside the U.S.
Oh, interesting.
So a little bit of a side loading, like get around the restrictions of the PlayStation there.
So did they get pretty popular or were they just sort of hobby things?
They did get pretty popular.
I had a lot of companies like SendMeGames.
They wanted me to review.
And I think sort of with the Final Fantasy VIII website, I had like an early bootleg copy of it.
Of course, it was in Japanese and being an RPG, couldn't really do much with it.
But yeah, I did get a lot of early copies of games and whatnot to review.
Wow, that's really cool.
So maybe if that was today, you would be doing a Twitch channel at that age or something like that.
But back then it was the website.
Yeah.
Interesting.
So there's not a whole lot of programming there per se, though, is there?
I mean, that's like kind of getting you started in the web world.
But where'd you really get like into programming for real?
So then I learned a bit of the LAMP stack, mostly the M and the P.
And then I really started looking at VBulletin and sort of the message forums of the day.
And got really good into adding just like tweaks and hacks to them.
In high school, I took a basic in Pascal and then a C++ class.
And that was sort of my sophomore year of high school or freshman and sophomore year.
And then my junior and senior year, I actually went half days at high school and half days at a vocational tech program.
And with the hardware side, got A-plus certified.
And that was back in the day with desktops.
So I don't think it means anything these days.
You don't get too many recruiters reaching out to you for that?
No, no.
No, that's a super cool thing that you can do at high school, though, right?
I mean, there's so many classes you take that are kind of fluffy.
Just you got to do something for the day at high school.
That sounds really constructive and useful.
Did you enjoy it?
Yeah.
Yeah, it was very practical.
Gave me a lot of skills and learned quite a bit about the hardware side of things.
Also got a Cisco certified.
I think it was the CCNA network administrator.
That might mean something a little bit more now, but not sure.
Yeah, still, it sounds like a really cool project, especially for when you're in high school.
Yeah.
Would you get a CS degree from there?
No.
So in college, I ended up starting in computer science.
I took a philosophy class that steered me into philosophy.
My dad was subsidizing most of my education, so I ended up with a practical business degree.
Yeah, that's cool.
He's like, look, you can take these philosophy classes, but you can't live on philosophy very
easily, so go get a regular degree.
Right.
Basically, unless you're going to law school, you're going to do something different.
Yeah, that makes a lot of sense.
Philosophy is really fun, but it's a hard job to have, I think, unless you just want to be
a teacher.
Yeah.
Yeah, for sure.
Okay, so a lot of interesting background there.
How did you get to Python?
So after my undergrad, I ended up moving to New York and was working in a sort of a sales
support, sales operation type role for Yahoo, and sort of got back into coding there.
I was doing a lot of Excel, doing a lot of VBA, writing little macros here and there.
And eventually, that led me to San Francisco and started working at startups, started wearing
multiple hats.
And so sort of my finance and Excel experience led to a Python because I found I could do things
a lot quicker and do things a lot more efficient with Python and having that control Excel over
VBA.
Yeah, that makes a lot of sense.
And that sort of debate and functionality is still raging today.
We've got that user voice issue where everyone's trying to get Python into Excel and Microsoft
has kind of put their head in the sand and ignored it.
But every couple of days, there's a new person who goes, what a great idea.
Like thousands and thousands of votes.
But yeah, we'll see.
I think a lot of people go on that path.
So when you got to San Francisco, was this like the dot-com heyday or was it after that?
It was after that.
This was 2008, 2009.
Yeah.
I would have been wild to be there, 98, 99.
Yeah.
At that time, it would have been crazy.
But I wasn't there either.
So all right.
So that was your history.
How about today?
What are you doing day to day?
So these days, I'm spending about 50% on a startup that I started called TestDriven.io.
So we're developing the platform, doing content marketing, course development, and then 50%
on freelance.
Okay.
That sounds really fun.
You know, you get to control quite a bit of what you do and always building.
These new platforms, these new products.
It's so exciting, right?
Yeah.
So I went back to freelance, let's say, a couple weeks ago.
So I've been free from a day job for about two weeks.
Yeah.
Are you having like cubicle withdrawal or anything like that?
Are you okay?
I'm fine.
Yeah.
Nice.
Yeah.
How's it going?
Are you enjoying it?
Yeah.
The commute is a lot better.
Yeah.
So we get up, roll out of bed right there.
Yeah.
That sounds great.
We're definitely going to talk a lot about TestDriven.
And I feel like TestDriven is, it's got a lot of parallels to what you did before.
Even going back to your story that you already told, you know, about starting like the Final
Fantasy and the PlayStation sites, and then moving on to something that you're pretty well
known for is starting real Python, right?
This is like the next generation of that maybe?
Yeah.
So I've definitely been drawn towards tech education and teaching in general.
I taught at a bootcamp for a number of years.
I was full stack JavaScript, so we won't talk about that.
But I've definitely, I'm a programmer first and I'm a teacher second.
So that's why I'm not teaching right now.
But yeah, there's definitely a lot of parallels between real Python and TestDriven.
I would say that TestDriven, targeting a little different audience, starting in the intermediate
to advanced level web developers, whereas Python was all targeting just the basics.
Yeah, I'm sure that makes a lot of sense.
You know, I feel like you said you're a little bit more of a developer than a teacher, but
also a teacher.
And I feel like really to be a proper teacher who teaches developers, you have to have your,
you have to get your hands dirty, right?
You have to write this code.
Like, it's not enough to just know it works this way.
You have to know, actually, I tried it that way.
And that seemed like it was going to work.
But in practice, it was really painful.
And it's other like, you need to have those scars to like help people along, I think.
Right.
And that's one of the things that the boot camp that I worked for struggled with how to
continually scratch that itch for those developers first that really wanted to get back into the
field.
And I don't really think there's a correct or right answer there for that.
But it was definitely something that they struggled with.
It's definitely something I struggle with as well.
But yeah, I enjoy working freelance jobs.
And I also enjoy working on the test driven platform.
That's one of the reasons why I decided to build a platform was so actually I had something
there, something that can actually work on something I can actually scale on whatnot.
Yeah.
I'll be interested to hear your thoughts on this.
But for me, a lot of times when I look out there and I'm like, I need something to solve
some kind of problem.
And I could grab something off the shelf and use it or I could build it myself.
There's always that.
Does it make sense for me to put that time and effort into it versus just grab something
and it won't be quite the perfect fit, but it'll be good enough.
But for me, another thing I've always got going in the back of my mind is if I did have to or
went down the path of building this myself, would it give me something really interesting to
learn and teach other people?
Maybe I could just get some teaching platform, but if I built my own, hey, maybe I could use
the lessons learned from there to actually create courses or create interviews and things like
that.
Do you think about stuff that way as well?
Yeah, definitely the build versus buy type thing.
I think a lot of educators out there that are on the internet, they use a lot of the existing
platforms and maybe they're more teachers, maybe they're more into building content and whatnot.
I'm a doer, I'm a hacker.
And so, yeah, I definitely like having that platform there.
Somebody is like, hey, I will promote your courses.
If you have this little tweak in there, I can go in there and just add that little tweak.
Whereas if I'm using some other platform, then I'm at the whim of the developers there.
Yeah, it's usually more painful up front, but often in the end, you're like, I'm so glad
I get to completely control this experience, right?
Right.
Yeah.
So a bit of a time shift.
By the time this episode comes out, I will have released a show with Ned Batchelder and a
couple of other folks called Beginners and Experts.
But that hasn't been released yet, so you have no chance to have heard it.
So I'll just tell you real quick.
We talked about a lot of the challenges that beginners and experts had.
And it seemed like, you know, the syntax people could learn pretty well and other things they
could follow along.
But the real challenge is looking at a problem and going, this is how I break down that problem.
These are the steps.
Like, okay, this needs this type of database.
Like, that's better as a web app versus as a command line app.
Like, just these quick analyses that you do with experience that when you're new, you're
like, I don't even know what tools to bring to bear.
Like, once I knew that, I could probably do it pretty well.
But I don't know what to start with.
And that comes back to this sort of the scars and the boot camp story you're telling me.
Like, you know, how do you think that people can at least speed up that learning process to
sort of get that experience?
Do you have any shortcuts?
We didn't have any great options, honestly.
I mean, maybe reading other people's code and stuff.
But really, like, how do I decide how to attack a problem?
Do you have any advice there?
I don't have any real advice in terms of speeding things up.
I think that just, you know, takes time.
And yeah, I mean, it is about being able to break a problem up into manageable pieces.
I think really focusing on information retrieval skills.
I think that was one thing that I always, like, told my classes is the one thing that differentiates
myself from you all is, like, I'm a better, way better Googler.
I can find Stack Overflow questions or answers to Stack Overflow questions, that sort of thing
within the first three or four pages or whatever, like, when I Google something.
And I'd always tell them, if you're, like, on that, like, end of the second page, end of
the third page of, like, your Google results, you probably need to recraft your query.
Yeah.
And part of that is, like, filtering it out, going, no, irrelevant, irrelevant, irrelevant.
This is the one, right?
But when you're new, it's hard to go, these are irrelevant, right?
Yeah.
I think that's part of the challenge as well.
Yeah, I do have a Master's of Science in Information Science.
And for a bit there, I was thinking about going the librarian route.
And I see a lot of parallels between web developers and librarians.
Whereas librarians are not subject matter experts.
They're just able to connect with information quickly.
And I think a lot of web developers, sort of the jack of all trades, master of none, have
that same sort of philosophy that they can pick up things really fast.
They might not be an expert in any one particular area, but they can wear many hats and go up and
down the stack.
Yeah, especially if you're a JavaScript developer, because whatever you know is out of date five,
you know, six months later, right?
Right.
The new framework is not the one.
Yeah.
The new shiny comes along really quick in that space.
Definitely.
So since we're on the topic of boot camps, let me ask you just a couple of questions about
that.
Like, do you, putting aside whether it's JavaScript or Python or whatever the subject is being taught
at the boot camp, do you think they're a good value?
Do you see people getting like lots of success, maybe relative to a CS degree or relative to
just like, hey, I bought some books and took an online course?
Do you think it's worth a while?
They're pretty expensive, but you know, maybe it's worth it.
I definitely think it's worth it.
A lot of times it depends on the type of jobs that you're looking for.
If you're looking to build an Angular type framework, you probably need a CS degree.
If you're looking to leverage Angular to build your own type of products, then you're probably
fine with just going to a boot camp.
I definitely agree with that.
Like, there's a lot of times you're in a CS degree and those more formal programs, you're
taught way more theory and like deeper level stuff than you probably need to know.
You probably have to take differential equations as a CS degree.
You probably have to like learn how to like create an operating system and those kinds.
And like all that stuff is good to know, but you could be a completely competent functional
web developer or whatever kind of developer, unless, you know, you really are building an
OS or something.
Just knowing like the APIs and a little bit of a little bit of theory, which seems like a
lot of that you could get at a boot camp.
Right.
Yeah, definitely.
Yeah.
Cool.
Were you there helping people get jobs afterwards?
Like what was that side of the thing?
Was that, that was probably like a big celebration, like somebody who just got a job who recently
graduated or something like that.
Yeah.
The placement rates of the program were pretty high.
I mean, they were in the nineties, which you think of, you know, college and you think
of some of those degrees, like, do you, like that's why they don't post the placement rates.
But yeah, I was, even though I wasn't like a formally part of sort of that transition to the job
market, it was like, you know, I had that double edged sword where it was like, I think I cared a
little bit too much.
And so, you know, I was like all in and kind of like lost myself a little bit in teaching.
But yeah, I was definitely there, you know, helping students interview, connecting students
with people I knew in the community and whatnot.
Yeah.
Cool.
Real quick, single piece of advice for people trying to get a job coming out of a boot camp.
What would you tell them?
Ooh, yeah.
So, so many.
Keep coding, I guess, you know, there's just too many.
Keep coding, go to meetups, keep connecting with people.
It's difficult.
I don't think there is a single piece of advice, but definitely keep coding, go to meetups, connect
with people.
Awesome.
Yeah.
Sounds good.
All right.
So let's bring it back to a little bit more of what we were going to talk about originally.
Sure.
I want to definitely talk about testdriven.io and what you're doing there and some of the lessons
you've learned.
But let's start at the beginning on that side of the thing.
So as I said before, you founded realpython.com.
And did you do it alone or did you do it with some other folks?
Yeah.
So there were two other co-founders.
So Fletcher, the original co-founder or the original founder founded it in, I want to say
2010.
And he did the original Kickstarter for the first real Python course.
And I actually wasn't involved in it then.
Okay.
I came after that and I can't remember who contacted who, but we were talking about, hey,
how can we take sort of the philosophy of real Python, the learning by doing and apply it to
web development?
Yeah.
That's really cool.
So it was started as a Kickstarter, huh?
Started as a Kickstarter.
Each of the courses were Kickstarted.
I was heavily involved in the second and the third Kickstarters.
But we really started it because there were just no beginner courses out there.
And now it's like kind of a dime a dozen, which sort of leads to testdriven.io.
But yeah, we started it because there was just nothing really practical out there.
Yeah.
It's super interesting.
I don't think I saw the original Kickstarter.
I probably saw your last Kickstarter that you did, that you all did.
And I was really impressed.
I mean, you guys, you ran it well.
It was super successful.
I was, it was actually a big inspiration to me as I was thinking about starting my own teaching
platform, right?
Training.talkpython.fm.
And I was sort of exploring the, like, how am I going to get the word out about this?
What is the right way?
Should I just talk about the podcast or, you know, what should I do?
Right.
And I came across your Kickstarter thinking like, wow, there's actually like a real need
here.
People seem to be really into this.
And it was, it was well done.
Good job.
Yeah.
Thank you.
I actually wrote a blog post.
I don't remember if it was after the second or the third Kickstarter, but it's on segment.com
or something like that.
But it's on how to use Kickstarter to model sort of like the lean philosophy.
So how can you get something out there real quick just to see if you can get product market
fit?
And I was really into the lean philosophy at the time and still am.
So I think you can use Kickstarter for that.
I do too.
I think Kickstarter is a little bit of a challenge because you have to have a little bit of an
audience or you've got to have a really good marketing team or you have to be lucky.
Right.
Like you already had maybe a little bit of an audience around the real Python stuff.
So it was enough to get it rolling, right?
Yeah.
You really want to get to your hundred percent level really within the first couple of days
because it's really the popularity bias.
Kickstarter will start promoting it.
People want to invest and be part in something that's popular.
So really getting to that hundred percent of your goal within the first couple of days.
And that was really what I really focused on at first.
So like if you need $5,000, maybe actually put it at $2,000 so that way you get up there
much quicker.
I absolutely agree.
And anyone who is out there thinking about having a Kickstarter, it's absolutely about
getting to your goal as quick as possible, even if that's not your real goal.
Right.
Because like you said, the way Kickstarter, I launched my first course on Kickstarter as
well, and it was funded in 12 hours.
And then it spent like three weeks, the number one Kickstarter on software on Kickstarter.
Yeah.
And it's, I could have put $20,000 for it and may, I probably would have funded maybe, but
I put like, I don't remember what I put like three or something silly, like something small
because I was going to do it anyway.
I was going to write the course anyway.
So it's, it's not like it was hardware and I would have to invest in like a bunch of CNC
machines and dyes and like, I'm going to do it anyway.
And I don't exactly need the money to pay to do it.
All the money would really help basically take the edge off of the nervousness of like quitting
your job and doing that.
Right.
But it's, yeah, it's, it's super important to get it funded quick.
Yeah.
I mean, we would have done it anyway too.
It was just, you know, an extra way to bring in a little bit of revenue.
And then, yeah, it was just also sort of the popularity around that.
We got our name out a little bit more with Kickstarter.
Yeah, absolutely.
You know, one thing that was really surprising to me was I thought like the vast majority of
the funders of the Kickstarter would be people that I would somehow tell about either on social
media or on the podcast or some other way.
Right.
And 40% came just from Kickstarter, not from me.
Yeah.
It was really surprising.
So I think that was quite a good deal.
Yeah.
This portion of Talk Python to me is brought to you by Linode.
Are you looking for hosting that's fast, simple, and incredibly affordable?
Well, look past that bookstore and check out Linode at talkpython.fm/Linode.
That's L-I-N-O-D-E.
Plans start at just $5 a month for a dedicated server with a gig of RAM.
They have 10 data centers across the globe.
So no matter where you are or where your users are, there's a data center for you.
Whether you want to run a Python web app, host a private Git server, or just a file server,
you'll get native SSDs on all the machines, a newly upgraded 200 gigabit network, 24-7 friendly
support even on holidays, and a seven-day money-back guarantee.
Need a little help with your infrastructure?
They even offer professional services to help you with architecture, migrations, and more.
Do you want a dedicated server for free for the next four months?
Just visit talkpython.fm/Linode.
So you had these three courses originally.
Do you remember what they were, the names?
So it was real, I mean, it was basically real Python 1, 2, and 3.
We didn't really have like, you know, names for it, but real, you know, the first real Python
course was just the Python fundamentals.
The second one was web development and I guess unofficially Flask.
And then the third one was just more of a little bit more of an advanced course.
And that was all Django based.
Yeah, that's really cool.
How long did it take for you to write the courses?
So I'm the author of the second course and I want to say six months.
Yeah.
Sounds about right.
How long is it for the students to take the course?
Oh gosh, there is so much content there.
There's way, way too much content.
Yeah, I would probably say it's like six or 700, you know, pages of content there.
And it goes into web fundamentals, you know, it goes into HTTP, goes into web scraping.
And then you sort of build a CGI based framework.
And then you go into Flask.
And then I do a little bit of Web 2 Pie.
Oh, and then actually at the end of the course, there is a bit of Django that sort of leads
into the last course.
Yeah, that's a lot of content.
You got to get yourself in the right mindset to work on something that's going to be six
months out before you know whether it's successful.
And, you know, just work on something that long before you figure out whether it was a good
idea.
Yeah, it takes a lot of planning, a lot of discipline, a lot of pain, a lot of lonely
nights.
But it's rewarding in the end, right?
Yes, yes.
I think so.
Although I would say like, if you actually want to make money, don't write a book.
But I keep writing books.
So I should probably actually listen to my own advice here.
Yeah, someday maybe, right?
Right.
That's funny.
Another life.
Yeah, for sure.
So RealPython now, realpython.com now has more than just those three courses, right?
There's like a ton of content.
And when I throw it into the various analytics systems, that'll tell me like the amount of
traffic going to realpython.com and stuff.
It's pretty seriously impressive.
You guys show up or that site that you built rather shows up quite high on a lot of Google
searches for anything to do with Python.
Yeah, it's pretty, pretty incredible.
I don't own RealPython anymore.
Dan Bader actually took that over.
But yeah, he has done an amazing job of really kind of creating a sort of like New Yorker-esque
type magazine for Python.
He hired somebody to do all the graphic design.
And each individual article has its own like unique sort of graphic to it.
And then, yeah, there's more courses on there now.
So it's really incredible just to see what he has done.
Yeah, I'm super impressed with what Dan has done.
And he's really turned the knob up a little bit more.
And he's got a lot of people participating.
And whenever there's an article on there, it's not just one of these, you know, like three
paragraph and then a bunch of like weird, unrelated other articles at the bottom.
Those are like little mini books almost, right?
Like those are serious articles that Dan's putting together.
Yeah, his articles focus a little more on the Python basics or fundamentals.
So they'll probably stand the test of time a little bit more.
I like I enjoyed the website.
And so I focused a little bit more on like the practical sort of tutorials.
And those are out of date within, you know, could be within hours, you know, depending on
what happens.
But yeah, I mean, they definitely don't stand the test of time quite as well as the fundamentals.
Yeah, that's definitely a challenge for sure.
So I think Dan is doing a super job with RealPython, but why did you guys sell it?
Well, I mean, different opportunities came our way.
We wanted to focus on other things.
The original founder, Fletcher Heisler, he was getting into security and he actually started
a company called Hunter 2.
And he went through Y Combinator and I believe he's still working on that.
Jeremy ended up, he had a software testing business.
He lived abroad in Malaysia for a number of years.
He moved his wife and his family to Cambridge and got a job at Harvard.
And yeah, I wanted to focus a little bit more on teaching.
And also I wanted to focus on sort of teaching more intermediate to advanced level developers,
just those that could already build sort of a crud up.
And so that transitions us into test revenue.
Yeah, absolutely.
That sounds totally normal, right?
Like you have a couple of people working on stuff and they just kind of start to drift
in different directions.
And working on something like RealPython.com, it takes a lot of not just effort, but like
enthusiasm, right?
You're like, okay, you know, you have to wake up and go, okay, there's this great new topic
I want to write this article about.
And if you're just distracted with other things that are more, you know, seem more valuable
to you at the moment, then it's hard to do that, right?
Yeah.
Do you think it would have been different if just one person ran it?
Like let's say if it was just you running it by yourself?
I think I would have burned out quicker.
I think I would have moved on quicker.
Interesting.
Yeah.
I don't know.
That's difficult to say.
But yeah, I think if it may have just been my baby, I may have like stuck with it and,
you know, seen it through.
But since it was, you know, all three of ours, we just kind of were both at a point or all
of us were at a point where it's like, hey, this is a good time to transition.
Yeah, that makes sense.
I couldn't guess really whether it would mean like you'd be done with it sooner or with you
would have like, you know, had a little more like, I'm just going to guide it my way.
Yeah.
Interesting.
All right.
So yeah, you mentioned test driven.
Let's talk about test driven.
So your current project is test driven.io and it looks somewhat similar to the way you
described the origin of real Python itself.
Yeah.
So test driven really came from a similar origin as real Python.
Whereas real Python, there are no beginner courses on the market.
Test driven came about because there were basically too many beginner courses on the market and
there are not enough intermediate to advanced level courses.
And also I was sort of transitioning from, I'd say, application development more towards
infrastructure platform development.
I kind of wanted to write a little bit more about that.
Microservices, Docker, Kubernetes, you know, all the latest buzzwords these days.
Yeah.
We'll definitely talk about that a little bit.
It sounds to me a little bit like some of these courses are coming from your experience
of running things like real Python and other consulting projects that you're doing.
kind of like I mentioned before, the build versus buy story.
Yeah.
They definitely come from a real world experience.
Just at my last couple of, you know, full-time gigs, just moving a little bit more towards
DevOps side of things or platform, you know, developments and helping companies transition
into more of like a DevOps-y type mindset.
Yeah.
That's really cool.
So right now it looks like you have microservices with Docker, Flask and React and real-time apps
with Django channels and Angular.
And they definitely have this flavor of Python on the back end and rich JavaScript front-end
frameworks like React or Angular.
Yeah.
Is that kind of your vibe these days?
How you like to build web apps?
Yeah.
The stacks that I work on are usually Django or Flask on the back end.
And then, you know, some sort of single-page application type framework like React, Angular
Vue on the client side.
Nice.
I've been doing some stuff with Vue lately and I'm really enjoying it.
What's your favorite front-end framework these days?
I like Vue too.
You can move a little bit faster with Vue.
You do get the two-way binding with Vue that you don't get from Angular and React.
So just spinning up forms is so much easier.
I don't know as much about Vue at scale, though.
I don't know if you can lock down two-way binding back down to one-way binding.
But I definitely like the Vue way of doing things.
Yeah, I do too.
It's quite nice.
testdriven.io itself, is this built on Python?
Like, how are you running that site?
So yeah, it's a Django back end.
I am using server-side templating because I don't think single-page applications are for
everything, especially when you're a single-person development team.
So I can move a little bit faster with server-side templating.
And then I just use just vanilla JavaScript on the client.
That's always an interesting tension, isn't it?
Of having just a full-on JavaScript front-end type of app versus, you know, like you said,
a server-side app.
Yeah.
I don't know.
I'm still a little bit partial to the server-side stuff.
I feel like the SEO is a little simpler a lot of times.
There's less compatibility to worry about.
Like, if I send the HTML, I know that's the HTML they got, not like what kind of JavaScript
platform are they running, like some crappy old browser or something like that.
Right.
Yeah.
If you're using a single-page application, then yeah, you have to actually guide the search
engine to crawl through the, kind of trick the search engine almost to like crawl all
the pages.
So you get SEI out of the box with server-side templating.
Also, I'm not maintaining a lot of state between views on the client side, so it just made sense
to keep, to stick with server-side templating.
Yeah.
Right.
If you're going to pull down a bunch of data and continually work with it, like Gmail or Google
Maps or something like that, right?
Then like all of a sudden it makes a lot more sense perhaps.
Yeah.
Okay.
Cool.
So people can check that out.
That's definitely a nice project.
And I think maybe let's dig into some of the philosophies or steps that kind of got you to running
that on Django.
Originally, were you working with Flask and then got converted over to Django?
Is that right?
Yeah.
So, I mean, we fast or we go back, you know, five or six years, something like that.
And I was entirely Django.
Well, and somewhere along the way, it was like, oh, Flask is really cool.
So let's work with Flask.
I can sort of rebuild Django in the way that I see fit for that particular application.
And then I was talking to my friend William Vincent over the summer.
And he's a big Django guy.
He wrote a couple of Django courses or Django books, Django for Beginners and API development
one for Django.
The name is escaping me right now.
Yeah.
I just had him on the show, actually.
Yeah.
And he convinced me to move to Django and he wanted to hack on the application as well.
And so it was an opportunity to look back at Django and pick that up.
So just ran with it.
Yeah, it's cool.
It feels like Django is definitely still going strong, right?
They just did their 2.0 release and dropped Legacy Python support and are talking about
the async future as whatever that might be.
But it seems like things are going well there.
Yeah.
I'm really impressed.
Django 2.2 is coming out here soon.
That's the next LTS release.
And then Django 3 at the end of the year should have a bunch of async madness in it.
Yeah.
Actually, that'll be really fun.
I think async is interesting because it's something that most people don't really need, but it's often
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.
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.
I mean, sometimes they do, but it will be great to have async on the server.
And there are some already, right?
Like we have court.
We have Sanic.
We have responder from Kenneth Wrights.
There's certainly some options, but it'll be cool to have these more mainstream, really popular frameworks.
Just get this feature, right?
Yeah.
I see actually async.io more and more in code bases these days.
Just little things here and there.
But yeah, it will be exciting to have that full potential, the full async capabilities in the Django views.
Yeah, absolutely.
All right.
So another thing that I think was interesting is this whole monolith versus microservices debate, right?
Like you can have a little bit more complicated, big monolith application where everything works together and fits together.
And the complexity is kind of in the code.
Or you can say, let's break it into a bunch of little pieces or a bunch of little simple services that work together.
And then the complexity kind of shifts to the infrastructure a little bit, right?
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.
And I think it's a really great way of looking at it.
You're sort of shifting the complexity around so it's not so much in the application like code base.
And then it's more on sort of the infrastructure or the DevOps sort of people.
So you should, in theory, have smaller code bases.
Smaller code bases, you should have less bugs in them.
You can throw juniors on them easier.
Exactly, yeah.
You should be able to move a little bit faster.
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.
And like you said, you can throw some junior folks to maintain this part, this little microservice.
And that you don't have to understand the whole giant thing, right?
So you can sort of have each person divvy up the work in a more clear, simple way.
And if you have a lot of people working on it, that's great.
But, you know, I feel like a lot of folks want to say, well, I need to have all these microservices.
But really, they're just like one or two devs on that project.
You know, it's like, well, does that really help?
You know, is that really a good idea?
What do you think?
Definitely not a great idea.
I think with microservices, I think too many folks tend to focus on sort of the technology side.
So learning Kubernetes or learning Docker, you know, learning whatever it is.
It's always fun to learn these things, right?
You're like, oh, this will be my chance to like learn this way.
And then microservices, then on pods, and we're just going to scale it and it'll be beautiful, right?
Right.
But I think it's more of a culture shift.
I think you have to focus more on top-down culture shift where you can't just take your normal like siloed teams.
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.
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.
Yeah.
Well, also, I think, you know, it makes a lot of sense to play to your strengths, right?
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.
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.
Yeah, exactly.
Interesting.
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.
And a lot of engineers will see the really cool stuff, like let's say Instagram is doing with Django.
And they're like, well, that's how you do it, right?
I want my app to be good and professional.
So it's going to be like that, right?
But their app gets, you know, 100 or 1,000 or 10,000 visitors a day, not per second, right?
And so there's not 20, 30, 50 people working on it.
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.
Right.
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.
You're like, you know what, make it right.
We're not making it fast when it matters, right?
What do you think?
Well, yeah, you definitely have to pick and choose your battles.
You can't do everything.
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.
But yeah, you just really need to think from a product standpoint, you know, what is differentiating my product from the market?
Is it the actual, you know, what's in the application or is it something to do with the infrastructure?
This portion of Talk Python to Me is brought to you by StellarS, the AI-powered talent agent for top tech talent.
Hate your job or feeling just kind of meh about it?
StellarS will help you find a new job you'll actually be excited to go to.
StellarS knows that a job is much more than just how it sounds in a job description.
So they built their AI-powered talent agent to help you find the ideal job.
StellarS does all the work and screening for you, scouting out the best companies and roles
and introducing you to opportunities outside your network that you wouldn't have otherwise found.
Combining deep AI matching with human support, StellarS pairs things down to a maximum of five opportunities
that tightly match your goals, like compensation, work-life balance, working on products you're passionate about, and team chemistry.
They then facilitate warm intros, and there's never any pressure, just opportunities to explore what's out there.
To get started and find a job that's just right for you, visit talkpython.fm/StellarS.
That's talkpython.fm/S-T-E-L-L-A-R-E-S.
Or just click the link in your show notes in your podcast player.
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?
And focus on what's really important, right?
What makes you special.
Right.
You don't have to reinvent the wheel for everything.
Yeah, yeah.
There's always an awesome Python you can go look up and find.
Probably something right there.
Yeah.
So how are you deploying testdriven.io?
Are you, how's it running?
Is it a monolith?
Is it a microservice?
Does it, where does it run?
So it's a monolith, and yeah, I just did the easy thing.
I just deployed it right directly to Heroku.
Okay, nice.
Yeah, I don't have that much experience with Heroku.
More work with the virtual machines and stuff.
But the people who I know who do use it, they seem to really like it.
Like, what do you like about Heroku?
Well, I guess first off, yeah, I am using a monolith and I am using Heroku.
So it feels, it feels a little bit old school, even though these tools and technologies, you
know, they're not that old, like 2005 or, you know, something like that.
But it does feel dirty saying like, yeah, test driven is a monolith.
Well, I think that just speaks to like some of this culture that I was talking about, right?
Like, it's so easy to look and go, well, this is the way, you know, these big web apps
are run and yours didn't like that.
So it must be wrong.
It's like, no, it's like, it's totally a different calculation when one or two or three
people work on something versus a whole group or whole sets of teams, right?
Yeah, definitely.
Yeah.
Interesting.
So what features over at Heroku are you using?
Like, are you using Postgres?
What else?
Tell me about it.
Yeah, I think the powerful thing about Heroku is the add-on system.
Okay.
So instead of, you know, having to build a number of different tools and services and
link them all together, you really just, you know, pop G Unicorn on there, pop Django on
there.
And then you can focus on using the Heroku add-on system for sort of like your remainder
of tools that you need.
So yeah, I use Postgres, Redis, use SendGrid, use Sentry, use Log Entries as my log aggregator.
And then I use New Relic.
And those are all just, they all come from the add-on system.
So it takes minutes to basically set up.
So now I can just focus, you know, 100% of my time on the actual application.
Yeah.
That's kind of the opposite of focusing on the microservices and juggling the infrastructure.
That's like, just let them handle all that.
Here's my code.
Make it go.
Yeah.
And I mean, again, it depends on what you want to focus your time on.
And yeah, I love tinkering with infrastructure and whatnot, but I did not want to do that for
testdriven.io because I just wanted to get it up out the door.
And yeah, maybe I'll start scaling out some bits and pieces of it.
Like there's a separate service in there, or there's a couple of separate services that
I want to actually break out or a couple of separate pieces of the app that I want to break
out into separate services.
So maybe I'll look in doing that here soon.
But you know, the backlog is just full of bugs and features and stuff that I need to tackle
first before I start looking at the fun stuff.
It's more important to just like get content out there.
Yeah.
Once you have something working, then it is to like get some cool feature refactored.
Yeah.
Whatever.
Interesting.
Okay.
Well, it sounds like that's working out really well for you.
And like I said, people I've talked to also said the same thing.
That's cool.
Now, another thing that you have going on that I want to make sure we get a chance to talk
about before we run out of time is Pi Colorado.
Yeah, sure.
Yeah.
So what's the story?
This is one of the local regional PyCons, right?
In Colorado, I would guess, given the name there.
Yeah.
So basically, Pi Colorado.
Yeah.
It's going to be a regional PyCon.
It's going to be the 6th, 7th, 8th, and 9th of September of 2019.
And it really just came about because Denver seems to get overlooked right now in terms of
tech conferences and whatnot.
And there's really a lot happening here.
There's a lot of Python developers.
There's a lot of JavaScript developers.
I run a meetup in the area.
I've ran it since 2013.
But there's really a lot going on here.
You also have the Boulder market here, too.
So a lot of tech companies are moving their second headquarters here.
Slack just moved their second headquarters.
A couple, Quizlet as well, a couple other companies.
But yeah, there's a lot going on here.
And so we just felt like we needed some Python representation.
That's nice.
So you're involved with this, right?
And so basically, it's one of these stories of, well, why isn't there this conference here?
Like, well, maybe you just have to be the change you want to see in the world, right?
Right.
Yeah.
So I'm on the education side of things.
So I'm going to be putting workshops together.
So I think I'm officially the education chair of Pi Colorado.
Okay.
Nice.
How, I know the tickets are not even on sale yet.
So that's, no, maybe they are at the time of the release.
But at the time of the recording, they're not yet on sale.
So how big are you aiming for in terms of number of people?
What are you expecting and things like that?
I think it's somewhere between three and 400 people are what we're shooting for.
And that includes like volunteers and whatnot, but three to 400 people.
And so, yeah, tickets will be going on sale on March 4th, which, but yes, by the time that
this airs, they will already be on sale.
So the call for proposal and ticket sales do open March 4th.
And then the CFP and ticket sales close on May 9th.
Yeah.
So if you're anywhere near Colorado or you want to go to Colorado, because, you know,
Denver and Boulder, those are some of my favorite cities.
Those are really nice places.
Yeah.
We'll probably put together like some like hikes and, you know, whatnot the, you know, days
before, you know, days after a lot of breweries out here.
It's just a lot of like cool, you know, type things that are happening right now in Colorado.
Yeah.
That's awesome.
Yeah.
So people could check that out.
Is there a website they can go to?
Yes.
PyColorado.org.
All right.
Perfect.
I'll put that in the show notes as well.
But yeah.
So if people want to speak there, a call for proposal should be open now by the time due
to the magic of time shifting and podcasting that, that this releases.
So they can check that out.
If not, it should be like any day.
Yeah.
Cool.
So you said you're the education chair and I've been to the education summit at the main
PyCon in North America.
And I felt it was a little interesting.
So like, I feel like I'm in education more or less in the Python space, right?
With the podcasts and with the training courses and so on.
And that feels like education to me, but I didn't feel exactly like that's what the focus
of the education summit at PyCon was.
It felt that was more a little bit towards like teachers at regular like high schools or
working on projects with students that live in that space.
Like what's the focus here?
Yeah.
So really the education chair, what I'm supposed to say, I'm like still like forming, you know,
what it means, but it's really just going to be workshops.
So we're going to have three different tracks for workshops.
We're going to have Python, web development, and then data science.
And the Python one is just going to be generic Python.
And then from that, we'll have a beginner track and then have an intermediate to advanced level
tracks where I am modeling it sort of after the PyCon workshops where they're a little bit
longer.
They are on a separate day.
Some of the regional Python conferences, they do workshops, but they kind of stick them into
like the other like talks.
So I did a tutorial slash workshop at a regional conference.
And I would say 90% of the people that came to it didn't even realize it was a workshop.
So I'm just trying to do a good job of differentiating between, hey, this is a workshop and these are
actually talks.
Right.
Like you should probably bring your laptop and prepare to be participating in a way, right?
Yeah.
So it sounds to me like your plan is this is like education for people to learn stuff
about Python more than it is a separate segment for educators of Python.
Is that right?
Yeah.
And we have been talking about maybe doing some sort of education summit similar to PyCon,
maybe a little bit different, not targeting so much like high school and university type
teachers, maybe targeting more people like yourself.
But for right now, I am focusing most of my time on the workshop aspect of it.
Oh, that's cool.
Well, it sounds like it's going to be a great conference.
I'm sure you're going to be worn out by the time September 10th arrives.
Oh, I'm already worn out.
It's a lot of work.
It has.
Yeah.
That's cool.
I'm sure people will love it, but it's, there's so much stuff that happens behind the scenes
and like not glorious stuff.
Right.
And not necessarily that you're doing, but like, who's going to make sure there are napkins?
Who's going to make sure that there's food and proper food choices?
And like, just, you know, what happens if this hotel sells out, right?
There's just so much logistics, right?
Yeah.
We do have a napkin chair.
Nice.
Joking, joking.
There is a chair just about for everything else though, but.
Yeah.
That's funny.
Cool.
All right.
Well, it's like I said, it sounds like a cool conference and, you know, maybe I'll see if
I can get out to Colorado as well.
I don't know yet.
It's a ways out, but it definitely sounds fun.
I'm so glad you're doing that.
It's cool.
All right.
Well, Michael, I think we should probably leave it there for all the main topics because
we're getting short on time.
But let me ask you the final two questions before we call it a day.
If you're going to write some Python code or other code, even what editor do you use?
I like VS Code.
I typically, you know, go back and forth between front end JavaScript and back in Python.
So VS Code provides a nice balance for me.
Yeah.
Visual Studio Code's pretty nice these days.
And I hear when I started this podcast, there was a lot of them sort of answers and then a
sprinkling of other.
And I would say VS Code is probably the most popular choice these days.
It's pretty impressive.
Yeah.
I moved away from them when I started teaching because I wanted to use an editor that sort
of students understood when they saw me like coding in front of them.
And so I moved to move back to Sublime, moved to Atom.
And now I am on VS Code.
Yeah.
Do you think it's interesting that Microsoft made Visual Studio Code?
Do you feel like they had to like overcome a little bit of resistance?
People going, oh, I don't want to use this thing from Microsoft.
Like, what are they up to?
Or do you think it was per se that way?
Microsoft is like a different company today than it was five years ago.
So, I mean, they have, it seems like they're, they got, you know, GitHub, they got VS Code,
probably a number of other tools and technologies I can't think of now.
That's right.
They're just a very different company.
I mean, I think pretty soon they're probably going to have the developer, you know, ecosystem.
Yeah.
It seems like what they're definitely going for.
And, you know, I think that's kind of the heart of the company.
So it's not that surprising, right?
Yeah.
All right.
So notable PyPI packages, maybe not the most popular, but something you're like,
people should know about this.
I saw it the other day.
It was awesome.
So I use a lot of Django RQ.
So that's Django flavor of Redis Q.
Just allows you to use Redis Q a little bit easier inside of Django.
That's cool.
Is that to like kick off background work or for caching or what is it?
Yeah.
It's for kicking off.
Yeah.
It's a task queue.
So just kicking off background work.
So it's like, it's an alternative to Celery.
It's a little bit easier to use than Celery.
Yeah.
I get the sense that Redis might be a little simpler than Celery.
Okay, cool.
Got any more?
Or you have a couple here on this list that you were sharing?
Oh, yeah.
I use Flake 8 a lot.
I mean, every single day.
I mean, that's running in the background.
So that's just a linter.
And then Hypothesis, which I use for hypothesis testing.
Hypothesis testing is interesting.
Or property-based testing is quite interesting, right?
Like, you know, we'd covered that on the show quite a long time ago.
I had the founder or the creator of that on.
And it was, it's an interesting way to do tests, right?
It's like, well, it takes a number and a string and just go make some numbers and strings and
figure out what the right ones to put in here are, right?
Yeah.
I mean, if you're really focusing on testing that contract between functions, between,
you know, modules, you know, whatever it is, Hypothesis definitely really, it works
really, really well for that.
Yeah, it's cool.
Definitely a cool project.
All right.
So final call to action.
People are excited about what you're doing over Test Driven or maybe the conference.
What do you say to folks?
Yeah, definitely check out testdriven.io and also check out PyColorado.
So two call to actions there.
But yeah, I really appreciate you having me on the show.
Yeah, it's great to have you on the show and get a chance to catch up with you.
So thanks for being here and sharing the history of real Python,
what you're doing today and some of your other thoughts as well.
Yeah, likewise.
Thank you.
You bet.
Bye.
This has been another episode of Talk Python to Me.
Our guest on this episode was Michael Herman, and it's been brought to you by Linode and Stellaris.
Linode is your go-to hosting for whatever you're building with Python.
Get four months free at talkpython.fm/Linode.
That's L-I-N-O-D-E.
Find the right job for you with Stellaris, the AI-powered talent agent for the top tech talent.
Visit talkpython.fm/Stellaris to get started.
That's talkpython.fm/S-T-E-L-L-A-R-E-S.
Stellaris.
Want to level up your Python?
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.
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.
And of course, if you're interested in more than one of these, be sure to check out our Everything Bundle.
It's like a subscription that never expires.
Be sure to subscribe to the show.
Open your favorite podcatcher and search for Python.
We should be right at the top.
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.
This is your host, Michael Kennedy.
Thanks so much for listening.
I really appreciate it.
Now get out there and write some Python code.
I'll see you next time.
Thank you.