8

I know Jeff Atwood and Joel Spolsky are the owners or creators because I came by the site from reading their blogs.

Who else works for Stack Overflow in here?

Does Jon Skeet? There's also a fair number of 100k+ users now.

The answers from them are quite informative. It seems that to get that many points in such a short amount of time (the site's only been online for 2-3 years?), you would need to be spending quite a lot of time, regularly on here, so either they

  1. Have a ton of spare time either at work or outside of work

  2. Are unemployed (seems unlikely given their breadth of knowledge)

  3. Work for Stack Overflow and their job is partially to post answers.

These guys seem too knowledgeable so reason 1 or reason 2 seem unlikely, so I suspect reason 3.

This question has an open bounty worth +100 reputation from Shadow Wizard ending in 5 days.

One or more of the answers is exemplary and worthy of an additional bounty.

  • If you came to the site from reading someone else's blog, would they be the owner? – random Jun 18 '11 at 15:49
  • 2
    @random : i came from the site because the blog mentioned that he was starting a website called StackOverflow – RoboShop Jun 18 '11 at 15:49
  • 8
    Did you stop reading after that post? – random Jun 18 '11 at 15:52
  • if you're going to downvote, can you at least give me a reason? I honestly thought this was a pretty reasonable question. One of the things I've noticed is that the management of the site is very transparent. All changes seem to be in consultation with the community. I really like that about this site. – RoboShop Jun 18 '11 at 15:55
  • @random : Actually I did, I did not read every post Jeff ever wrote. I remember reading something about him starting a new website, then one day, I came across a website called Stack Overflow. So I thought I'd check it out. – RoboShop Jun 18 '11 at 15:58
  • @RoboShop: the way the question is written, you seem to be implying that Stack Overflow hires people to post on the site to artificially inflate its activity level. That's a dishonest practice and I think that (implicit) accusation is what any downvoters are objecting to. – David Z Jun 18 '11 at 22:26
  • 2
    @David : Ok all I meant is that employers of SE are very knowledgeable people and would have to be quite passionate about the site. So it would be likely that they would be contributors themselves. It also would be likely that SE would encourage its employers or any potential candidates to participate. I don't see why this is "dishonest" practice. They're getting their points the same as everybody else - through solid questions and answers as judged by the rest of the community. If you look at someone's profile, every point they earn can be accounted for. – RoboShop Jun 18 '11 at 23:52
  • @RoboShop: yes, of course the employees of the site participate in it, but they do it because they believe in the Stack Exchange philosophy, not because it's part of their job. Also those who work for Stack Exchange never hide the fact that they are employees of the company (well, as far as we know). Those two factors are what make the difference between honest and dishonest practices. – David Z Jun 19 '11 at 0:33
17

Jon Skeet doesn't work for Stack Exchange Inc., the company that owns SO. The second place user, Marc Gravell, does, as does the user who topped the rep leagues last year, Nick Craver, but they had a ridiculous amount of rep before they were hired, not because of it.

You can get a complete list of employees by clicking the about link on the bottom of the page and going to the team tab. New hires also tend to be announced on the blog, so if you search for "valued associate" you'll find some useful posts...

  • thanks mate, that answers my question very well. Did I like piss some people off with that question? I'm just curious as I'm not sure why. Was it because I named Jeff Atwood as the creator instead of Joel Spolsky as the management page states? I honestly thought he was... – RoboShop Jun 18 '11 at 16:13
  • @RoboShop I'm not sure why you got so many downvotes, but you're back to even now. Jeff and Joel co-founded, so you were half-right (it was Joel's idea though) – Michael Mrozek Jun 18 '11 at 16:16
  • ok well in the interest of not taking away anyone's thunder, I have given Joel due credit in the question itself. – RoboShop Jun 18 '11 at 16:21
  • 11
    in all fairness, the OP seems to be saying that the only way 100k users could have gotten where they are, other than being employed by SE, is of they were 1) unemployed, or 2) have nothing better to do. Not the best way to approach the question. I didn't downvote, though. – Michael Petrotta Jun 18 '11 at 17:48
  • 1
    @Michael Petrotta : re-reading what I wrote, I guess that's essentially what I'm saying, but I didn't mean to put it in such a bad light. But it is fair to say that those that have a high reputation have to spend a lot of time on here to get it. – RoboShop Jun 19 '11 at 0:00
9
+100

In the Stack API you can inspect a user type to see if is_employee is true. Due to the sheer amount of users and no query option on that field calling /users for several days to get such list is a bit tedious. However, some employees are also moderator on Stack Overflow (they have a diamond). It turns out there is a /users/moderators endpoint which returns moderators (diamonds) and if we filter the ones with is_employee === true we can build that (somewhat incomplete) list.

Here is the stacksnippet that implements above logic:

SEApi = (function() {

  // reasonable/common defaults for API url
  function buildDefaultAPI(path, params) {
    var targetParams = {
      'pagesize': 100,
      'key': 'hkJRWvgNXW)FhOoL48kqJg(('
    };
    // merge
    for(var key in params) {
      if (params.hasOwnProperty(key)) {
        targetParams[key] = params[key];
      }
    }

    return {
       site: 'https://api.stackexchange.com',
       version: '2.2',
       path: path || [],
       params: targetParams
     }
  }

  // create a fully qualified valid SE API url
  function buildUrl(api) {
    // build query part of url
    function buildParams(params) {
      var query = [];
      for(var k in params) {
        if (params.hasOwnProperty(k)) {
          query.push(k + "=" + params[k]);
        }
      }
      return query.join('&');
    }

    return [api.site, api.version].concat(api.path).join('/')
          + '?'
          + buildParams(api.params)
  }

  // /users/moderators
  function buildModerators(site) {
    return buildUrl(
      buildDefaultAPI(
        ['users','moderators'],
        {
          'site': site,
          'order': 'desc',
          'sort': 'reputation',
          'filter': '!)RwdAtGLfBp.RCli0pG3.Beu'
        }));
  }

  // /sites
  function buildSites() {
    return buildUrl(
      buildDefaultAPI(
        'sites',
        {
          'pagesize': 500,
          'filter': '!*L6RF8XxHGK77i3m'
        }
    ));
  }
  
  return {
    sites: buildSites,
    moderators: buildModerators
  }
})();

SEClient = (function () {

  var backoffQueue = [];
  
  function get(url, callback) {
    var xhr;

    // get a workitem from the queue
    // and call it if there is one
    function next() {
      var cmd = backoffQueue.shift();
      if (cmd !== undefined) {
        cmd(); 
      }
    }

    if (backoffQueue.length > 0) {
      // we need to backoff, so push ourselves on the Q
      backoffQueue.push(function() { get(url, callback); });
    } else {
      xhr = new XMLHttpRequest();
      xhr.addEventListener('load', function() {
        var payload;
        if (xhr.status === 200) {
          // callback with the response
          payload = JSON.parse(xhr.responseText);
          callback(payload);
          
          // handle throttle
          if (payload.backoff) {
            // make sure backoffQueue has an item
            // we can do a simple call to next
            backoffQueue.push(next);
          }
          // call next to process the queue
          // worst case there is nothing to do
          window.setTimeout(next, (payload.backoff || 0) * 1000);    
        } else {
          console.log('error ' + xhr.status);
        }
      });
      xhr.open('get', url);
      xhr.send();
    }
  }
  // public 
  return {get:get};
}());

function EmployeeListerApp() {
  
  var employees = {}; // holds already found user accountid's

  // create DOM elements for a given user 
  function buildUsercard(user) {
    var uc = document.createElement('span'),
        img = document.createElement('img'),
        spn = document.createElement('span'),
        lnk = document.createElement('a');
    img.src = user.profile_image;
    spn.innerHTML = user.display_name;
    lnk.href = user.link;
    lnk.appendChild(img);
    lnk.appendChild(spn);
    uc.appendChild(lnk);
    return uc;
  }

  // add a single user that is an employee to the DOM
  function processUser(item) {
    if ((item.is_employee === true) &&
        (employees[item.account_id] !== true)
       ) {
       document.
         getElementById('employees').
         appendChild(buildUsercard(item)); 
       employees[item.account_id] = true;
     }
  }

  // iterate over all users for a single site
  function processModerators(payload) {
    payload.items.forEach(processUser);
  }

  // for a main site call /users/moderators
  function processSiteItem(item) {
    if (item.site_type === 'main_site') {
      // get the users 
      // and handle the returned users in the call back
      SEClient.get(
        SEApi.moderators(item.api_site_parameter),
        processModerators
      );
    }
  }

  // iterate over all sites
  function processSites(sitesPayload) {
    sitesPayload.items.forEach(processSiteItem);
  }
  
  // get sites and process in the callback
  SEClient.get(SEApi.sites(), processSites);
}

// start
EmployeeListerApp();
a > span {
  font-family: Arial, "Helvetica Neue", Helvetica, sans-serif
;
  font-size: 12px;
  font-weight: 400;
}

img {
  border: solid green 1px;
  display: block;
  width:64px;
}

a{
  width: 64px;
  height: 84px;
  padding:10px;
  float: left;
}
<div id="employees">
</div>

  • 2
    Edge case: Micah Siegel, who appears above, was not listed on the old /team page as he is not really an employee. He is an investor (one of early investors in SO), and advised the company regarding the Patents site, where he was given an employee-grade diamond. – user315433 Dec 10 '17 at 16:28
6

The full list of Stack Exchange, Inc team members used to be available under https://stackexchange.com but removed at some point due to internal reasons.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .