← Back to Show Notes

Transcript: Listen Notes - Wenbin Fang

Will Vincent

Hello and welcome to another episode of Django Chat, a weekly podcast on the Django Web Framework.

I'm Will Vincent, joined as always by Carlton Gibson.

Hi, Carlton.

Hi, Will.

Will Vincent

And this week we're joined by Wenbin from Listen Notes.

Hi, how are you?

Wenbin Fang

I'm good.

How are you?

Will Vincent

I'm good.

Thank you for joining us.

Carlton Gibson

Yes, thanks for coming on, Wendan.

Will Vincent

We wanted to have you on because we both loved your article on uh the boring tech behind a one-person internet company.

And that actually blew up on Hacker News recently and justifies a lot of the points that Carlton and I try to make around keeping it simple even at scale.

So we'd love to talk to you about how you do that.

So for folks who don't know, what is Listen Notes?

What's the quick pitch?

Yeah.

Wenbin Fang

So Listen Notes is a search engine for podcasts.

It's like Google, but for podcasts.

So you type in keywords and then you can search the whole internet, podcasts, and episodes.

And we also provide APIs for developers.

If you want to build a podcast app or podcast VLT services, just use our API to search podcasts, to fetch podcast metadata.

Carlton Gibson

Right.

So if I want if I wanted to make an app best Django podcasts, I could use your API and I'd come up with a list of um Django podcasts.

So Django chat would be the number one Django podcast, and I could listen to that.

Yeah, probably the one and only.

Yeah.

Yep.

Super.

Will Vincent

One and only.

And how long have you been uh working on this?

Wenbin Fang

Yeah.

So I started Discent Nose as a side project in early 2017, January 2017.

I spent probably one week saw together a quick prototype for this EndNote.

And then I didn't touch the code base for about nine months.

Because during that time I was running my first startup, which eventually failed.

And in September 2017, I left the startup, I co-founded, and I needed to find something to do.

So I picked up listen notes and worked on it a little bit, and I worked on it full-time, and I incorporated it as a company, a one-person company.

And then until now.

Actually, this bind uh would be the two-year anniversary for Listen Nose.

Oh, wow.

As a company.

Congratulations.

Yeah, it's really good.

Thank you.

Carlton Gibson

And you still one man, still one person?

Wenbin Fang

Uh full-time employee, yes, one full-time employee with me.

But I but I hire some uh contractors, ONO for different things, like design, content, or some uh front-end development, something like that.

Yeah.

Will Vincent

Okay.

So one thing I wanted to ask you, because for beginners to Python, they hear something like, I did a prototype in a week or a weekend, and it sounds unimaginable.

So I'm so I wonder if you can recall.

So what did that actually involve?

I mean, start project, like what is a what does a bare bones prototype look like before this?

Because that's something that yeah, uh newcomers don't understand how that can be done.

Wenbin Fang

Yeah.

Yeah.

So if you look at uh listennotes.com today, uh it's quite complex.

Uh it has a search engine, it has a playlist, it has API, a lot of things.

But back to the beginning, uh the project requirement was very simple.

I just want to search podcast episodes.

Let's see a search bar, type in keyword, see the search results.

That's it.

And uh I basically started uh with uh the Django template.

Uh I I believe the command line is Django start or something like that.

Yeah.

So start a simple start project.

So basically I started uh the Bellbone project, uh added one view uh for the for the search for the search page.

And I I spin up uh uh Elasticsearch instance and index data.

And uh so basically I have three digital ocean instances, one for web server running Django, one for uh Elasticsearch, and then one for um Postgres database.

Will Vincent

So how did you get the initial data?

Where did that come from?

Right to pop your

Wenbin Fang

so uh uh so that there are only a few well-known podcast directories on internet.

Will Vincent

Okay, so do you scrape them or something?

Wenbin Fang

So scrape them and then gradually um I build uh internal tools so I can submit myself.

Also, podcasters can submit themselves.

So let's say today you start podcast today, uh you you need to submit your podcast to somewhere.

You submit to Spotify, to iTunes, and listen notes.

So every day we we are getting uh close to 100 podcast submissions from podcasters themselves.

Will Vincent

So you alright, so so you started so it's a simple page, you had your Elasticsearch, you had the initial data.

So Elasticsearch, that's not a that's not a simple thing to spin up.

I mean clearly you've worked with Elasticsearch before, right?

Wenbin Fang

Yeah, I I I had some experience.

So basically I I follow um some simple nodes I took um a few years ago setting it up.

Uh yeah, yeah, yeah, it was not too difficult.

Carlton Gibson

Were you just run were you just running like the single node?

Single node because you meant to have the duplication and the replicas, and that's when it starts to get a bit hairy because you're

Wenbin Fang

no I have a cluster, but back then it was a single node.

Yeah.

Will Vincent

Okay.

Yeah, well, uh it's especially relevant to me because at DjangoCon this year I gave a talk on search, um talking about basic search and then uh with Postgres built-in search.

Um I'm curious, did you ever consider using built-in um you know the full text search in Postgres?

Or did you already know Elasticsearch?

So did was that a case?

Wenbin Fang

I actually use uh yeah, yeah.

So I actually use uh Postgres full text search for my other small side projects with a small amount of data.

Uh at the beginning of this uh this SendNouse project, I did some testing with uh Postgres uh full text search.

Uh it was very slow, if I remember correctly, it was very slow, so I gave up quickly.

Uh maybe because of the amount of data that we need to index.

Carlton Gibson

Right, it's ingestion speeds.

Will Vincent

Right, because it seems like you you're pulling in data, but data that's already there isn't gonna change much, so you can index that and query it pretty quickly.

Wenbin Fang

It changes a lot.

Oh, it changed a lot?

Wenbin Fang

The in the index data changes a lot.

Well, what

particular, right?

Will Vincent

Is it more episodes what else?

Wenbin Fang

And episodes data, podcast data changes all the time.

Oh, okay.

Probably you guys don't update your podcast much, but you know, if you have the whole internet podcast data at any given time, there are some podcasts changing their description, title, ISS feed, audio URL, all kinds of things.

Will Vincent

Well, so I wanted to ask, so in your article from was it May of 2019, you said there's 20 production servers, and many of those are workers.

Could you describe the setup of workers you're using to you know pull in this information?

Wenbin Fang

Sure.

So for workers, basically they are asynchronous processing uh touch workers.

I use salary, C E R Y.

Your audience are familiar with salary.

Um yeah, so yeah, we still some uh so basically salary is uh uh is a hookup with uh uh salary bit, which is a scheduler like Chrome.

Yeah.

So we have some scheduled tasks like for for cloning data, uh pouring data from ISS feed to a new episode, and salary also handles other async tasks, um uh mostly compute-intensive tasks, like uh sending emails, uh uh resizing images, uh doing heavy database queries, things like that.

Yeah.

Will Vincent

Yeah.

Well, I like that this is, I mean, your use case is such a it's complex, but it's also simple, and that you can understand that it's uh you know it's not tons and tons of workers, it's you know emails and checking for changes to the podcast directories.

Um so it makes a lot of sense.

So I um so how much may and I know you have all sorts of actually could you talk about so you have monitoring involved, and I you've listed a whole bunch of tools, right?

So because other so that otherwise you couldn't sleep at night.

Uh what how did you think about or how did you baby step from that, right?

Like if you recall, like what did you start with, and then now obviously you have a lot of monitoring going on.

Okay.

Will Vincent

How would you tell yourself to do it?

You know, if someone's saying, okay, which what do I start with, right?

Because there's so many you can add.

Wenbin Fang

And yeah, so basically we set up monitoring and alerting to uh give us confidence about the health of the entire system, right?

So high level, you need to know the website is up, the API is up, right?

Yeah, so uh for monitoring, I use Datalog.

And Datadog uh is connecting to PageOD for alerting.

And for Datadog, uh we uh continuously uh pin the uh website and the API endpoint and check the response to see if it's uh 200, it's no 500.

Right.

And if it's no 200, then probably something broken and uh I will get alert.

So high level you need to have this kind of stuff.

But for individual components, uh you also need to monitor some matrix.

Like for Postgres, you need to monitor a few things for Redis and other few things, Libya NQ, uh Elasticsearch, yeah.

Each of them I all have one or two alerts associated with this.

Will Vincent

Yeah.

Yeah.

And I think you mentioned for Django itself, you use rollbar.

Is that still the tool that you like to use?

Wenbin Fang

Yes, yes.

So I get the stack trace, the full stack trace if something's wrong.

Yeah.

Will Vincent

Yeah.

Well, uh, so Carlton and I spoke, and we wanted to ask you about, so you uh sort of proudly don't use Docker at all.

Um and Carlton is big on this wagon.

And no Okay, make the case.

I'm not putting words in your mouth.

Carlton Gibson

My case, my my case is simply this.

Docker repositories down or relevant, like right.

Carlton Gibson

But for 95% of Django applications out there, you don't need all this high following container nonsense.

You want a VM and you want to bang your application on it and you want to run it the good old-fashioned simple way.

Because that VM will never go down.

That will you you'll never have port issues, you'll never have network issues.

Like, you don't need all this massive containerization stuff until you're scaling up to something much, much, much bigger.

And look at what Wembin's doing single-handedly.

Right?

So that that would be the way I'd phrase it.

So what's your experience?

Will Vincent

Go ahead.

I was gonna ask if it if it would be different if you had a team of developers, because to me, that's in some ways the biggest advantage is on a team having the same local setup um separate from Yeah.

Yeah.

What are your thoughts?

Yeah.

Wenbin Fang

So I don't use Docker because it's unnecessary for my situation.

For the workload I'm running for the team, I have basically it's just me as a backend engineer.

So Docker is good to provide a standardized container.

It is about it is very portable.

So you can run Docker container on your local dev, you can run the same container in stages, in production, you can spin up CI with Docker containers.

It's very convenient.

It's very easy to scale up and down.

But for my situation, well, I run all these servers for many, many months.

So I don't need to scale up and down often.

And I don't have a team, uh, so it's just me.

Uh I basically set up everything.

I don't need standardization for other people.

Carlton Gibson

I mean, may maybe one use case.

You you might have, say, you want you you mentioned RabbitMQ.

Well, maybe you don't want to install the whole Erling VM and all the rest of it and to use a container there to locally use RabbitMQ while you're developing or testing.

That seems that'd be that's one useful case where you you know you don't need to go the whole hog with Docker.

You don't have to jump into Kubernetes or whatever to get to use it

Wenbin Fang

a bit.

Yeah, so for for my previous uh job, uh so previously I I worked in Nextdoor, a local social network website.

Yeah, and um in 2014, uh I believe it was me who introduced Docker to the company.

And uh so when did Docker come out?

Maybe 2013.

Will Vincent

Something like that, yeah.

Right, okay.

Wenbin Fang

Yeah, so for for a for a mid-sized company, for mid-sized stuff with tens of engineers, yeah, with Docker is nice.

So basically we standardize the uh the dev environment for all the engineers with Docker containers, and so it's easy to set up.

Onboarding is easy, yeah.

Will Vincent

Because onboarding is a huge, yeah.

Carlton Gibson

Yeah, yeah, no, that's it.

Right.

Yeah.

Carlton Gibson

I mean, this is where a few years ago people were using Vagrant and VMs, right?

So because you you get that you get the development VM and you just be able to vagrant up and it would run, and but it's slow and heavy, and it's much nicer.

Wenbin Fang

Sorry, I'm using Vagrant right now.

Okay, for this and notes.

Carlton Gibson

No, but I I still I still use Vagrant loads because I'm a big advocate of VMs.

And but Docker is quicker and lighter, and you know.

Yep.

I can see why people like it for the development environment.

Yeah.

Will Vincent

Uh for deployment.

Speaking of deployment, so you're on AWS, is that right?

Mm-hmm.

Wenbin Fang

Yep.

Will Vincent

Uh now I I assume you've had previous experience because AWS is not the easiest thing to start with.

I'm curious if you talk about your experience maybe with AWS versus other ones you've used professionally.

Wenbin Fang

Yeah.

So I uh earlier on I mentioned that I spin up three digital ocean.

Oh, yeah, you said

Wenbin Fang

they call the instance dropoties.

I don't know, because because it's very lightweight or cheap.

Will Vincent

Yeah, five dollars.

Uh yeah, or whatever.

Wenbin Fang

Yeah, five dollars per band.

I had three instances for listeners as a side project.

I used the same setup for many banks.

Uh maybe one year after I started this side project, I migrated to ARS.

Uh the reason was very very simple because I started to work in WeWork, and we work gave you um $5,000 ARS credit.

And then I migrated to ARS.

Uh I mostly just use uh EC2 instance.

Okay.

I I don't want to uh have uh vendor login uh with uh adres.

Uh yeah.

Wenbin Fang

I I I I just use EC2 instance.

Uh anything else?

Oh, I I also use S3.

Will Vincent

Right.

Yeah, I think you in S3 and Cloud Pro your for your front end.

Yeah.

Will Vincent

Um I guess that's an

Carlton Gibson

But again, that's very set, that's very sensible, right?

Because Amazon, I mean like each of the big services, they've got you know 50, 60 different things that you can use if you want to.

But like if you just focus on S3 or just focus on EC2 or you know, like two or three of the core services and get to know those, yeah, it's not any more complex than any other provider.

It's just that they've also got quick site and you know all these million AI offerings.

And do you need all of them?

Wenbin Fang

Not for now.

Will Vincent

So the front end, so you I mean you have, you know, for a single person startup, I mean you're now running uh APIs and using, I believe, React in the full bit.

Can you talk about that transition and at what point you switched over to the to using a dedicated front end?

Actually, at the very beginning, I started to use good for you.

Wenbin Fang

So so basically Django uh so so so I did uh both back end rendering and uh uh front end rendering for HTML.

Uh so basically Django uh ran the renders uh uh the the boilerplate for HTML and then React uh render uh components inside uh HTML page.

Will Vincent

Right.

But so that first weak prototype you also uh hooked it up with React and Django Rest framework?

Yeah.

Yeah.

Wenbin Fang

Yeah yeah, yeah.

Will Vincent

That's awesome.

No, I'm just trying to think that's that's gonna um you know it's it's sort of uh something you can do when you have experienced listeners.

You can you can whip these things up, but I know that all those things sound like uh just because I get so many questions about all of that, it's um it it takes some practice.

But once you get to know other steps, right, you're sort of duplicating your own steps, right?

For I'll just do my this is how I hook in React.

Um yeah.

For for React, you're

Wenbin Fang

saying for React, uh, for Django, for the whole project setup.

Will Vincent

Where what did you use Cookie Cutter or which which one are you referring to?

Wenbin Fang

I don't remember I used uh some um I don't remember exactly.

But uh I said that is a now nowadays you can find a lot of such tools if you want to get started uh quickly.

Will Vincent

Yeah.

Well I always wonder how how good they are and how much you understand them, because I mean you can use them, but then if you don't know what's going on.

Wenbin Fang

Yeah, one one downside using such tools is you don't you don't go very deep into uh the mechanisms of the all these things.

Carlton Gibson

Yeah.

But again, it's that it's that first prototype versus you know what you end up with eight two years later.

Will Vincent

Right, yeah, yeah, yeah.

Well, and uh and just in terms of Django frameworks, um, Cookie Cutter is probably the top one by far.

I mean, I have my own one, Django X, that's simpler by design.

Um, but I'm always curious if there's others out there I'm not aware of because it's there's and actually a Django X, uh so my own one is at this middle ground where it's basically just basic site with templates and authentication and custom user model.

Um but I could make it how I start my projects now, which would be a lot more complex.

It would make sort of become cookie cutter, but I feel like that would make it less relevant to beginners who just want something up and going.

So there is sort of this tension um you know between yeah, simple and then what you would actually use.

Uh you know, because cookie cutter is fantastic, but it's it's um you need to know what you're doing to use it.

Um now something near and dear to Carlton's heart.

So the API, can you talk about managing the performance on the API and any sort of steps you've made along the way uh to serve all the data that you do?

Wenbin Fang

All right.

Will Vincent

If you recall.

Wenbin Fang

Yeah, and I'm sorry, I'm going back to my to to the to the memory about how I started API.

So, okay, so as I said, I started uh listen notes uh as a side project, and then I worked on it full-time starting uh in September 2017.

And then after I ran this website for a couple of months or so, I got some requests from developers asking if I provide APIs.

And so that was the end of 2017.

I was not sure whether API can be a viable business or whether it deserves my time.

Right.

Wenbin Fang

So I try to build a quick prototype, quick and dirty prototype, but I also want to be able to charge people for using API.

So uh I did some Googling, I found an API marketplace called uh Marsh Ape, M-A-S-H-A-P-P-E.

Yeah, it doesn't exist anymore.

It was acquired by a startup by RAPI uh called Rapid API.

So they rebranded this thing as Rapid API right now.

It still exists with a different name.

Okay.

So I found this API marketplace, Marsh Ape.

Uh it basically it handles the payment, it handles API analytics, it measures how many API requests uh user uh API users use during the building cycle.

So they can do the do the building calculation and handle some educations.

Or if a developer subscribes to your API plan and unsubscribe and then subscribe again.

Will Vincent

Yeah, no, that's fantastic.

Wenbin Fang

I didn't want to deal with these things.

Okay, so good.

They handle all these things.

So basically, what I needed to do was to provide a few API endpoints, and I hook up with their service.

Okay, sounds easy.

So I spent about two hours uh using Django waste framework, uh, building three endpoints, API endpoints.

One for search, one for fetching podcast metadata by ID, one for fetching episode metadata by ID.

That's it.

So I think these are the minimum requirement for building a podcast app if you want to use my API.

Okay, so after two hours, I had the API business running, and people slowly sign up, but I didn't touch the API uh for about one year.

You know, API business has a long cycle.

Today, someone discovered this and not API good.

They sign up.

Wenbin Fang

They spend six months building their app, they spend another six months marketing.

Will Vincent

Right.

Wenbin Fang

Maybe another six months to gain some traction, and then uh two uh two years later I start to collect money.

So API is slow.

Uh I so yeah, I didn't I didn't put some any effort on API for about one year.

So the end of 2018, well, I saw some uh serious usage of API.

So tens of apps signed up by the point and some paid users.

So I decided to uh to replace the API for the API gateway stuff.

So I I wanted to build my own uh pay-ban, my own uh API analytics stuff.

So they will be API V2.

So I built this whole thing uh in the beginning of this year when it's running now.

How long did

Will Vincent

I mean that that sounds like a lot of work?

Was that

three months?

Wenbin Fang

Three months.

Three months.

Yes.

Carlton Gibson

So that's a big commitment.

Wenbin Fang

So basically I pre for building things, uh making uh incremental changes, small incremental changes.

So three binds for me is a huge project.

Uh it's unusual.

Will Vincent

Yeah.

Well, I like

but I had to get it done.

Will Vincent

Yeah, I mean, I think that's a brilliant philosophy though, to to use an off-the-shelf tool, um, confirm that there's market validation before you spend the time because um, you know, that's the curse of engineers, is it's fun to build your own everything, but it's usually not the best use of time unless it's a proven need.

Right.

Um wow.

Man, I'm so impressed by that.

So so the business itself now, so how does um in broad strokes?

So you have the API that you charge for, you have ads on the site itself.

Uh, how do you think about the business kind of where now and where you want it to be long term?

Wenbin Fang

So so right now is kind of sustainable now for uh one person business.

Uh I'm doing fine.

Uh it's not going out of business any sooner.

So uh but uh yeah, I'm I start to see in uh big picture on what's the long term.

So basically, I uh so this I I want listen notes to make podcasts uh accessible in general.

So then let me explain a bit.

So how many people in the world right now?

Probably 8 billion, close to 8 billion.

How many people listen to podcasts today?

Uh less than 100 million, maybe less than 50 million.

So there's still a lot of room to grow for podcasts or spoken audio in general.

So we human beings uh get information through eyes and through ears.

Yeah.

Most big companies nowadays are basically focused on screen time.

Yeah.

Getting information through eyes.

But uh I think audio has uh huge potential uh in in in the in the future.

You know, some uh some companies like Apple are making AirPods, uh uh Amazon, they're making uh ACO, these are all uh voice first products.

Um yeah, my instinct talking is uh audio could be something.

Yeah.

So if you can you can help people find audio content, maybe you will be a good business.

Yeah.

And let's come back to listen.

How can listen notes help podcasts become accessible?

So we don't so at this point we don't build apps.

We don't we don't build our our own contents.

It's a it's a website.

Website is easy for people to discover, to share, right?

And especially for international users.

And also we provide APIs so developers can quickly build podcast-related services using the API.

They don't need to worry about the backend.

And this can somehow help the innovation uh in the application space for podcasts, making podcasts more accessible.

Yeah, this is why I think.

Will Vincent

And do you I mean speaking of international, um do you use uh any of the international tools within Django to I mean, I see it in English, but are you which do you have other languages that you have support for?

Wenbin Fang

Yes, we support more than 20 languages.

If you go to website, you scroll down to a button, you see that you can switch to different languages.

Will Vincent

Oh my goodness, yeah.

And are you using the built-in the built-in Django tools for this or what do you Yes,

Wenbin Fang

yes, yes, I use the built-in Django uh I18N stuff.

It's very good.

I'm very satisfied with uh with Django for for this.

So basically I generate a bunch of uh Django.

Uh and then I outsource for translators to translate into different languages.

Yep, very easy.

Carlton Gibson

And is it do you use a so do you use a service for that?

Because there are I know there are services that offer the find your translators, or do you do you have to um have a relationship with indiv individual translators?

Wenbin Fang

Uh I use a service, uh I've got a name.

It's called Trantifacts, it is like a service.

Uh I I I can send you the link for the show notes.

Carlton Gibson

Okay, we'll put it in the show notes.

I mean it's interesting because lots of people have.

Wenbin Fang

So basically the service provides a translation uh editor.

So you can you you you you can see the English and the translated text uh side by side, and it's easy to translate.

And they also um have has have partnership with some translation agencies, so you can directly pay those agencies on the service.

But for certain languages, that's uh I cannot find translators layer, so I need to uh post on upwork to find individual translators.

Yeah.

Will Vincent

Well, congratulations on all those languages.

I mean, I was when I was in San Francisco, I worked at a company called Quizlet and I worked a lot on the uh translation, which was um literally we would get, you know, a a Chinese teacher in San Francisco to translate the site.

It you know, it was very we found a couple users and then we scaled up from there, and um, it's it's no easy thing.

So it's impressive that you have all these languages.

And it takes uh yeah, the the maintenance, right?

I mean that's sort of the I mean, like for example, I was reading through like I think I I caught a typo in one of your pages.

I forget if but you know if that were a word that would be something then in every language next time you run through you have to translate.

Wenbin Fang

Certainly certainly yeah yeah it's a far from perfect.

Yeah so but still it's nice it's still nice for it to see a site in your own language obviously I mean I'm certainly guilty of assuming everything's in English so um

Wenbin Fang

wow yeah I'm I'm I'm I'm very every I'm very happy to see international users using using uh listen notes and yeah

Carlton Gibson

one thing I did want to ask is um you know what versions are you using?

Are you up to date?

Are you on Python 3.7 3.8 this week are you are you on Django uh 2.2

so I'm using Django 2.1 and Python 3.6 3.6 point eight okay so with strings yeah I started this announce in early 2017 so back then the latest version was nine point uh 1.9 I believe I updated twice along the way 1.9 to 2.0 and 2.0 to 2.1 for

Django and how have you how have you found that process?

Did you was it easy did you hit

Wenbin Fang

so uh I basically um allocate a a couple of days every few months to upgrade major software components in the whole test stack.

So uh primarily uh Ubuntu Django Postgres elastic search I like to keep the uh keep using almost the latest version not the latest one maybe second to the latest one yeah yeah

Carlton Gibson

okay and um uh it's a do you I always say it's a bit like make um you know you it's servicing your car it's doing the work to keep your car running you know you've got to change the oil check the tires

Wenbin Fang

maintenance uh is important it's not always uh build building sh

ining uh new features you need to invest time to maintain this whole thing uh yeah for each upgrade basically I would uh change so so basically I use Ansible to do the server provisioning I version control the Ansible configuration files for each upgrade I bump the version number in Ansible configuration files and I will test on my local dev inside uh Vagor and the virtual box yeah yeah and then I test on this is right staging and

if things go well okay I launch new production instances change the loads load balancer uh setting pointing to new servers and I will keep the old instance running for a couple of days and then terminate them.

Yeah pretty standard process

Carlton Gibson

yeah yeah yeah yeah no but like done well and done professionally and that's that's exactly the way it is I like how you're building it in Vagrant first and then putting it to staging and then into production that's just sweet.

Well I was gonna ask how do you handle um like when you need to do a database migration perhaps changes the structure of the data and then you want to migrate it from staging to production.

So you're gonna add a new field or how how would you how would you handle a more complicated migration

Wenbin Fang

like schema migration, adding new code, adding index well

Carlton Gibson

yeah where you need where perhaps you need the old version to work back and how do you handle the or what if what if I if I need to roll back how do you uh how do you how was what's your strategy then?

Wenbin Fang

Well it's a very broad topic because there I I basically have keep keep some norms about about database operations.

What happened if I I need to add a new column to a big table what happened if I need to add uh index to a big table something like that.

So most the Django uh my migration uh is is enough for for for migrating the the schemas uh but sometimes I need to modify the migrant script to put in some raw SQL

Carlton Gibson

yeah yeah run run SQL operation

Wenbin Fang

concurrent index something like that

Will Vincent

yeah well I also I want to just in terms of forming a business I think the fact that you've been around only two years I mean looking at your list

I mean you're you use stripe atlas to incorporate I mean you must have been one of the very first users for that right I think that probably I mean so did you consider you know a C Corp versus an LLC I mean because if you're so you know obviously C Corp is easier to bring on new people but a little

Wenbin Fang

we are C Corp we are C Corp.

Yeah because we're because uh strip ethyls only supported C Corp back then maybe they are supported maybe they support LLC right now but back then it's only C Corp.

Will Vincent

Right.

Well right because there's some I mean it it depends on the business but there's can be some tax advantages to an LLC but if you want to have any employees or sell yourself you have to be a C Corp.

At Quizlet we were an LLC for a long time at and then we were a top 100 website and still an LLC so that was interesting working with the CEO on that transition.

But it's easier to go from an LLC to a C Corp than back.

But and I see also I mean so BREX charge card um people outside of San Francisco may not know what that is but that sounds also like a a smart hack for a small business can you explain what what that is

Wenbin Fang

well if you live in San Francisco you'll see BREX um B O S everywhere.

Yeah uh yeah so I I I had uh I I have the BREX cards um because they they also give me 5,000 AWS credit on top of whatever credit I get.

Will Vincent

Right we'll be clear because I mean uh you know Stripe now is offering business loans and I assume I don't think they have a credit card but I'm sure they'll that's coming.

It's it yeah it's it's interesting because it makes sense if you're stripe that you you have more financial debt data than you'd ever want.

Yep.

Will Vincent

And um yeah and you know running these businesses right I mean I mean makes me think I mean I I have my own book publishing business um and I you know I just have a simple Bank of America credit card and I have to spend thousands of dollars on stuff and um you know I could use yeah maybe I should rethink this.

But maybe I guess that's an advantage being in San Francisco you're uh surrounded by these best practices or well you're surrounded by these good offers I should say right for all the needs

Wenbin Fang

I don't know whether it's best practice that's based what other people are doing right here.

Will Vincent

Yeah interesting

Carlton Gibson

from a from an ops point of view I always hear this uh sort of idea that your credit card is a single point of failure because you've got your load balancer you've got your multiple servers but if your credit card gets

Will Vincent

two servers go down you can have two.

Wenbin Fang

Yeah I I have multiple credit cards actually when I started uh listen notes uh I posted a question on uh Hacker News asking uh what credit cards do people use something like that.

Because I I found that on the internet you can find a lot of very high level uh startup advice or you need to go to product market fee you you you need to do this do that they are very high level very abstract in terms of concrete advice is okay where do you get an office where do you get a credit card where so which bank is is is better for small business something like that it's very hard to find answers.

Will Vincent

Yeah you sort of have to ask someone you trust who's already done it.

Yeah um yeah well I mean that I that's something that um I mean so you've been doing this over two years.

I mean for me last year so I've been now doing books and teaching full time and I probably had to spend two or three months just on my business setup last fall which was deeply frustrating but you know many of these things you list here, you know, setting up my bank accounts, you know, credit cards, all this stuff is uh just you know you

Wenbin Fang

need to do bookkeeping.

Will Vincent

Yeah bookkeeping I mean you know I I think like you using QuickBooks but then um you know so it's a it's a it's a good problem to have but it it does often feel like you do kind of everything but coding or everything but your business just to keep it going.

So I wonder you know for you now I I was gonna ask you do you feel like you have things sufficiently automated now that you've invested in all these tools or is it still

Wenbin Fang

no no so actually actually um running a an internet business uh coding engineering is just a very small part of it most of the things you do uh is uh it's not engineering it's not coding so engineering is is is

deterministic right nowadays it's 2019 now if you want to build something build website build an app you can build it you can build yourself or you can outsource to hire contractors to build it but business is very non-deterministic there's no guarantee that you follow certain playbooks, you can make money.

Uh and marketing is hard.

I'm still figuring how to do marketing yeah so yeah yeah.

So I spend and and and a lot of there are a lot of many operational tasks you need to do.

For example, every day I spend one third of my time just replying to emails.

Will Vincent

Well, you know, I was complaining to Carlton about this earlier this morning.

I mean it's like how do you yeah it's like you need to have the information and you want to engage with your users, but you you know, it's like what did I do today?

Will Vincent

I just looked at I just responded to email.

It's it's it's uh

Wenbin Fang

to be frank, I'm I I quite enjoy the process of replying emails to to users.

Uh yeah.

That's good.

Will Vincent

Well, good.

So what's what's the positive take on it?

Because you learned something from it or it's because it's personalized, like

yeah, sure.

Wenbin Fang

Yeah, yeah.

Well, uh, I I feel like I'm opening a small restaurant and I know all my customers.

Well, they they can talk to me very easily.

So if you go to website, go to listen notes, you can see my email address is on every page at a button.

So anyone can reach me, they get answered from me directly.

And typically they get they get a reply in a few minutes.

I reply email very fast.

Uh yeah.

Carlton Gibson

That that's the kind of thing that really builds a business, right?

That really because they they have a connection with you.

And that you can offer a service which no way some giant competitor can be.

Wenbin Fang

Personally, I I feel very frustrated to deal with faceliest companies.

Yeah.

Wenbin Fang

Because I use a lot of um third-party services, as you can see.

Uh if uh something, something, something goes wrong, I need to find a context.

Yeah, it's typically buried very deep.

And you when you send email to them, you get a ticket.

Yeah.

Oh, the the they assign a ticket to you and you reference to this ticket number.

Then one week later you get a response from them.

Uh it's very frustrating.

Will Vincent

Yeah, no, I mean that's right.

And then when something goes wrong or a competitor shows up, you don't feel any loyalty because it there's no person on the other end of the line.

And I guess too, your service, um, it's it, you know, once you have a customer, they're probably gonna stay or grow, which is nice.

I mean, uh

I hope so.

Wenbin Fang

Yeah, but

Will Vincent

I mean it's not it's not a purely transactional thing.

You know, it's not you're not selling you know a book where someone buys it and then they leave almost for forever.

Um so you yeah.

No, that's great.

I mean, that's the kind of things that um it's hard to, you know, as engineers, it's lots it's hard to quantify the value of responding to emails and engaging with people, but it it I think it has all these incredible benefits.

Um I mean, because I'm constantly being advised by some of my business friends who I, you know, say I spend a lot of time on email, they're like, what are you doing?

You know, hire someone else to do it for you.

Um and maybe there's some truth, but I think it's it keeps you in touch with your your your users.

Exactly.

Wenbin Fang

I I don't want to outsource uh this uh customer support too early to someone else.

I want to do it in person.

Yeah.

And so in terms of other operational tasks, um, I built a bunch of internal tools connecting to Slack.

So I'm using Slack.

Uh I don't talk to human beings on Slack.

But uh on Slack, I get notifications when some events happen.

Like some podcasters that want to delete their podcast from our database.

Okay, I get I get an alert and I can do everything on Slack.

I can run commands and the podcast is deleted.

I can look up a particular podcast.

And when new podcast is submitted to listen notes, I get notifications from Slack.

I can see the basic information for the podcast, the podcast images, the podcast title, uh the sample audio, so I can get a sense whether this is a legal podcast and I can approve right there.

So if I am on I'm on a go, I am on vacation or something like that, I can do work on my phone because I I can use a Slack.

Will Vincent

I was just gonna ask how you how you do boundaries, because you know, I mean all three of us to a degree do our run single-person companies, and that is always the problem is you you never really turn off.

But it sounds like you've automated Slack so you you can relax because you don't have to worry about it, I guess, as much.

But you're still getting

notifications, right?

Wenbin Fang

Uh yeah, I I still need to uh use a human judgment for certain things.

Someone wants to delete their polar cost.

Uh well, I need to make sure this is the legit uh uh person.

It's not it's not a random person on the on the internet who wants to delete Joe Logan's polar cast.

Well, I cannot do that.

So yeah, yeah.

Carlton Gibson

Yeah.

I like how you've used Slack for that.

It's it's kind of like a bash shell but uses more memory.

Yes.

Will Vincent

Well, and uh I mean, because I sort of pride myself on not using Slack for anything, um, but I guess if you're used to it, but this actually sounds like maybe a good use case, and you know you probably had used it at your startups before.

So well

Carlton Gibson

the problem the problem with Slack is that there's other people.

Will Vincent

Well exactly, right.

Wenbin Fang

I'm the only human being on my Slack channel.

Will Vincent

Right, right.

Wenbin Fang

So I'm good.

Will Vincent

That's kind of that's kind of deep.

I like that.

Will Vincent

Yeah.

Um are there any any last things you want to um mention or talk about um before we before we wrap up?

I mean I'm so impressed by what you've built single-handedly here.

Wenbin Fang

Thank you.

Yeah.

Wenbin Fang

Uh if you haven't listened to podcasts yet, listen to Polarcast.

Uh I nowadays I get more information from Polarcast than from other uh media format.

I I put on my ALPs all day long.

I listen to Polarcast all day long.

Uh so on listen notes, uh I uh I have the playlist feature.

So you can curate episodes to playlist.

You don't need to subscribe to podcasts, you can just add individual episodes to playlists.

So I have a master playlist with 2500 episodes in the over the past two years.

So uh I listened to a lot of podcasts.

You can subscribe to my to my playlist if you want.

Will Vincent

Uh oh, fantastic.

Yeah.

Uh Carlton, anything you wanted to add?

Carlton Gibson

No, that's super.

I just uh you know what a super chat.

I mean, it's lovely to go talk with you, to go through your stack, how you're running it, and you know, really nice and realistic and ground, and it's just you and you've got you're able to run such actually quite a big installation single-handedly.

That's thank you.

Wenbin Fang

Thank you.

Will Vincent

Perfect.

It's just you, so you remember these steps because sometimes we interview people at bigger companies and they weren't around or they didn't decide, so they can't speak to that process of you know, from prototype to uh to scale.

Wenbin Fang

Um I think that's a that's another advantage of me doing custom support.

When people ask a question, I can explain why I build this, what's the history of this particular feature, why I've made this decision, what are some educations that we don't handle right now, but they will be built in two months, something like that.

Will Vincent

Right.

Well, maybe as a last question, so what what what should uh people look forward to?

What are some new products or features that are coming on listen notes in the future?

Uh that you want to talk about.

Wenbin Fang

So most of the time uh I don't build new new features, like big new features.

Most of the time it's just to uh uh iterate on existing features, adding new stuff.

Uh it's quite boring in some people's eyes.

Let me give you one example.

Like a search engine must have some uh filters, search filters.

When you search, you may want to fine-tune the search results, right?

Okay, how many search filters does Google have?

You go to Google's advanced search page, you can see a lot.

Let's say there are 50 different filters, right?

How many filters does this not have today?

Maybe seven.

Okay, 43 to go.

So basically, I so that today I build a new search filter.

Two weeks later I build another one.

Well, this kind of thing don't need don't don't move the needle much, right?

It's not it's not like I build a filter and then the web chair feet double.

It's not like this.

But uh it's it's a it's a process, it's a long process.

You keep improving the service incrementally.

Um yeah, making your user happy and making it useful.

Yeah.

Yeah.

Carlton Gibson

Well, the key point is you want people to come back.

They want you, you want people to keep using it and then tell their friends, and those incremental improvements are what's gonna make them stay and recommend you.

Right, right.

Yeah, yep.

Will Vincent

Super.

Fantastic.

Thank you so much for taking the time today.

Um, we're gonna have show notes for all the things we talked about, especially the article you wrote, um, which is really a fantastic run through of a one person startup.

So thank you again.

Wenbin Fang

Thank you.

It's nice talking to you guys.

Carlton Gibson

Thanks for coming on the show.

Okay, all right,

Will Vincent

I'll be good.

Bye.

Carlton Gibson

Thank you.

Bye bye.