November 11, 2011

I'm back :)

I'm happy to announce I'm returning back after almost 1 year long absence here ;)

So what's changed? Actually, a lot.

In December 2010 I decided to start a new software project. My primary goal was to build a product that must be attractive for a wide set of categories of people. So after some period of research (I'll tell about this later) I came to the following idea:
  • There is no single place on the web, where you can compare yourself with other people by the whole set of metrics that are relevant to you. I'm talking about nearly any metrics - e.g. your birth date, height, the number of hours you spent at work during this month, the highest place you've ever visited, the deepest dive you've made, the number of miles you run this week, your reputation on Stack Overflow and so on.
  • Most of the ratings on the web are global, but local ratings seem more important in our life. E.g. what my ~ 2.5K reputation on Stack Overflow says about me in general? Nearly nothing. But being compared with reputation of developers in my city (Ekaterinburg, 1.5M population) or in some company here it becomes more meaningful: Stack Overflow is in English, so local developers rarely answer there. The same can be said about nearly any metric: almost no one remembers his position in global rating on Stack Overflow, but I bet you'd definitely remember you're #1 (#2, #3) on Stack Overflow in your city. 
  • If we're able to compare an arbitrary set of such metrics for arbitrary groups of people in real time (e.g. your productivity measured by RescueTime + the number of LOCs you committed + the number of tasks closed in issue tracker), we bring Google Analytics to the world of achievements and productivity of people. This must be a precious tool for business - at least, I'd definitely use such a tool. And it is attractive for people as well, since they can identify and highlight their local or global successes (e.g. attach them to a CV). Moreover, I'd use such a tool to compare and fix successes of my kids.
  • If we're able to fix nearly any facts, we can identify the most popular facts in a particular group of people. And this set of facts must nicely describe what's common in this group. E.g. if it's a group of bodybuilders, most of them publish the weight they push, muscle size, etc.; if it's a group of developers, they compare their reputation on Stack Overflow, number of committed lines of code, lists of technologies they use, etc. Travelers might count the number of countries they visited, driving fans - the horsepower of their cars, and so on. Imagine, you're visiting some event and instantly see the most popular activities and achievements for the whole group of people there. IMO, that's cool!
Home page of displays the topmost
achievements in your country, city and groups
you're in, including your friends' group.
So that's what 9facts must finally evolve to - a tool allowing you to share and compare arbitrary (but mainly measurable) facts about your own and other people. Currently we're just in the beginning - "About 9facts" page fully describes the current state of the project; the limitations it has now include:
  • Absence of an API allowing third-party apps to push facts with measurable data to it, although there are few integrated data providers grabbing some facts from Facebook, Twitter and Stack Overflow. Also, you can enter the facts manually there - our presentation explains what's so unique in this part.
  • We can't log facts with data sequences (i.e. data change charts).
  • Some of essential social features aren't implemented yet - e.g. there are no comments, messages, notifications about your high positions in tops and so on.
  • UI/UX certainly needs to be improved as well - some actions and implied results there are far from being obvious.
But the good thing is that it already works, and you already can compare yourself with the people nearby you (or in your city, country and so on) right now. You can do this in 3 steps:
I'd highly appreciate if you share your impression with us. There are several ways of doing this: create a fact about Alex Yakunin on 9facts, send an email to [email protected] or leave a feature request @ UserVoice.

More information about the current state of 9facts is provided in my post describing the latest update.

So what I'm going to write about? We've learned a lot during last 6 months:
  • 9facts is an independent startup. X-tensive acts as co-investor here, but a part of money was raised from another investor. So I think I'll be able to tell a story about this, if / when we'll raise the next amount. 
  • We've built a new team for this project in pretty short time, so in particular, we should quickly enforce agile development, coding standards and practices. I can't say we fully succeeded with this, but I'm happy with the result.
  • We are using DataObjects.Net in this project, so it's a sort of "eat your own dog's food" experience for me. We use DO in almost all the projects we run, but personally I didn't have any remarkable experience with ASP.NET MVC before 9facts, so now I know quite well how to use DO efficiently in this scenario. Splitting the application into tiers, using federation (sharding), performing schema and data upgrades, using caches, running certain actions periodically - these are just some topics I can cover.
  • There is a JavaScript library plus certain amount of server-side code allowing us to handle AJAX requests (we don't sent regular POST requests at all), errors and many other things in unified fashion. Our ASP.NET MVC handlers processing form update requests (actually, any AJAX requests) usually contain much less code then you usually see in examples handling standard POST requests, although they are much better ready to real-world scenarios (in particular, error handling). Take a look at this page's network traffic to understand what I mean. I can add that normally we don't use client-side MVVM (although we use knockout in few cases), i.e. the rendering is usually performed on the server side. IMO, that's the most convenient scenario for ASP.NET MVC applications.
  • We're extensively using Task Parallel Library (TPL) and PLINQ, so I can share some experience related to this part as well.
  • Finally, it might be interesting why I decided to develop something new, how I was peeking the ideas and so on.
That was a brief list of topics I'm going to expand during next months. I hope you'll like this new kind of content in my blog.