Hacker News new | past | comments | ask | show | jobs | submit | page 2 login
The boring technology behind a one-person Internet company (2018) (listennotes.com)
2010 points by mxschumacher on Sept 16, 2019 | hide | past | favorite | 451 comments



I'm a one-person company too ( geocode.xyz ). My tech stack is even more boring than that. (Nginx, MariaDB, Perl on AWS Ec2 Linux instances. I don't have an office either.


This is completely off-topic, but thank you for running geocode.xyz! I'm a very satisfied user :)


Is your site down?



Picking your stack/architecture based on team size is something most engineers miss.

Microservices, great for companies with many teams. Not so much when it's three people scrambling to create something meaningful. Monolith all the way.


It's funny because microservices are explicitly targeted at solving problems for development with many teams, and lots of single team companies cargo cult them. Did they miss the first paragraph when they were reading up on what microservices are?


They also solve some other problems:

- different SLA and scaling requirements per component/endpoint

- different security domains per component/endpoint

- different rollout strategies/policies per component/endpoint (no need to restart your long-lived client TCP sessions in parallel to rolling out a business logic fix)

- ...

I've been happily developing and deploying microservices for small customers, in teams of 1 to 10 people. But I also don't work with customers who just need simple CRUD apps.


Everything depends on context, but I don't think microservices are the best solution. I think in nearly every case there is an easier way to address those problems.


Who says only multiple teams need microservices, and who put them in charge of what people find helpful?

If the 'app' has enough different 'bits' I'd favour a SOA no matter the team size.

Somebody now wants to say that isolation doesn't necessitate distinct services; they're probably right, but the alternative is great discipline - why not make it easy?

It's a form of defensive programming isn't it? - if widget factory shouldn't be using a function from auth helpers, make it impossible!


There are better ways to solve that problem. Different packages, visibility modifiers, using interfaces between modules, etc. Taking a little time to iron out a disciplined process for your team is so much better than using tcp/ip as your process and all the problems that brings.

If you can't trust your team to follow a process correctly, you're fucked in a way microservices can't save you from.


Whoa -- is that a boring stack nowadays? There are many great cutting edge tools in use. Humble fella.


My thought exactly. I was expecting good ol'LAMP or something along these lines. I think here "boring" means "has been released for more than a couple of years".


Is this seriously considered as being a boring stack nowadays?


Yea I feel like an actual boring stack would be LAMP w/ JQuery & bootstrap on some hosting provider (and the blog would be written on wordpress).

The stack described in the OP is a fairly modern stack...


Thanks, for all of your comments so far on this site. I don't know what you do specifically but what I can glean from them is inspiring to say the least... even the secrets you keep reinforce what I feel is the right way to act.

Just wanted to say it.


was honestly expecting a stack along the line of yours - the one in the article is actually fairly complex and not-boring.


my exact sentiments lol


How big is your team? Mind disclosing what the SaaS is? I'd love to learn more.


I'm the only dev


Would love to pick your brain about how you grew and scaled up as a 1 man team, email me? mark@gun.eco


okay


A simple no would have sufficed


What SaaS do you run?


I run multiple SASSes for clients for myself and clients on far more "boring" stacks than this. One of them still has significant bits of VB.Net!

This post seems like a sea of trendy buzzwords to me. Maybe he thinks it's not trendy because it's not docker/serverless, but to me that stack is mainly a load of fads. React/Redux/Webpack are "standard", damn, 4 years ago you could have replaced that with a plethora of alternatives, as you probably will be able to in 4 years time.


That's not boring - it's a professional dev techstack.

Boring tech would be a million dollar business running on Wordpress.


There is plenty of those, they just don't have anyone tech-savvy enough to be on hacker news.


Every big company has interesting engineering stories. But i think sure HN woulndt upvote tales from Automattic


For sure, but the comment was about million dollar business which depending upon geography would be classified as either micro or small.

https://en.wikipedia.org/wiki/Small_and_medium-sized_enterpr...


Have you ever heard the story of Darth Wordpressius?

I thought not. It's not a story the HN Council would upvote.


TBH, this is more inspiring than I thought. I thought this would be some BS article about promoting your company but turns out, it was a fun and inspiring read.

My dream is to find a good idea and work solo. It is a little harder as a mobile engineer but you're right as you mention in the blog. There are technology nowadays that help me with backend/dev tools.

Cheers.


This looks like a great service; I just signed up for it and created my own listen later playlist. I spend 6-8h a week on my mountain bike and I use most of that time to listen to podcasts. The challenge with how I do it (using just an Apple Watch) is curating my feed. This is an excellent tool and a far better UI for curating a feed.

I also like the different and varied sources of income that you have, from the transcription service to ads to your API. Seems like you've built a great platform that you can use to experiment with different revenue models.

One additional question - your product is called Listen NOTES. Are you planning on adding note taking functionality to it at some point? One thing that I've always wanted to do was to jot down some set of notes to myself (typically during one of my bike rides). I always imagined that being some kind of voice activated thing, but I'd like that note sync'd to the spot within the podcast that I was listening to (and perhaps transcribed as well). Any thoughts about building something like this?

Thanks again for building this service!


You could use Airpods + Siri + Notes.app for that.


> Wait, how about Docker / Kubernetes / serverless? Nope. As you gain experience, you know when not to over-engineer. I actually did some early Docker work for my previous employer back in 2014, which was good for a mid-sized billion-dollar startup but may be overkill for a one-person tiny startup.

I really think the key thing here is familiarity. K8s is a bit different, but certainly in OP's position I (personally!) would be more comfortable with an image for each component. Perhaps a machine image rather than docker, if each component is going to be on its own machine as described, but something at least semi-reproducible for sure.

When I'm working on something alone, and particularly if on and off and not for several hours every day I need to be able to come back to it in a sort of self-documented state that doesn't leave me scared to touch anything lest it crumble.


Using containers without k8s is much much simpler if you need a container.

Learning system packaging and how to rebuild src packages is much much simpler than managing a container ecosystem

Think about this... if it was so easy to manage containers why does redhat still ship its operating system in packages ?


I think that one of the hidden points in there is that you do not really need a container to deploy python wsgi application, you need an venv and few system packages. Doing that by means of ansible playbook or even manually preinstalled system image that you just clone and then just only use Python packaging mechanisms is even somewhat simpler and faster than building container that works (ie. take a VM, poke into it until it works and then just clone it, deployment of your application is decoupled from the underlying OS)


There's nothing wrong with the concept of containerization and you can use it without much additional headache.

Of course it's not for everyone but outright saying it's a waste of time hasn't spent much time with the ecosystem to know how easy it's become latey.


Yes, we're in agreement, I'm not saying it's a waste of time, I'm saying I'd be wasting time and fearful of touching anything without it!


A super interesting and refreshing read, especially since I am not very knowledgeable about web technology and most of the talk these days is about the latest fancy framework or database.

I am curious though, since I am using Google Cloud (App Engine in particular) for most of my company's modest backend needs: Would Google AE be able to handle all these backend requirements as well (but obviously without all the configuration and setup required)? Or asked another way: When is the point when you should move away from something easy and low-hassle such as GAE to something more advanced that requires a bit more manual configuration like setting up your own AWS servers?

Not trying to be critical, just honestly trying to learn from folks that know better than I.


The main idea of this article is to use what you already know and just get it done, rather than experimenting with new tools. The author already knew how to use most of these tools from a previous job. He stuck with the technology that he already knew, so that he could focus more on business aspects rather than new technology.

In that spirit, you should use the App Engine that you already know for as long as it seems to be working well for you. When you run into a problem that can't be solved in App Engine, that is the time to ask for advice on how to solve your problem.


Also running a solo company - https://fitloop.co

I'm primarily a front-end dev so I keep things pretty simple on the back end side.

Stack:

  Meteor, managed hosting on Galaxy
  MongoDB, hosted on Compose
  React
  GraphQL / Apollo API


Nice! I've bookmarked it on https://www.saashub.com. You should verify it there :)


OK... that was quick!


;)


I use Lisntenotes API for my podcast app and Wenbin is an amazing dev to work with. Highly recommended.


Well, I'm super impressed. I wish I could do half of what this guy can do.

But he needs to be careful not to overdo it. It's fun and exciting to get all this tech up and running. But at some point, it becomes a drudge. And burnout is right around the corner.

I would say that if he can farm out as much as possible and focus on marketing and sales which are the drivers for most company's continued success. In a sense, he has by using the cloud but what he's doing is way too much for one person.

I used to be a laid back kind of guy and would get irritated when I was hurried and clearly there was no impending death. But now I understand that the limit lies within us. At some point, we all give up. There are those that take a long time and there are those that give up relatively fast but giving up is part of the process. So we are in a hurry to get as much done before we decide to stop what has not been successful. By putting so much burden upon your self you make it so much more likely that you will give up before you find success.


>he's doing is way too much for one person

You have no clue what is "too much" for the author of this post.


Great writeup of the stack and process.

To all the people thinking “I couldn’t possibly do this myself” just look at the mention of UpWork towards the bottom. Looks like the author has brought in contractor help at some point.


This was really informative and delight to read. It's great to see developers making a go at the bizdev side and actually being really successful at it. Light on the heavy technical, light on the buzzwords, just the right amount of information to say, "here, if you even use half my stack you're well on the way to a viable product."


This is one of the most important post i’ve seen on HN so far.

it teaches you that you don’t need all the fancy stuffs, but you may need some of them. That you don’t have to shoot for the unicorn project, that you don’t have to build an A+ people team, etc.

It’s intelligent and gives all the interesting details to not give any kind of false impression.


Just because I saw you (wenbin) in this thread I thought I'd be helpful:

On https://www.listennotes.com/api/pricing/

There's a typo: "Instantly access to 771,769 podcasts"

Instantly -> Instant

Really enjoyed the post, thanks for sharing.


Also on that page..."No need credit card" should read "No credit card needed"


That's not a typo. They are two different sentences with slightly different meaning.

Access as a noun or access as a verb.


"Instantly access 771,769 podcasts" -> access as a verb, not a typo

"Instant access to 771,769 podcasts" -> access as a noun, not a typo

"Instantly access to 771,769 podcasts" -> access as a confusion, definitely a typo


Out of curiosity and please forgive me as I'm leaning ESL, but shouldn't it be either

"Instant access to x podcasts"

or

"Instantly access x podcasts"?


I agree. If "access" is a verb, the "to" is superfluous and awkward.


Ah sorry I read over that lol


That's correct.


Was interesting to read all the sort of "boring" back end pieces, then see that he went with half-server and half-client rendered React for the front end. Was expecting Angular or similar, given the pattern of the other picks.


React is "boring" now, too. (And good for it.)


I really like the idea of monolithic repos but can see some downsides when there is more than one person working on a project. It would be cool if there was a simplified way to have an entire business operate under source control.


> It would be cool if there was a simplified way to have an entire business operate under source control.

A lot of projects can and do apply CI tooling to achieve this. Every commit to a branch triggers a set of declarative deployment pipelines, simple. IIRC buzzword is "GitOps" if you want to find out more.


This interests me. Can you elaborate on what downsides you see? Even in a small team we're often working within the same repo at the same time without any issues.


The glaring issue would be permissions ie who can see what. Pull requests could get muddied up but that probably wouldn't be too much of a problem to overcome. Some foundational git protocols would have to be adjusted, like .gitignore.

I think it's a great way for start up to manage the business but as more people get hired the organizational complexity might be too much to bear.


An insight I've had recently is that the most efficient way to implement architectural changes that are not additive is to rebuild. Otherwise you're trending inexorably towards the lava layer and accumulating tech debt that you cannot track.

A useful direction to unpack is to define architecture. You cannot re-architect a building after it has been built, you must only demolish or rebuild elsewhere. This is why all architecture changes must be additive in nature, otherwise you're pulling the foundation out from under the building.

Software should be modern pyramids.


key missing info though: does it make money? I checked the site and it looks like a mix of ads (that are blocked of course) and a patreon with 5 supporters.


I'm wenbin, the author of this blog post & I built Listen Notes. Thanks for bringing up this question :)

Yes, Listen Notes is making some money - not a lot, but enough to cover all the cost and bring in a bit profit as of today.

The basic idea is that Listen Notes should be free to 99% of users, while making some money from 1% of super users.

We run ads (obviously) on the website and we provide API: https://www.listennotes.com/api/pricing/ And I've been experimenting some paid features that are needed for PR/marketing/journalists to do their job, e.g., https://www.listennotes.com/datasets/

And today is special, because on Sep 16, 2017 (Exactly 2 years ago today), I started to work on Listen Notes full-time!


Cool! When you say "making some money," is that over-and-above paying yourself a salary?


What are the pros and cons of charging a fee to transcribe someone else's audio content? Does ListenNotes need a lawyer to deal with contracts or problems related to original content creators?


Looks like they're taking an approach to transcribe first and then deal with it later. The transcription link has an FAQ asking them to contact them if they think they dont want others to transcribe their episode.


When you started working on this full time was there enough profit to pay yourself anything? How did you come to make the decision to work full time on it?


Glad to know it now can support you as a full-time job.

Just curious, is your company still one-person?


He says that he uses Stripe to get money from his users, specifically noting the API as a source of income.

Here is the pricing page: https://www.listennotes.com/api/pricing/


And does it make enough money to cover the time when it wasn't making money? As in: was the time spent bootstrapping worthwhile? The concept of a one-person company is extremely appealing in its simplicity and apparent lack of risk; however, the devil is in the details.


I'm going to go out on a limb here and confidently say he's doing fine. As he mentioned, he rented an expensive one person WeWork office in SF (when he doesn't even have to).


Why would that indicate he is making money?


I think the assumption is that ListenNotes is his only source of income and that he isn't burning personal savings or the capital he has invested on non-mandatory expenses.

Granted those assumptions, you've got to get pretty far up Maslow's Hierarchy of Needs to hit "rent a WeWork"


Same question I had. Startup = Money generator, so it's important to ask.

Looks like it's an ad-driven revenue model, and it looks like it gets ~ 1m views/month: https://www.similarweb.com/website/listennotes.com

Assuming $1 per 1,000 impressions, we get $1,000 / month.

That's purely the website. I can't speculate on the API side of his business though.


Actually it's not the missing info... because it's none of your business. It's a technical post about his solo founder and operator DevOps practice.


I respectfully disagree. HN is very much about the -business- of tech. Telling us how you made your mousetrap is all well and good... Having us ask how many mice it has captured is absolutely relevant. Germane even.


I disagree. This isn't Tech Business News or Startup News, it's Hacker News.


Hacker News was originally called "Startup News". At launch it was exclusively about startups.

https://news.ycombinator.com/hackernews.html


But the name changed to reflect the broader focus. It's not just that anymore.


The subject has switched to business and management long ago


Wonderful stuff! I've been trying to learn programming and able to code the CRUD apps for almost 6-7 years. 

I've tried to learn Rails (Ditched learning Rails because JS framework are all the rage). Tried learning Flask/Django because it was considered easy. Ditched it too cause internet people said it's slow.

I tried learning Go, Phoenix and jumping between what's considered cool in last few years.

And here I am, no confidence to do a basic simple app. It's been an interesting journey with no luck because of constant chasing of 'Exciting' frameworks/Tools.


My advice would be to quit chasing exciting frameworks.

Pick something that has been around a while (Ruby on Rails, Python with Django, Java Spring) and go with it.

Focus on performance once it becomes a problem. In python, you can rewrite parts in C that need a speed improvement.

Otherwise, focus on making a great product that solves a problem for your users.


I agree with the general consensus pick one and stay with it for a few projects. If you can't pick one, just roll a die or anything. Maybe pick one a friend knows so you can collaborate in the future.

The differences between languages and frameworks won't matter very much unless you're joining a team with a preexisting stack or an edge case company/application that needs top-of-the-line everything.

Even if your app usage does scale beyond what your first version can deliver, you'll often get a bigger improvement by rewriting your app in the same stack using the new knowledge you've learned, than you would by rewriting the same logic in a newer stack.


I started along the same path as you. What i have been experiencing is Analysis Paralysis. Like the OP says, the trick is to commit to something that helps you from point A to Point B the fastest. And that for the time being atleast is RoR as is very opinionated and there are lots of humungous opensource, well maintained libraries floating around. And last but not the least, The Rails Tutorial actually bets you going to building something useful in no time. Good luck.!


Pick one framework – any is fine – and finish the (or a) minimal version of a basic simple app.

I'd suggest minimizing, or even ignoring, JavaScript. A really basic CRUD app doesn't need any.


I run a similar, maybe even more boring stack for my less-than-one-person company [PyDist](https://pydist.com):

- PostgreSQL database

- Nginx proxy in front of Django apps for UI and API servers (I use gunicorn instead of uWSGI though)

- Cron jobs which invoke django-admin commands to keep the PyPI mirror in sync

Perhaps the only place I'm any fancier than OP is that my deploy script is in Python, not shell, since any time I try to write a shell script with even slightly nontrivial logic it falls over and catches fire :)


What's your experience with gunicorn instead of uWSGI? I'm using haproxy + nginx + uWSGI but I'm wondering if gunicorn scales network more than uWSGI. My bottleneck isn't CPU, it's the amount of open connections uWSGI can handle at once.

Here's a trimmed down version of my web configs: https://wakatime.com/blog/23-how-to-scale-ssl-with-haproxy-a...


Thanks for writing this article @webin. I'm about to launch a new startup myself and it is VERY boring tech. :p I'm running Rails with Sidekiq on Heroku, so I think I have you beat in the boring department. I do a lot of fancier stuff at work but I just don't need it for this product (at least not yet).

I am the only engineer but two non-technical friends (a designer and a lawyer[0]) make up the rest of the company.

[0] the original idea was the lawyer's. :)


Hi, I am currently getting started with the Rails stack to. What's your FE stack look like?

thanks Ananth


Only question I can think of that I didn’t see an answer for is: is he running one postgres db, which is shared between the web and api services? Multiple services with only one db gets hairy fast with questions like: who owns the migrations? does the migration owning service have to restart the other service so the other service gets the new db column/table? etc

Unless the web also uses the API service to get its data. Really great article


Likely the web app uses the API to get its data, it hints at it when he says he uses the same APIs the customers do from his frontend.


Are there no load balancer replicas? It looks like a single point of failure for the entire service (and it runs Redis and RabbitMQ - yikes).


There's also 1 person who is the whole company, a single point of failure comes with the territory.


The author can just run an Ansible job and recreate it instantly. It's a stateless ec2 node. If they wanted to be super duper fancy they could make an autoscaling group to destroy and recreate it if it went down. No need for a replica. This probably isn't a lose-100K$-every-5-minutes-of-downtime business.


I am all for simplicity, but if that results in a service outage whenever you deploy new code, apply a security patch or reboot your VM, you need to rethink the architecture.


Why if a minute downtime on deployment doesn't impact revenue significantly ?

The frontend can even have some exponential cool down on requests when the backend is down and the users who are online in that one minute window will suffer just notice it being a bit slower.

He even mentioned his uptime in last years in the post.


Interesting, there seem to be lots of opinions about the chosen stack. But as a designer, I have no idea what to make of it.

Recently I rode the Figma API release hype train, and I made a plugin which is quite successful. Almost 10k active installs. It is basically a collection of the most popular viewports and their market share. I also have a server where I store the data. Every other day I run a script which updates the market share and that is about it. To summarize it:

- I have a client (react app written in typescript) which has a very simple "caching" mechanism (if you asked the server for new data more then a day ago, ask again) and which shows the data and nothing else. - And I have a server (express js) running on Heroku (where I also have the Postgres DB). The server has a basic REST API and very default admin interface. But most of the time the server is not doing anything.

It was something I was able to put together quite fast, but now reading all the comments I'm thinking whether it isn't over-engineered and whether I should go with serverless and possibly reduce the costs.


Your mileage may vary but there’s a real opportunity for the latest technologies to save you work and headache.

My own one-man startup Trunk[0] is very infrastructure heavy so I’m super thankful for technologies like Docker. You don’t have to go full-blown Kubernetes but there are various small wins you can still have. Need to upgrade a piece of your stack? Just build a new container a deploy it! Need to bring up all your services in development? `docker-compose up`! And with Docker Swarm, it’s super easy to scale up background job and application processes across multiple cloud instances. I can’t imagine doing this without Docker.

When getting a business off the ground, it’s extremely important you do customer development and not new technology development. When running a business however, new technology can become a competitive advantage and help you move faster. Just make sure it’s really doing that.

0. https://trunkinventory.com


These success stories always pain me a bit. I tried for some time to get my own project going based on personal interest, but it never went anywhere. I have people visit the site but retention and use is a problem. https://imetatroll.com

- golang, gopherjs, bootstrap, DO, and kubernetes.


I think this looks cool, and I feel your pain on the retention/use problem as I have also made a game that requires multiple people to use to create value.

I never found a way to promote it to groups of people instead of individuals. Even in a meetups/expo setting it's hard to get critical mass and momentum.


Security concerns are always conspicuously lacking from this type of posts and discussions. If you’re a solo dev looking to start a project, please don’t take OP’s stack as a positive example. Use managed services whenever possible, they will at least keep you patched and simplify intrusion detection when configured correctly.


Don't throw your money away for that reason. Keeping upto date is easier than ever.


Here's my boring technology.

I've built Libr (https://librapp.com), a full social networking platform designed to fill the void Tumblr left behind.

The hosting is serverless for both the front end assets and back end no servers to maintain and infinitely scalable.

Libr has a front end progressive web app built with VueJS hosted on S3 with CloudFlare in front.

The back end API is hosted on Lambda. By using serverless framework things are portable. I could easily migrate to another serverless provider or even host my own.

Both the front and back end use the same programming language, TypeScript.

The database is Elasticsearch, just like WordPress.com (they don't use MySQL for most things).

Each month, I receive a nice little invoice from AWS for under $1 for the hosting. So far CloudFlare is free for me.

I built everything by myself, with no team. I have had input from Libr users on feature requests and UI improvements.


Is you site down? I am unable to access it right now.


It's up. Unless S3/CloudFlare go down, it shouldn't go down


> Kaiser Permanente for health insurance.

Super important part. Any details about how much it costs for single person company? :-)


Sure. It's around $700/month for me + my wife.

I wish I could've known more practical info about starting a company before I quit my day job, e.g., how much for insurance, what company credit card to use, how to pay tax, where to find lawyers... Online articles / advices are mostly focused on big picture or very abstract concepts or fortune cookie type words :(


Could you perhaps write articles on these? I'd be super interested as someone looking to know more about starting a solo company.


Yes, will do.

Earlier this year I gave a talk to some college students, which has some more practice info about starting a small internet company:

https://broadcast.listennotes.com/good-enough-engineering-to...


It's pretty straight forward to get a quote, is it not?

https://individual-family.kaiserpermanente.org/healthinsuran...


yes, i'm very interested in how they did health insurance


At this point, I would add Docker (without Kubernetes) to the "boring" technologies that simplify your life. Having managed my own "server farm" of 20 machines on hetzner, with a very small startup, I found that abstracting away the underlying OS removed a lot of friction.


I've found the tradeoff is in favor of using ECS, Kubernetes or something similar. The docs aren't too bad now. It is great to be able to build/deploy a docker image and not worry about how it gets out there, and what might go wrong with that system.


> Basically, I have a wrapper script deploy.sh that is run on macOS:

I do the same thing on Linux.

build.sh, deploy.sh.

But, I also use a run.sh which runs tasks that I may not remember to run if I come back to software after a while on a certain machine.

Like 'git pull' or 'bundle install'. Then ./dev-setup.sh or whatever for starting up tasks.

I use multiple machines and having these two simple commands saves me so much frustration.

You sit down to began work. You just run ./run.sh and it will setup a dev instance for you. No sudden alerts that your gem is out of date... or worse... no warnings at all and hard to diagnose sudden bugs that steals half a day from you.


I have a .vimrc like this in some of my projects

set makeprg=./build.sh

set autowrite

I've found trying to figure out complicated build tools to mostly be a waste of time unless you really need them. It also encourages you to not do things that would require very costly builds.


the key for me is a backend-as-a-service platform that i can reuse over and over. i used to be mainly a backend developer, but for more than 5 years now i have barely touched the backend code because it was designed to be reusable.

i build SAP applications now because they make it easy to work with a reusable backend.

for the rest of my system, i use basic LXC containers. no docker, or other container management system.

deployment consists of setting up an instance of the backend, and generate the frontend as static files that can be hosted whereever.

saltstack to control it all. done.


This is almost the exact stack (Django/React/Postgres/Redis/Ubuntu/Ansible/...) I use at work, and I love it. It's a great stack.


I'm surprised no one has mentioned Heroku yet. I'm a one man business too, and 90% of the details in this post I don't even have to worry about. Sure I pay a pretty penny for it - at least a thousand a month - but it just works. Rails and all of its beauties, postgres, redis, sidekiq, sendgrid, twilio, Scout, Papertrail, and that's about it. Looking to add AppOptics soon for business KPI / APM metrics.


I'm impressed with the profit margins. It looks like one of the main sources of revenue is transcription. From what I can tell the price seems to be about $4/hr.

OP said they are AWS. If they're using Amazon Transcribe, the cost for that is $1.44/hr.

A 150%+ profit margin is awesome! Well for that one piece of the service. Obviously at least some of the cost of the website and database, etc must be included, but still. Pretty amazing.


The post mentions using Google speech-to-text for transcription which seems to be even cheaper?

I'm not sure where you got the $4/hr price, but indeed kudos to OP for building a business around reselling cloud services for profit.


I'm guessing the $4/hr price estimation is based on an average of the prices ListenNotes actually charges to transcribe a podcast, as shown on ListenNotes.com for various individual episodes.


Yep exactly. I randomly sampled some podcasts and looked at the cost vs how long they were.


Oh wow. This is scaringly close to how we run geocod.io - right down to the ansible provisioning wrapper that I put together :)

  > ./provision
  provision usage:
  ./provision environment role [hostname]

  This script will provision the given role in the specified environment using Ansible
  If a hostname is specified, provisioning will be limited to that specific server


I wouldn't call that boring, there's still a lot of new technology being used in that stack. I'd also recommend some minor improvements to the workflow (e.g. don't do development work on the master branch) that are easy to achieve and provide big benefits. Also - no mention of backups or DR-planning -- I'd be interested to know what's being used in this area?


As soon as he has a bigger team of developers, some of his technology choices might cause trouble. Especially not having a build server will cause chaos very quickly, because nobody will know, who has deployed when and what. A good deployment pipeline with a good test battery using a boring build server like Jenkins can help a lot here.


Okay that guy is just showing off, but rightfully, this is damn impressive. Even if some of that is offloaded to contractors, he still needs to understand most of it.

That's a proper full stack developer with a business mindset as well. Hope I'll improve my backend / devops skill to that level at some point.


This was the most inspiring piece of text I've read for a long while. Such clarity of thinking and focus.


Very inspiring article. And thanks for sharing a detailed tech stack write up. Very inspiring for me as I am also a single person running a tech news aggregator website but probably even more boring setup on AWS (php MySQL Apache and some python ) embit.ca , running it alone but never lonely.


The stack can be much boring, simple and easy to maintain. Golang helps a lot for that.

For example https://newreleases.io/

- Go with embedded databases for web services

- Vue.js for frontend

- Nginx just as there are other sites on the server

- Prometheus/Grafana for monitoring

- Gitea for code hosting and some automation

- Bind9 for DNS

- Debian


Well, on frontend he uses React/Redux/Webpack, which is more of trendy, latest/greatest. If he used Django templates + jQuery, that would have been staid/boring tech. Great post though, aspirational for those of us who wish to found their own startup one day.


I disagree. React has been out 6 years. It most definitely can prevent bugs which were common with the jQuery approach.


How did you get started doing this? Did you have a lot of money saved up and just decide to go for it for a certain length of time?

I've had an idea that I've been working on part-time but it really needs some full-time love. At what point do you decide to go for it full-time?


Wenbin, amazing article.

One question: what all do you use contractors for? How has your experience been in managing them?

Thanks


Some examples that I used help from contractors:

1. Built some reusable ReactJs components. 2. Design / illustrations 3. Proofread website copy / blog posts 4. Built experimental app like this one https://itunes.apple.com/us/app/just-listen-simple-podcast-a...

(probably there were other random things... I got to look at the billing history on my upwork :)


Great post - I'm running almost the same exact thing - Flask instead of Django, Saltstack instead of Ansible, rq instead of celery - supervisord, postgres, redis, ubuntu, nginx, aws (actually multicloud, BigQuery for data).

It's very good stuff!


I like your Ansible / deploy script / "no fancy CI tools" combo. This is exactly what I do too. Deploying is so painless and consistent.

To quote a line from an Elixir talk I recently watched: "it feels like cheating".


This is exactly the stakc I worked with when contracting for another startup/company. The degree of similarity is disturbing.

It mostly worked really well though, kudos to whoever figured it out. And you could mock a dev setup right in PyCharm.


Great article. Are you using DataDog Synthetics for the DataDog response time graph?


Very inspiring. As a coding newbie / wannabe entrepreneur, I will need some time to understand what each part of your technology does though. I will start using Listen Notes later today. Keep up the good work!


> It’s absolutely okay to use the boring technology and start something simple (even ugly), as long as you actually solve problems.

Thank you! Let us solve problems and not chase ultra competitive expertise for its own sake.


I'd love to know how you're running Django and React together. I've been trying to figure out how to make that combo work in a mono-repo, and I'm definitely missing something. Any advice?


I just watched 8 hours of Django videos yesterday, and 4 hours of that was a Django + React tutorial. It covers in great detail the CRU from a CRUD, but you'll need additional videos to cover deployment on elastic beanstalk or ec2+elb, etc. https://www.youtube.com/watch?v=AHhQRHE8IR8


Basically his tutorial was to put the react project inside the django project, and depending on which parts you're modifying and how your testing, he has a special static collection script that builds the react portion and copies the static files up into the Django parent project folders.


I'm also struggling a lot with django, react and the whole asset pipeline. On the other hand, frameworks like rails and laravel have it all figured out for you.


wenbin, do you find it meaningfully superior to get Slack notifications vs. just an email?

Also curious if you have a monitoring/recovery strategy for when you go camping or on honeymoon and need to be offline.


Listen Notes is a nice service. I don't quite understand how it works -- do podcasts pay to be included in search results? It's a nice thing for the listener, that is for sure.


As someone still in school, this type of article -- though inspiring-- kind of scares me, to be honest. I don't think I could do any one of the things mentioned in this article.


Hello poidos,

(I'm the author of this blog post)

I couldn't do all these things when I was in school :) I worked in companies for a few years and learned some engineering practices. Then I had basic skills to prototype my own side projects. Then after working on many silly side projects, I started Listen Notes.

And initially, Listen Notes was running on 3 tiny DigitalOcean servers ($5/month each?). I logged in each server to git pull to "deploy to production". Then I added things little by little, day by day. It's a process. The key is to get started. People say that showing up is 80% (or whatever percentage) of success. I think this is very true. Just get started and you'll figure out things along the way.


Thanks for the info. It's an interesting set of tools today, but it's helpful to hear that it has evolved to that point in terms of automation and infrastructure.

The first version of a web service can be as simple as flask app which you run in a screen session somewhere. Better to start somewhere than get overwhelmed and never do the thing at all.


Exactly what I'd like to tell younger devs and students. You build smaller projects on the side for a bit to familiarize yourself with things until you're ready to start something or something comes along by way of the side projects!


I appreciate the response!! It is wonderful to hear about the evolution of your process, thank you :)


From a mid-level dev, you’ll learn and I doubt you’ll need to know everything in this article and understand it for your first job.

Do you understand what the web, api, and DB servers are doing?

If your interested in Python and want to start small I can recommend Flask. Flask is smaller and could be more user friendly than Django.

Here’s a great tutorial. You’ll build a blog with Bootstrap, Python, Flask and SQLAlchemy.[1]

[1]https://www.youtube.com/playlist?list=PL-osiE80TeTs4UjLw5MM6...


Flask is easy, but it's actually better suited to seasoned programmers. Django's hand holding actually makes it a better framework for beginners.

https://wakatime.com/blog/14-pirates-use-flask-the-navy-uses...


Thanks Alan(?). I haven’t gone too far with Django. I can see what you’re saying about being seasoned. Flask clicked for me quickly but everything just made sense, ORM, Jinja, modules etc.


Thank you for the Flask tutorial. I tried getting into it but was having some trouble; the tutorial looks great!


As a senior dev: it will take years of experience and constant learning to get to this point, but it is attainable. You don't have to be a master of each part of the stack and each tech within it - you just need to be able to do enough, and solve the problems you face. You can build a professional SaaS product with a simpler stack as well.

You take a project like this one step at a time. Some bits of it are relatively easy - setting up a few postgres servers doesn't take much knowledge. ElasticSearch is a little more obscure, but for the most part, things like this are running a few commands, and setting up a few config files with the help of docs and google. Same for Redis, nginx... etc. Which isn't to diminish devops - you can dive deep into each of these configurations and develop pretty complex setups, but by the time you actually need to you hope to be making enough money to pay someone else to do it.

You won't get everything perfect all the time. You'll have to revisit parts of the stack and tweak them. But you can take it a day at a time and do what you need to do.


Try deploying a simple server (eg a dog API) on Heroku. Then back it with a database. Then add a web or mobile app. Then do it on AWS.


It seems wenbin is also the lead developer on ndkale, https://github.com/Nextdoor/ndkale/graphs/contributors so he would certainly be capable of using a more esoteric stack.

I wonder when developers are working for themselves / very early stage, if one automatically becomes more conservative? If someone else is paying for your time, it's nice to experiment and grow personally. When it's your own buck, the focus is on pragmatic shipping and getting revenue coming in.


When you do it for yourself you choose a quick prototyping language like php because you want to create a product.

When you work for someone and they pay you to learn something hot why not take the opportunity as it will help with the resume.

As a small business no one pays you to learn.


Sad to hear that PyCharm is considered old school these days.


@wenbin - What would also be helpful is a P&L report on all of these expenses - as that will also tell us a great story.. and it would make a nice Part Deux ;-)


People who upvoted this, what made you up vote it? It's much more popular than I would've guessed when I first saw it on the homepage


Very cool, I'm impressed. This guy knows how to do all the stuff I don't know how to do and it actually works well.


I bumped into listennotes about 6 months ago, because I was looking to solve the same problem of discovering podcasts.


That's not boring. That's sane.


Thats a ton of servers!

What is your monthly AWS spend?


This is awesome.

Does the Google speech-to-text API work well for your needs? How often do you use it?


Having experience in both realms, it seems kind of interesting that Docker is considered overengineering while React + Redux + Webpack + ES is considered natural and simple. I guess 50% of "overengineering" is really just "I'm not familiar or comfortable with ths".


I listened to an interview with DHH the other day and he was calling out that one of the advantages of frameworks over libraries is that everything comes wired up ready for production instead of you spending all your time writing glue code and arguing about conventions.

I'm still not exactly certain where I fall on this topic. What I do know is that I don't like frameworks that conceal the plumbing and leave you with declarative bits that require memorization. Lack of discoverability is a huge barrier to mastery. The best code invites you to determine why something is happening.

What I've been thinking about lately that this article drew out for me again was that it's a shame that so many tools and libraries come not ready for production by default.

It would be nice to have some curated base file sets where insecure defaults were overridden, and all of the metrics and logging logic were wired up. You get the turn-key solution but you still have code that is more discoverable, and you can veto a few choices without too much effort.


@wenbin

What AWS EC2 instance types are you using? Can you please expand about your AWS stack?


Ok but look in 2012 they were running Java and still did key changes


Is this YouTube but for podcasts? Sounds like a good idea actually.


Fantastic work!! So much knowledge and thanks for sharing with us!


He says boring I say cool. I love the product so much.


How do you get all the podcasts audio and data?


great post, love the solo entrepreneur mindset


Such an inspirational post! Love Listennotes.


what's monthly revenue?


great read , say is your revenue is from ads only ?


Boring is better.


This dude is my hero. Keeping it simple and functional.


This is great! Thanks for sharing.


Lots of stuff can stick a web form in front of Elastic/Postgres or similar. Certainly nothing wrong with that.

Also doesn't mean that something quite so simple will work in every case. Not everyone is wasting their employer's money to build their resume.


Everyone should write something like this.


Satoshi Nakamoto was one person behind Bitcoin, similarly.


Technically, you don't know that since we don't know who Satoshi Nakamoto is. Satoshi Nakamoto could really be 10 people and you nor I, would not know.


Well, plus Hal Finney.


When my website (https://www.aedaily.net) has a million of record, I had migrated Postgres to Mongodb because performance issues. I'm using Django template to easy maintain, development and SEO.


As a software SaaS CISO, who also pentests and determines partner risk - I take the approach of not sharing such in depth details. Articles like this are fantastic fingerprinting recon for those that look to compromise sites.


Pretty sure a blackhat with nmap and a few hours would be a lot more effective than trying to glean something from this blogpost.


That's right, any pentester worth anything will know the stack used in a few seconds by looking at cookies or even sometimes just by the login page's url. For ex: different frameworks have different session and csrftoken naming, Rails and Django have recognizable url conventions, and there's always default error pages that usually give away the framework used.

Sharing is caring, be secure not paranoid :)


No - they won't. If you have a very simple front end stack, and application stack or infrastructure sure. But if I'm needing to traverse networks, or only directly get to a database - that's different than some silly nmap script kiddy scan.

Remember it is often easier to penetrate around the gates where everyone is looking (some app stack + OWASP top 10) to instead focus getting inside a network (your dev's laptop, vpn connection, social engineered access, malware to your CEO or sales team, Wi-Fi connection to intercept the VPN tunnels, etc). Or i'm looking for holes in Docker versions to root, Kubernetes flaws, virtual machine dependencies, how many microservices layers do I have to deal with, etc etc.


Security by obscurity?


Sure - telling me whether you have an api.<domain>.com doesn't matter. Anyone can scan and find that. But, if I know your database names (from a screenshot) and your hosting provider, I know that once I'm past a bastion host, or on your VPN connection - I don't have to wait to sniff or hope you connect to datasources. I now have an informed opinion on where to go.


Not a really good idea all by its own.


Absolutely, but a great idea when combined with other defensive tactics. Obscurity is why armies use camouflage.


I've often worried about that; in fact its really kept me from blogging about our infrastructure at all. Am I too paranoid? I've often thought if I were to do so that I'd set up a honeypot; but who has the time for such games?!


This is just a big ad for his website with no in-depth knowledge or insights provided. Literally just a list of tech someone uses and 4 or 5 links to his website. Is this what HN has become? I remember the content upvoted on this site being much better a couple years ago.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: