Contributor Interviews – Jay Pfaffman


(Erlend Sogge Heggen) #1

Every week, we’ll be posting an interview with one of our many beloved contributors here on Meta. Find them all in #user-interviews. This week:

Jay Pfaffman @pfaffman


Tell us a bit about yourself!

Location: Reno, Nevada, USA,+NV/@39.557847,-119.9909255,11z/data=!3m1!4b1!4m5!3m4!1s0x809940ae9292a09d:0x40c5c5ce7438f787!8m2!3d39.5296329!4d-119.8138027

In my last life, I was a college professor who taught future and current teachers to use computers to support their teaching. I thought and taught that Open Source Software was important for education (e.g., It’s time to consider Open Source Software). Before that, I was an early adopter of Linux and once ported Sendmail, UUCP, and a couple different mailing list managers to Linux to run a mailing list for about 600 English teachers over a dial-up link.

I play guitar, though haven’t much lately, and plan to ski this season, as Lake Tahoe is less than an hour away. I spend the vast preponderance of my time doing stuff with Discourse these days. I’ve always liked managing computers and now I get paid for it.

How did you first find out about Discourse?

I was unhappy with the Learning Management System that my last university used and thought that I wanted something like Stack Exchange to support students learning about various computer applications in my classes. Somehow I found Discourse, and adopted it as a way to teach my classes.

What are you using Discourse for?

I do Discourse training, support, installations, and imports full time. I have a Discourse instance that I’ve been using as a means to keep track of what I need to do for my clients, and a tiny instance that I’ve been using with my family. Meta is the Discourse instance that I use the most.

How did you get so involved in the Meta community?

I’ve always been a big Open Source Software advocate and liked the community when I started using Discourse and wanted to give back. About a year ago, I left my faculty job for my wife to take hers and started doing Discourse consulting full time. @codinghorror handed over the $99 community install business to me, and on I’ve gone.

What compels you to contribute to Discourse?

I’ve always been interested in helping those who aren’t “good at” computers learn to use them. Discourse gives me a new way to do that.

Tell us about a non-Discourse community that you’re involved in!

I’m still new in Reno and don’t have much community here, though I have recently joined a wine tasting group.

What kind of significance does the open source movement have to you?

When I was teaching educators how to use computers in their classrooms I was a staunch advocate for Open Source Software. When teachers are spending a bunch of money out of their own pockets for copy paper, I thought it all the more importer for them not to spend money on software. Software, unlike diamonds, is more valuable the more people who have it. I know many people who use a certain very popular word processor primarily because the people that they collaborate with use it. (I can’t stand word processors and use Markdown, LaTeX org-mode and LaTeX pretty much exclusively.) I used to make moral arguments about why schools should adopt and embrace OSS, but no one really listened.

What has been the greatest challenge in learning about Discourse and its community?

It took me a very long time to figure out the multi-container config.
It took me a very, very, very long time to figure out multisite.

Any ideas on how to improve the Meta community?

  • No good place for real RTFM questions, which is compounded by the fact that there’s no FM.
  • Perhaps there should be a “newbie” category (probably with a better name), where people could ask rudimentary questions like “How do I control access to categories” with impunity. That’d offer a place where nearly-new members could provide useful help.

Any advice to future contributors?

My current peeve is people who ask a zillion questions about Discourse before installing it. My advice is to just do it.

I think there’s a big need now for some documentation, so even if you’re not a programmer, you can help out by creating tutorials or other kinds of documentation to help new administrators figure out the basics.

I’d love to see a small suite of proof-of-concept plugins that include just enough to demonstrate overriding a particular thing. This could be a good project for someone just starting out with writing plugins.

When a Wiki Post is edited then have problems maintaining the correct width on mobile devices

This heading has been used twice. I’m guessing one of them wrongly came in there.

(Vinoth Kannan) #3

Thank you. I have edited the OP.

(Kenny DuBose) #4

And, that’s an outstanding tie you’ve got on there Dr!

(Bhanu Sharma) #5

Such an inspiration @pfaffman Your advices have been real help at times!

(Bas van Leeuwen) #6

All of this, YES, please

(Michael Friedrich) #7

I totally agree here, still, I’ve found it really hard to document every single piece of a web application. Such “handbooks” do not really exist in the wild, and are really hard to maintain. Still, I would believe that a general “how to start and administrate things” documentation should exist on Github. It not so easy to find everything from the very beginning, you need to know your Google foo. The main thing which did hold me off for like some months was that I did not understand why I would need Docker, and “JFDI”. I’ll take note to send in some PRs, I love to write Markdown docs :slight_smile:

In terms of plugins, I know that feeling. We tend to have the same problem with Icinga Web 2 modules, where the “easy to start with” module doesn’t exist, and many do look into existing modules. Which are overly complex. Starting with Discourse plugins just for the fun and pride is one of the things I’d like to try, maybe also sort of prototype and guided by the main devs. It only is - as always - a matter of time :slight_smile: Cannot make a promise here, still I think this software and community deserves a warm “giving back” :slight_smile:

Kind regards,

(Angus McLeod) #8

@pfaffman Hear hear! The more computer literacy in the world, the better.

Totally, understand if you don’t want to answer this, but do you happen to keep demographic stats on your clients? I’m just curious what kind of folks are using Discourse.

(Jay Pfaffman) #9

I don’t keep stats on locations, I often don’t know. They’re from all over the world, though. Great Britain, Poland, the US, various countries in South America, and a few from New Zealand and our Australia.

Almost everything is via email or discourse. A few folks I’ve talked to via phone or video conference. Only one client have I laid eyes on.

(cpradio) #10

This has been a long time coming. As I keep coming here to post and then get distracted.

@pfaffman, you have done a lot for the Discourse Community. The work you put into discourse-setup alone is note worthy, let alone the importer work you have done as well.

It doesn’t take much to figure out why Discourse would hand you their $99 install business and why many of us here will consistently recommend your services to those looking for it.

One of these days I’d love to hear more about your automation process, not the entire how, as surely you should be able to keep your edge, but more of what tooling is involved, how you got interested in it, and so forth. I think that would make for a really interesting read.

Thanks for taking time to put in an effort to this project, your contributions have really helped shape the installation process and those who have to migrate from one forum to another.

(Jae Van Rysselberghe) #11

Hey @pfaffman,

I think you should raise your Discourse installation fee from $99 to something closer to $150.

Alright, that’s all I have to say (me thinks I’m not going to get a lot of likes for this… ).

But seriously, $150.

(Jay Pfaffman) #12

Thanks, @jaevanryssel. You’re not the first to suggest that the price is too low. And, it is $150 with https. And I don’t get but about 8/month (which was the same that CDCK was getting before they handed it over to me). I’ve actually considered reducing the price. If reducing the price to $50 would get me 50/month, it’d be totally worth it for me. An install takes me under a minute. (But I’ve spent more hours than I care to admit getting it to that point!)

Real Soon Now I hope to have a fully automated install available, but I keep finding other things to work on.

(Jeff Atwood) #13

I suspect that this would not be effective – if your work is good, charge more, not less!

(Jay Pfaffman) #14

Well, I don’t have the time to write up what I think you’re asking for, but here’s what happens. When an order is placed, I get an email that has something like this:

export NAME="Pat Doe"
export EMAIL=""
export DO_HOSTNAME=""
export DO_API_KEY="thediscoursekey"
export MG_API_KEY="key-mailgunkey"
cd ~/src/discourse-installer
load 'do-create-droplet'
d.do_create_droplet("", 'nyc3', '1gb')
sleep 45

I copy and paste that into a shell. I don’t just have that in a single shell script, because if something goes wrong, I can do some stuff in my little Ruby class to fix it up.

do_create_droplet, as the name implies, creates the droplet, and adds those DNS records to the Digital Ocean DNS. If the client uses Digital Ocean as their DNS provider, all of the DNS stuff (including what Mailgun requires) happens automatically, and https gets enabled and the Mailgun domain gets verified. This isn’t advertised because I’m afraid that someone will break all their sites changing to DO’s name servers. For sites that I set up for myself, the whole thing is entirely automated.

install_discourse does what you might guess, but it also uses the Mailgun API to create the domain and get the SMTP user and password to generate an install script that

  • installs docker
  • does an apt upgrade
  • sets a root password
  • enables automatic upgrades with automatic reboot
  • turns off transparent_hugepage
  • installs git
  • installs Digital Ocean’s monitoring stuff
  • runs discourse-setup, piping in all the values as if someone had typed them.
  • reboots

The script is copied to the server and then run.

When it’s done, an email is generated with all of the DNS stuff that mailgun wants and puts it in a table with instructions that most people can follow.

The DNS settings table includes links to test the settings with G Suite Toolbox; there is also an API URL that allows the logs to be checked without logging in to Mailgun. If they do have trouble, I can generally figure out what the problem is with only what’s in the email they get.

If something goes wrong during the install, my ruby class also allows stuff like delete the droplet and start over. I also have functions to do things like:

  • discourse_to_8080(hostname = @hostname)
  • manager_install_apache
  • install_mysql(_server_ip = do_server_ip, lc_user = @lc_user)
  • create_user(_server_ip = do_server_ip, user = @lc_user)
  • install_wordpress_domain(hostname, _database, _server_ip = do_server_ip)

A feature I just added that I’m happy about is that I start monitoring the site with uptimerobot. This way I get a notification once they set up DNS and I can follow up if there’s some need to do so.

One day, Real Soon Now, I’ll finish the rails app that will let this stuff happen without my intervention.

(cpradio) #15

That actually was good enough, enough of a teaser to show the ability of it, with enough of the technical chops hidden about it.

This was actually all I was looking for, was a glimpse into what you were doing, I knew you had automated the process, but wasn’t really aware of how much so.

Thanks for the peek into your process.


I’m not good at computers! Jay just helped me set Discourse up in a droplet on Digital Ocean and configure my GoDaddy DNS records for my primary domain to use Mailgun. Thank you Jay! Thank you Discourse for this contributor interview.


I’d say it would be worthwhile changing your prices to hit a good price point. That might be upwards but I’d expect it to be lower than your current price.

I don’t remember seeing anyone present data that could estimate the demand curve. If that data existed then it could indicate where the best price point will be for you. You could handout “discount vouchers” for a while and generate another data point.

What would also be useful is to know what you are competing with and how do potential buyers see your prices? My own experience is that the value of your service increases after a self-managed install has email or DNS problems. But then there are other options like, for example, discoursehosting. I specifically remember thinking that the up front cost for discoursehosting is a lot less than USD99 so I suspect that some people are taking this path simply because it is lower resistance with no one-off install cost.

The psychological hurdle gets a bit higher when the payment will be made from a currency that doesn’t have parity with USD. My currency is worth about 3/4 so USD75 would be much more attractive simply because it gets the price under NZD100.

The other data that would be useful is about how initial installs convert to further business. If you know this then it would give you an upper bound for estimating additional income after the install.

The really difficult bit would be estimating how reducing your price could accelerate adoption of Discourse. Your marginal cost is now so low that a major price reduction could eventually lead to accelerating momentum as customers actively refer you to others.

I guess that you’re aware of all this. So I’ve mainly put this here as a counterpoint to premium pricing and the like where there is less concern for the value provided to customers: