When I left the developer division a number of months ago, people were curious as to why. I explained that this new gig was one that kept me awake at night thinking of all the cool things we could be doing. I wrote a little about  this when I first joined the team.

Well, now everyone can see an early view of what we've been working on - what we like to call Microsoft.Community. Doug has a great post on what it looks like and its manifestation. I want to talk about how we got there, the thought process behind it.

 To give a quick overview, Microsoft.Community is made up of three pillars, Community Discovery Services, Community Membership Services, and Community Discussion Services. Community Discovery Services enables social bookmarking and tagging, Community Membership Services provides membership and reputation services. Finally Community Discussion Services provides threaded discussion services.

On top of these, we have a number of sites. TagSpace is the codename for our social networking and tagging collection site. ClaimSpace is the codename for our explicit reputation management site. Finally, our blog and forum sites will eventually move over to new versions built on the Community Discussion Services.

That's a really quick overview. Before reading on, I highly recommend that you read Doug's post for more details. I'll wait <g>.

Welcome back! As I said before, I want to talk about how we got to this group of services and sites. To do this, I want to give you insight into our discussions.

The underlying question in all this is how do we connect people? How do we connect people to resources across the web, to communities, to other people with similar interests? I've been a big community member and booster for over 20 years - on Compuserve, offering space for local user groups when I had my own company, offering speakers to local groups whenever needed, etc, Most of my best friends have come from the communities that I participated in. People from the community have stayed with me for weeks when they've needed a place, I've never been alone in a new city when going there for work because somehow, there was always someone I knew around - even if we'd never met in person. So, to me, community is an inherent goodness.

But even if it isn't inherently good, community is also useful from a learning perspective. If you find a great KB article that answers your question, you are happy. If you belong to a user group and point it out to someone else, more people are happy. If you blog about it, and those who read your blog or do a search find it, they are happy. The interesting thing is that a social, trusted network is a great way of spreading information. But how do you build that social, trusted network? How do you find the right community or people? How do you enable those communities to form at will? That's what we were asking.

Any community needs certain things in order to exist. You have to identify people who may want to be part of your community, connect them together in a venue and reward them for taking part in the community.

If you look at a user group, it meets these criteria. You typically name the user group thru its identification (The Bay Area Database Developers Association, for instance). You meet monthly in a certain location, with people getting to know each other during breaks or before or after the session. You also reward people through the natural activities - you get information, get to learn to speak better, possibly find a job (most user groups start with the question - is anyone looking for or does anyone have a job?).

Codeplex, does much of the same, but in an online, disconnected mode. It's made up of lots of communities that self-form around a project in which they have interest. It has tools (source control, tags, wikis, forums, work items) that are geared around what is needed for those types of communities. By participating in the community thru its own Codeplex project, the Codeplex team hears from folks about what else is needed and thru agile delivery, provides it quickly enough to keep the underlying strata firm and useful enough to let the communities continue to grow.

If we draw these four requirements, we can see how the services and sites provide what is needed to match these requirements.

OK. So now we have the basic outline of what we want to create. Let's look at a more architectural view for these same things. We have the services laid out horizontally and can use any combination of these for sites. With the great work of our Product Managers we coalesced on a few core sites to start. These are listed vertically, with their lower range showing which services they consume. We began, of course, with our existing sites - forums and blogs. They make use of all the services (Doug discussed one of my favorite scenarios - building your own forum based on tags). The two new sites, codenamed TagSpace and ClaimSpace make use of the two top services.

Wanting to open this up over time (using this on sites of our scale means that we have to slowly grow and be sure that we can handle this), we opted to provide a RESTful interface to all our services and we plan to embrace some of the emerging standards you see with Web 2.0 sites.  

Wow! This has taken a while. In future entries, I plan to drill down into some of these services, and as we work further on cacheing and scaling techniques, talk about some of what we learn.

In any case - it's really exciting to have this stuff ready to ship. We want to get your feedback (look here for a post when it's live) and hope to release updates pretty regularly as we move forward.