What do you think are the most important features a social network should have? How would you prioritize them? Do you plan to Build Less or go big? If building less, what is the minimal set of features you can get away with?
We plan to “build less.” These are the features which we aim to complete first:
1. A good secure protocol, encrypted at every leg, including a specification for a lightweight, probably HTTPS, RESTful set of routes. We see all of this communication happening between two Diaspora servers, rather than strictly between peers. We realize there is the problem with polling with this model, but we think there are several tricks worth trying which all have their relative pros and cons: PubSub (fast and easy, requires some level of centralization), querying friends servers from the browser side and posting responses back (requires browser side decryption) to name a couple. Alternatively, we are considering going with XMPP altogether due to the ability to be able to push content between nodes, but we need to research it further to see if it is something we would want to implement.
2. A datastore and corresponding interface that can store all of your stuff in one place. MongoDB is what we are looking at for V1, but the redundancy of TahoeFS is intriguing(as well as serving a slightly different purpose).
3. A clear extension framework. Diaspora will be service-agnostic and we will need to make it easy to import from and export to any format/web service. It is also our goal to make Diaspora as content-agnostic as possible, by providing abstract data types and an easily extended UI so that whatever new content people want to store and share can be integrated without re-rewriting parts of the whole application stack.
4. Be your own OpenID provider. Having a single identity across lots of services is great, but why trust a web service to hold it? Once we are the keepers of our own data, we can also selectively allow services access to it through Oauth.