I’m Nick Craver, and you may remember me from my posts about how Stack Overflow does deployment, how we do hardware, and how we built our architecture. What I haven’t explained yet, and what remains a mystery to most developers I meet, is how we make money. I want to do this now not only…

I’m Nick Craver, and you may remember me from my posts about how Stack Overflow does deployment, how we do hardware, and how we built our architecture.

What I haven’t explained yet, and what remains a mystery to most developers I meet, is how we make money. I want to do this now not only to answer this frequently asked question, but because it’s my and Stack Overflow’s belief that being relentlessly open and honest with our community can be nothing but good. That extends to normally sticky situations like finances, and it’s why we’ve created projects like the Stack Overflow Salary Calculator to make our salary processes transparent.

Why We Make Money

For a little more context on the timing of this post: I’m the architecture lead for Stack Overflow, and I’m writing this just after our annual company meetup. Our meetup is an awesome time for remote employees like me because I get to see people I’ve never met in person before and discuss ideas. Endlessly.

It’s also a great reminder of why we do what we do and how we go farther when we work together. I’m coming up on 6 years of my life spent building what I consider to be the best resource developers have ever had. I love making it better, every day. But I don’t build these things alone. I am insanely lucky to work with some of the best developers, sysadmins, designers, managers, marketers, sales, and all of the people who support that in the world. I don’t build Stack Overflow. We build Stack Overflow.

I spent countless hours last week talking with many of these people, some of whom I’ve never spoken to before, about how we grow as a company. Much more importantly, we’re figuring out how to do it while being, for lack of a better word, honorable. I have high standards for how we behave, and I hope that’s reflected in what you think of Stack Overflow. I am extremely protective of our users. You can ask anyone who works here. It’s is my very strong belief that we have a built up a trust with the community that is not easily earned and is impossible to replace. I want to work for a company that respects that trust, and I do.

While this is a shared, company-wide belief, historically we’ve heard concerns about how we can both respect users and make money, or that the money is just this thing we do for our VCs or because we want to keep the lights on. We want to squash that perception. Sure, money is required for sustainability. But we’re here fundamentally to help users, and we exist because you decide to let us exist. That’s why we’ve structured our monetization into a cycle that continuously improves the community, and doesn’t treat our product processes like some sort of resource extraction. How much money we make is a direct proxy for how much we are helping our users. We focus on maximizing how we help users in order to make a great business. Very few companies have done this successfully, and we take great pride in the fact that we’re one of them.

How We Make Money

Stack Overflow Talent & Stack Overflow Jobs

We help companies build their brand and source technical talent through our business products: Display Ads and Talent. These services in turn help developers find better jobs and also learn about companies in a way that is respectful to the user experience (no spammy inmail, no flash ads, etc.). We consider the developer experience in everything we do, which is what makes everything we sell as a company unique.

It’s a lot like questions and answers. Companies are asking for developers, and we need experts to answer the call. In order for this to work, we need people on both sides of the equation. The more companies and developers we have, the better and faster the matching we can do with developers and hopefully their dream jobs. For companies, we aim to match them with a handful of candidates that are an awesome match, not 500 candidates that barely match at all. This is where we can provide value. We want to optimize things. We don’t want to waste your time or a company’s time – there’s so much inefficiency here we aim to improve with the whole hiring process.

Our position is relatively unique because we can help both companies and developers at the same time. That’s not bullshit. I believe we can do this. I believe we can be better at it than anyone else. We’re already placing thousands of candidates in thousands of jobs, but there are many more thousands of jobs waiting for the right candidates right now. One step of improving that is our Developer Story. I helped build this because I think it’s an awesome way we can improve life over resumes and CVs. It helps developers show off who they are, the things they do, and (I hope) in an approachable way that’s maintainable. It also lets you find a job. If you’re looking, or even just curious, the more complete your Developer Story is, the better chance we have of matching you to the right jobs.

If you have no interest in either, that’s perfectly okay too. While we’d love to help match you to a perfect company, we built both Jobs and Developer Story to support our core mission of serving ALL developers, including those of you who just don’t care about job searching right now. We’re working to change how companies treat developers not only through the standards built into Jobs (e.g. no spamming allowed), but also through our Developer Hiring Blog, which we created for the express purpose of improving employer and recruiter practices. And with Developer Story, we want to change the perception that developers are only as good as their last gig or a title. Developers are creators with stories to tell, whether that’s through code or blog posts they’ve written or individual teams they’ve served on or even what they’re reading right now. These products weren’t just launched to hit a bottom line; they were built to shift paradigms.

Stack Overflow Ads

We’re a major website, and our ads solution is a major player in how we survive. But we don’t want you to click on something you don’t care about. We want to give you something you want.

Our goal is to give you something as relevant as humanly possible, and when that fails we’re trying to give you something as relevant as this sentient computer over here thinks is possible. I’m not sure if giving it feelings was a good idea, but we’ll see. Anyway, we’re constantly working on it. It’s our job to make the ads we need to survive also be as relevant to you as possible. We have brilliant people working on this, and a large part of it is all after an overall goal: understanding developers, so that we can serve you better.

(So, how do we feel about ad blockers? We don’t care, and here’s why.)

What are we doing with ads now? In short, we’re not adding more ads; we’re just improving what we have. We have a little more smarts about what technologies you, as a developer, like than most places do. We want to see what we can apply there to make ads always more relevant. It’ll take a little longer, but we also want to make ads load faster as well – that’s a bigger project.

What we’re not doing is lowering the quality of our ads. Did you know we have a lot of unpaid inventory on Stack Overflow every month? Every time we display a “house ad” (which is what we call an ad for another site on the network) or a “community ad” (voted on by the community), we could display a paid ad. But we don’t. We don’t because if we don’t have anything even remotely good to show you, we shouldn’t.

And we don’t want to use an automated system that selects some ads for us. We looked at this. It didn’t allow us the control we required to maintain the level of quality we want to maintain. We have intentionally left a lot of money on the table. Sacrificing quality is not what we want to be known for. We believe there are better ways.

It’s important to know that the rejection of ads we could be selling came from our ad sales team. These are the people actually making money from selling ads. And they rejected the idea because they care more about what we’re doing and what you think of us than earning more money for ourselves. Do you have any idea how fucking rare that is? Our Talent sales team that faces employers behaves the same way. All of these people care about something bigger than themselves, and that’s why I love working at this company.

We have a few ads that are loading slowly (thanks for the reports, meta users!). We’re tracking down the advertisers and figuring that out, helping where we can. That’s a complicated one due to how many people are involved, but we’re on it. Samo and I will be adding timing information to our sampling profiles for these items, so we can keep an eye on them in the future and alert on issues automatically. We believe ads that load slowly or are expensive diminish the user experience. Performance is a feature and anything on the page matters to us.

I’m working with our ad sales team to ensure starting in January 2017, all of our advertisements will be HTTPS compatible. This is mostly the case today, but not guaranteed, and in the future we’ll enforce this. I don’t want them to be a blocker for anything. We’re about to move all Imgur images to https://, and enforce it. I’m also about to move all site logos and icons to https://. We’re working on that huge project… but that’s another (very long) post.

Enterprise

We’re going to spend more time developing Stack Overflow Enterprise. It’s starting to gather steam, and it’s another way we can help developers behind company firewalls and our company at the same time. We have a few full-time people on this to make it happen. Enterprise environments are somewhat unique and need some specific love.

But, Enterprise is the same code base as stackoverflow.com. It’s the exact same git branch. And sometimes features for Enterprise are features for public Stack Overflow. For example, we’re looking at building a simple image proxy needed for HTTPS that’s just useful as an inside-the-firewall image host on Enterprise. Those client timings I mentioned earlier? Those will help us gauge bandwidth required for this adventure. It’s one big picture we’re building.

Trust

Making money at a company our size requires great marketing.

But two years ago, I didn’t trust our marketing team. Why? Because it was brand new and I didn’t know them. I knew of other marketers and I had bad experiences. So my default assumption was roughly “all marketers are bad and want to abuse user trust for quick wins”. But it turns out that’s not true. Not here. I had to work with our team on several projects to overcome that prejudice and realize something simple: we hired some awesome marketers and they care about the same stuff I care about. Especially to Kaitlin, thanks. Our new team has put up with a lot of pushback and not fought about it. They showed us why these things are a good idea, and they convinced the smartest people I know on so many things.

All of our teams know that the Stack Overflow community and its trust is the most precious resource we have. We want to communicate, not alienate. And only with users we think we can help. Yes, if we’re doing it right, sometimes these things will help us as a company too. I don’t see that as a bad thing. If we can grow the company, we can build more awesome things for the world. I have so many, so many things I want to build for you. Ask me about sticking Stack Overflow in a 2U server in Europe, Asia and South America to beat the speed of light sometime.

I saw a presentation from Adrianna (our relatively new CMO) that blew me away. I hadn’t actually met her before her talk at the meetup, but it was a hell of a first impression. They have some awesome things in the works to help us with a unified brand. While watching her present, there was a lot of “why the hell didn’t we do that four years ago?” going through my mind.

Marketing, like development, is mostly about connecting the dots. I have gone from dreading interactions with “the marketers” to looking forward to them. We’ve got smart, well-intentioned people who can really help everyone involved. I’m actually psyched now.

Mini Case Study in How We Build Trust: Email

Trusting each other and sharing values related to how we make money directly connects to how we build internal tools. Here’s the most recent example I can think of how trust is a required feature in all our products:

So that Architecture team I run? We’re the team that coded a new email system to communicate with our users in a consistent way (with a lot of help). Why am I saying this? Because I personally went from 100% opposed to ever building such a thing to being onboard… if we did it right. By the way, it’s just me and Samo Prelog. “Team” is a pretty strong word. It’s kind of lying at that level. Should we call it a pair? We’re really just two developers forming a miniature Justice League. …anyway, email.

What’s the first thing I specced? Opt outs. That’s the very first thing we built. That’s absolutely the most important feature to us. One-click unsubscribes and a landing page for that where you can opt out of everything was non-negotiable. It’s priority #1. I’m a developer who deleted their LinkedIn account over spam years ago. If you don’t want to hear from us again, that’s just fine. I’m sorry if we bothered you in the first place and appreciate any understanding of where we’re coming from. One of my biggest apprehensions is annoying our community. Worrying about that keeps me up at night.

We are in the process of sending out an email now announcing Developer Story to the larger community in the hopes that we can help some percentage of developers. If that email is rejected, we’ll unsubscribe you. If you’re unresponsive to emails we send, we’ll unsubscribe you. If you mark it as spam, we’ll unsubscribe you. We want to be a good citizen here. Every new email, except for transactional emails like “Forgot your password?”, sent through this system will have three links at the bottom: a one-click unsubscribe, a direct link to manage all categories, and feedback.

One of the reasons we built this system the way we did (which required a lot more effort) is that if a given provider didn’t work out (we’re using SendGrid right now, so far so good!), we could be damn sure that your opt outs were carried over. We didn’t want to risk annoying users who clearly tell us they’re not interested.

While we only have one category at the moment (“New Features”), we plan on adding more. But, I’m not talking about adding new email in that. We want to move all of the existing emails like community newsletters (a completely opt-in thing, if you’ve never seen them) over to this new system so you can manage it all in a very simple way, with a one-click unsubscribe we know works. Our email preferences page is, to be blunt, a total disaster.

This is an old artifact of growing from one site to many and it needs love. We have people working on that right now. One of our designers, Donna, is working hard to tremendously simplify this. There’s a lot of backend changes needed to support that unification and simplification. We hope to have one email address for a user and a single place you can manage all email that ever comes from Stack Overflow. If you are annoyed, it must take (at most) one to two clicks to unsubscribe from everything.

All communication and interaction has to reflect our respect for you. If it doesn’t, we have failed you, and we have failed ourselves. Our mission is to improve life for developers. When I lose sleep, it’s often over worrying about this. We have to deserve your trust; we have earn it.

If we add new categories of emails later (not just categorizing something we send today), existing users will not be opted in. Only new users will get defaults. We don’t want to be “that site.” I mean it. We intentionally designed the table schema around this.

If you read our Developer Story email and don’t want one, that’s absolutely fine. I hope Stack Overflow serves you in other ways, and I appreciate your time. I hope other things like Documentation and ongoing Q&A improvements help make your life easier. It really is why we’re here. It’s why I’m here.

How We Think About What’s Next

There are so many things in my head right now. I want to put a time series database in SQL Server in a Clustered Columnstore. I want to test an idea we came up with at midnight to improve consumption of developer news. I want to build several data connections that are almost there for our internal teams to save them time. I want to do a thousand things.

I’m also excited. I’m excited about the future of Documentation. I’m excited about Developer Stories. I’m revving to go. I want to get the money part of being a company out of the way so we can build all the useful things our communities want and need. I know we can do that, and in a good way for everyone. I hope you agree. I hope my ramblings helped out what it’s like at Stack Overflow, at least a little, at least for me. If we don’t agree, that’s just fine. If you have time though, I’d appreciate if you told me why in the comments so I/we can do better.

Thanks for listening.