Oct 26, 2011

Social Software

What is social software design? Is it fundamentally different? Are there any common patterns? How do they differ (to our current design methodologies)? Are there lessons to be learned from the dominant social incumbents today (facebook, LinkedIn, twitter)?

These are questions that we will attempt to answer in this post.

Design
A software design is an implementation plan for the requirements that we want to fulfill. A design decomposes requirements into a set of problems that when solved/ implemented together, satisfy a given set of requirements.
How do we communicate design? For example, in the early 90's object oriented design style (and hence UML) was the most popular. Today, by contrast designs today are communicated using RESTful abstractions.

Social
The dominant social pattern appears to be:
  1. objects offering capability of adding arbitrary information to itself
  2. subscription capabilities offered to other objects
  3. personalized query capabilities with built in heuristics (surface interesting information first)
More succinctly, all objects have the following method signatures (OO format):
  Object.add(Object data)
  Object.subscribe(Object follower)
  Object.list(Object follower)

In today's popular REST design format, the pattern would be:
  PUT:/Object?data
  PUT:/Object?follower
  GET:/Object?follower

Lessons
The three large social networks follow these patterns to various degrees. 

Facebook has:
  • people and pictures as objects
  • people subscribe to other friends
  • people update their own status, post on other people's wall
LinkedIn has:
  • people and resumes as objects
  • people link to other people
  • people recommend each other, which gets added to their resume
Twitter has:
  • people as objects
  • people follow each other
  • people tweet about themselves and other interesting stuff (to them) 
Summary
Identifying this pattern allows us as software architects and designers to exploit and capture the viral capabilities of this simple and recursive pattern. I am interested in building a technology framework which has this pattern established already. 

No comments: