Get in touch

As the Co-Founders of Postlight, Paul and Rich don’t often hack away and engineer anymore. This week though, Rich shares a little side project he’s been working on. He breaks down why he’s programming in Python and shares his realization that although the languages may change, the problems stay the same.

Transcript

Paul Ford Microsoft walks in the door and is like you’re gonna be able to eliminate sooo much work with this amazing solution. And then five years later, there’s 25 people supporting. [Rich laughs] [music ramps up, plays alone, fades out] So Rich.

Rich Ziade Yes Paul?

PF You’ve been doing a little side programming.

RZ Ahhh, I have. I have. I don’t like to talk about it.

PF The President and the CEO are not supposed to be hacking away.

RZ We’re not, we’re not. 

PF That’s just trouble for everybody. Right?

RZ It is, it is. First off, I like to go into the different subcultures of engineering and just see what’s going on. So I went everywhere.

PF Oh yeah, they all hate each other.

RZ There’s a lot of hate. There’s a lot of strong emotion, there’s a ton of advocacy, which translates into once you’re an advocate for something, you have to hate something else, right?

PF That’s so unnecessary. But yes.

RZ It’s very unnecessary. But as someone who can whiteboard a platform approach after a conversation.

PF A platform whiteboarder.

RZ A platform whiteboarder, is, you know, I do want to know, I want to know, just enough to understand the limits and the capabilities. 

PF You gotta what’s going on out there. You really do.

RZ It’s great. It’s great. And I think we’ve done a good job at Postlight of kind of exposing engineering chops, exposing solutions to the whole org, actually.

PF You know what I find hard when you’re when you’re leading, though, it’s hard not to keep going in.

RZ I think it’s healthy.

PF It’s no, no, but it’s so satisfying. No, I mean, once you start programming, you start messing around.

RZ Yeah, you’re gonna keep going. 

PF You’re like, oh, it’s so much fun.

RZ Oh yeah, I ended up, I worked on this project—

PF Just describe the project broadly, so people know.

RZ I have a collection of videos.

PF Yeah, just anthropologically interesting videos. Nothing, nothing raunchy, nothing weird. Just things that tell you a little bit about America.

RZ That’s right. And Russia. And Japan. And a few other places.

PF Just good internet ephemera.

RZ Yeah.

PF Like if you started this for yourself in a past era, you probably would have done it on like a Tumblr.

RZ I did. Yeah, actually. But what started to happen is that all my Tumblr links, which were mostly YouTube, a little bit of DailyMotion, which leaves me with a deep sense of shame. But they were breaking everywhere. Yeah, like 60% of them, were just not working anymore on YouTube. Part of it, you know, was people taking him down, part of them was copyright. 

PF They become screenshots tweets today.

RZ I wanted to collect them. And I was like, you know what, this is getting silly. I have them in a Dropbox. But that’s not a fun way to share them. I wanted a URL for every one of them, right. But I also wanted to bring the videos down and put them in AWS.

PF Let’s be clear, we’re not sharing the link, but it’s a project. You wanted to make—

RZ It’s a project! And what it made me touch on was a few things. One, how do I go and scrape from any URL, YouTube, Twitter video, TikTok, Reddit.

PF So you need a little bit of a web service here where you can put the URL in, get the video back and save it somewhere.

RZ And save it somewhere, and then once I get the video back, I want it like it was fun, because it was driven by the requirements, right? So I wanted to extract the thumbnail. Have a nice thumbnail and I also wanted to put them on AWS to programmatically do it on s3, I should say. So I wanted to do it programmatically. And I’ve started to toy around. And I started, I tiptoed towards Node and React. 

PF It’s a big world. Big ol’ world.

RZ A big ol’ world.

PF NPM, install everything. Yeah.

RZ Correct. And then I said, you know, I love Python. I’ve always loved it. I love the pragmatism around it. I love how it doesn’t really want to lecture you but just wants to help you.

PF Also a friendly community.

RZ A friendly community, I didn’t use the community because I’m stubborn that way. 

PF Well, I am too. But the side effect of the friendly community is friendly documentation. 

RZ There’s a lot of good docs.

PF In a conversational tone.

RZ That’s right. And so I had this project, I wanted to do it, I wanted to mess with SQL lite, which is just the coolest thing. And there’s good libraries out there. And it’s a great way to sort of dip into the to the different cultures that are out there and how they explain themselves and defend themselves ended up using Python. I’ve never coded Python before, but I’m one of those people who will read the documentation and say, ‘wow, that’s a good programming language’ and never come back to it and code in it. 

PF Frankly, if you—me too, actually. I just did that this weekend for R, I’m learning R.

RZ Knock on wood, if I have the faculties and the time to learn that is I’m I’m one of those people who’s not good on a vacation, I get depressed.

PF So you need that, you bring a couple textbooks with you, helps you calm down.

RZ It’s just a wonderful thing, right and learning and also the other side of it. And this is a piece of advice to managers out there who are trying to run these functions, ie. humans and get clear and consistent output is go code because your sense of control and your sense of predictability skyrockets in a really meaningful way. It just feels really good to see something work, right. The uglier the problem, the better you’re going to feel when you solve it.

PF It is true.

RZ It’s really a wonderful thing.

PF The thing that’s beautiful about Python is when you look at it, you’re like, oh, that just looks like programming. Like it’s just it’s indented. And it looks like something out of a textbook. And then it’s the only language I’ve ever written, it’s I mean, PHP, and Perl, and Lisp and Closure and JavaScript and xslt and on and on. Where you think to yourself, I think the solution would look like this, and then you write it. And it looks like that. And it works. You write code in Python, and it runs? Yeah, it’s very confusing.

RZ I’ve been in a few awkward meetings in my career as a manager, Product Manager, where I was told by engineering that it couldn’t be done. And then I ended up, not to be defiant, just thinking it through and then I would pseudocode, like right on the whiteboard and say, what if you did it this way? And then they would show me why I can’t. But what happened was, a dialogue would kick off, where through those failures, and through that, like conflict, we actually found a way to do it. Nobody felt like a loser or winner though. This is a wonderful way to learn and move forward. Right? 

PF Look, here’s the way those interactions work. “Hey, I want to do this.” “Oh, well, I don’t know if you can.” “Oh, well, what if we do it like this?” And at that point, you’ve entered a incorrect solution into the register. And like, that is an intolerable situation. Right? So now, the person has to make a choice, they can stomp their foot and say, they can either say yes, you’re right.

RZ Or have a dialogue with you.

PF That’s, that is all humans, I’ve been on both sides of that conversation.

RZ And the beauty of Python, it really doesn’t want to clutter you with all its magic, and why it’s as good as it is, it just wants to get out of your way. As soon as you solve it. I thought, I thought it looks like pseudocode to me.

PF It doesn’t, you gotta think about different languages and where they come from, like JavaScript, God knows it runs the world, we use a ton of it, it’s a powerful, powerful tool. Node is unbelievably powerful. All that stuff is good. It’s still kind of an adolescent language, in a lot of ways. It’s just kind of all over the place, doesn’t really know what it needs to be at any given time.

RZ I don’t think anybody anticipated its maturity path.

PF No, that’s, it grew organically. That’s one of the things that makes it so it’s like the web in general, where the web’s path is so incredibly arbitrary. And it’s a niche filling technology, right? Like, wherever mold can grow, you find the web? Yes, it’s in the back of the fridge. It’s in the front of the fridge. Python is much more structured and thoughtful and helpful. Python is essentially like a good Junior professor of language like, “Hey! Hi guys. You know, I wasn’t too long ago that I was an undergraduate.” So I really liked it. That’s the Python attitude.

RZ I think this is a reflection of its community, I find it, it doesn’t want to take credit for your own success. 

PF It’s so happy when you succeed. 

RZ Here’s what you’re never going to hear from a Python engineer: “I was able to create an environment that I was able to, like, replicate in a container. And it only took me three hours.” [Rich laughs]

PF No.

RZ You’re never gonna hear that. There is an inclination, this is gonna, I’m gonna, I’m gonna wade into controversial waters here for a second.

PF Ooff, get ready everybody.

RZ If I may, if I may, Paul. There’s an inclination. As a lawyer, I see this, right? But for all humans, to effectively burrow into the corners of a skill, or a discipline, where you make a claim that terrain as your area of expertise, we love to do it. And we’d love to do it where no one has gone. We’d love to go to a place and stake claim and say, oh, you want to do that? I did that. And let me tell you how and why. And then not only am I going to tell you how and why I’m going to share my solution on GitHub, and make it available to the world and show the world that I have claimed that piece of territory. It is expertise, expertise, dials up your market value, right?

PF You know, it’s tricky here too, its career stages, right. So as you’re getting into, you’re like, oh, well, this is all data, and I’m gonna figure the data out like that, then you get mid career, and you’re like, every single bit of data is entirely different. It must be approached using a very specific strategy that I’ve mastered. Yeah. And then as you get Later career, you’re like, it’s all data. I just, you just dump it in the bucket and figure it out and go from there.

RZ Yeah, exactly. 

PF This is the both the value and the risk. I was in a meeting with a client not too long ago. And, you know, we’re talking about some new work and our one of our lead engineers was in there and they said, you know, can you give us a clear answer about which something or other to use, and I just laughed, and I went, oh, he’s gonna answer that for you. He’s gonna say it depends. And then there was this long pause and he goes “it depends”. [Rich & Paul laugh] because it’s just the amount of work you have to do to get to “it depends” because you can’t actually just say, if you want to prove that you’re a really seasoned product leader, you can say “it depends” but then you actually have to say, what the five or 10 options are that you’re evaluating.

RZ Yeah, I think it’s a cycle because I think one of the things we love to do technology is package it up and simplify it so others can build on it. So that feels good.

PF But that feels bad, because now I’m not special anymore.

RZ Well, what happens is there are now like the idea of cobbling together libraries right over the wire really quickly and making them available to create this incredible support system for what I’m about to do, feels very powerful and empowering.

PF Standing on the shoulder of giants. And it says hello, world. Woof!

RZ Exactly. Exactly. Now, the problem with that is we actually create other lanes of expertise to just manage the dependencies and what we’ve cobbled together.

PF Do you want to know a job in the future?

RZ Yes.

PF Low code support engineer.

RZ Don’t do it.

PF Yep. Low code supported. Like, there are, there are AirTable support engineers out there.

RZ Of course, of course. And look, you may be one of them listening to this podcast.

PF No, no, it’s a great job. It’s an inevitable job.

RZ I’m gonna say something really old man. But I’m gonna say it. I mean it. God, nothing’s changed. The problem is the same. It’s boring. It’s lame. But it’s the same problem.

PF So I published my What is Code? essay, which was a kind of signature piece for me. The most interesting piece of feedback I received was on Twitter, and it was “Really enjoyed this piece. Very clear, then not much has changed.” [Rich laughs] And that was from Bill Gates. 

RZ Whooaa!

PF Yes. Yes. Bill Gates, “Paul Ford really captured some interesting things about coding cultures” along those lines. “Not much seems to have changed since my day” punching paper tapes on the Altair. 

RZ Right. Exactly. Not much has changed!

PF Well, except for Bill’s marriage, I guess. But like other than that.

RZ This is true. But I want to make a case here, though, I want to say something here about the web.

PF Who can stop you? 

RZ Nobody! It’s our podcast. The web in its purest form, in what it represented, as a just incredibly elegant piece of infrastructure didn’t want to be more than it was, right? And I think we get bored with how simple and beautiful it is. And we can’t help it cake on shit on top of it. 

PF Yeah, I’ve ended up a big fan of the Webassembly virtual machine inside the browser, because I’m like, at least then we have a place to do it. Like we keep saying like, Hey, how about we will make a 2d new kind of interface in Canvas. It’s just like, not just let’s just go ahead and pretend we have a virtual machine. And if I still want to publish my HTML pages with links, I’ll do it over here.

RZ Just to bring full circle, like my little project, I was thinking about, you know, how am I going to make this work? And I got to a point where it’s like, okay, time to deploy, and I tried Google Cloud. And I found myself crying in the corner. 

PF Google Cloud is… it’s got everything.

RZ It’s got everything! Look, don’t get me wrong, it was no worse than the others. I tried Heroku. But it turns out Heroku secretly destroys your SQL lite database every day, unless you move it to Postgres, which I don’t understand. I tried digitalocean and ended up in a very strange place. They were all fine. I could have barreled through all of them. I paused and said to myself, what I’m building actually just wants to be a static web page. And guess what? It will be so performant because it will be a static webpage and do nothing. Yeah, except what it’s supposed to do. And so what I did was I ended up using Flask, and I ended up using a library called Frozen Flask. 

PF So Flask is a Python web framework, really, in about one page of code, you can do something very meaningful.

RZ Yes, it’s kind of trying to be that, right. It’s trying to be as simple as possible.

PF Little code. And look, it’s never going to be the fastest etc, etc. But boy, if you are hacking out of concept using true, what I would say like true web principles, like I need a URL, and I’m going to pass it a variable, and it’s going to go to the database and then I need a couple, I need my templates but I only want like one homepage template. And like, every template after should look pretty much like that, I only want to write really like a few pages of code. Like, muah! 

RZ Is it weird to take pride in the fact that there’s no JavaScript on every one of those web pages? 

PF It’s not, there’s a huge trade, right? 

RZ We’re in the sounding old again.

PF But no, it’s not. I’ll tell you why. Well, here if we are it’s because we can offer something useful here. We are truly right now in the in between, the in between is that a tremendous shift all the economic force of the web, let me just say, documents are mostly a solved problem, putting words on the page with links, mostly a solved problem. Putting words on the page with links.

RZ URL as a representation. 

PF Millions of subtleties we are doing, there’s people out here at postflight doing that work right now to make better publications with new business models that do all kinds of stuff. Zillion things to do. But the fundamental aspect of that saw problem not a solved problem is putting live interactive components on a web page, distributed out to the world and getting them to write back either to local storage or to a hard drive, especially at scale. Still a complicated problem where literally half a trillion dollars can be spent on hosting every year and billion dollar companies popping up to try to make this easier. We’re in the middle. I think you’re headed towards a world in the future where Webassembly, you’ve got Google has a framework called Flutter that’s very, like you’re kind of composing in all different platforms using Flutter in the Dart language. So I think we’re headed somewhere in the terms of shipping apps rather than pages.

RZ I think you’re right. I mean, I tend to tell these stories to sound more melodramatic than I need to. The truth is a rich complex user experience is powered by some very modern and the maturity of platforms of frameworks like React and the like, well, which we are experts at, by the way. And it makes sense.

PF React is the closest the web has come. And it’s not because, it’s not React, it’s the ecosystem around React is the closest the web has come to an SDK. So when you go if you program for Windows, you program for Android, you program for iOS or Mac OS, you get a giant programming environment, and all the widgets are there for you. It’s not as simple as drag and drop. Yeah, boy, can you build an application quickly. And so many pieces fit all the way up to publishing to the App Store. The web has never had that. But you can distribute to like 2 trillion people in a minute. Right? So what’s happening is like, react, created this world in which lots and lots of components got built for the web, and component frameworks and style guides, design systems. And so it started to—

RZ A lot of ugly problems were solved.

PF A stylable SDK emerged.

RZ Hugely useful. 

PF That’s where and that’s where we’re headed, right? We’re headed towards somebody, you know, eventually, probably two or three very large organizations bundling all that up, like Google does with Material Design and say, you want to build web apps, right? Use this language, use these toolkits. And if you need anything else, go over here and extend.

RZ I guess what I’m saying is, here’s where I think we lost the script, Paul. Don’t use React for your about page.

PF Well, this is the great struggle, right? Because now you’re in a zone where you saw when you got that hammer.

RZ Well you got that flex, you got the muscles, you built those muscles, right? You’ve got the hammer.

PF And you’re gonna go back and build a page that has HTML in a bracket on the top?  Like an animal? Okay, but we got to say a couple things. So Flask is amazing.

RZ Flask is amazing. I use a couple of libraries that bolted on to it, which is seeing SQLAlchemy.

PF SQL lite.

RZ Through SQLAlchemy, which is really cool. And I use Frozen Flask which generate spits out static pages. So it’s like, I feel like a stud.

PF You know what I learned about today? I learned about Gooey, which is a Python library. What it does, is it so Python has ways of parsing arguments. And Gooey auto creates a GUI, graphical user interface.

RZ It’s really cool. Off the arguments.

PF Well, then you can hand that over to somebody be like, hey, well, you know how we run the batch process to upload the spreadsheet every weeks? You don’t need me anymore. Here, click click. That’s the world of magic. Anyway, entirely too granular, but it’s good to go down in the weeds every now and then.

RZ It’s good to go down. First of all, I think it’s two themes here. One, mentally it’s healthy to be able to do that as a manager. 

PF I think it’s our job to know it.

RZ It’s our job to know it. Absolutely, absolutely. And it’s worth noting, even though it sounds like we went in one direction, we actually are a world class, web application platform shop, Paul. Postlight.com. You can learn about Postlight.

PF I’ve definitely done the projects that are like I’m gonna figure out React and make this work.

RZ I will do that next time because I want to know.

PF I’ll tell you, when you really start reading your little nested components and they all flow with the same data. It is, you’re like whoa, whoa. Yeah, I get it. Wow!

RZ Exactly. 

PF Yeah, I’m not just writing paragraphs

RZ Next week on the Postlight Podcast, CSS! [Paul laughs]

PF That’s right.

RZ I’m kidding. We won’t do that to you. Reach out to us hello@postlight.com. We’d love to give advice, product design, product strategy, product management, engineering, building. Great stuff, check us out at postlight.com

PF Onward we go!

RZ Have a great week. 

PF Bye! [music ramps up, plays alone, ends]