Announcement

Sunday, January 18, 2009

Social Network Analysis and Version Control

Recently I came across the concept of Social Network Analysis.

Given below is small introduction of Social Network Analysis is from Orgnet site
Social network analysis [SNA] is the mapping and measuring of relationships and flows between people, groups, organizations, computers, web sites, and other information/knowledge processing entities. The nodes in the network are the people and groups while the links show relationships or flows between the nodes. SNA provides both a visual and a mathematical analysis of human relationships.
The concept is originated in 'social sciences (socialogy, anthropology)' to study the relationships on communities. Today it is being used in fraud ring detection, identifying leaders in organizational network,analyzing the relience of computer networks and various other ways. The various casestudies from Orgnet site can give you good idea about the possibilities.

I started thinking about applying SNA for version control history with files and authors as nodes. There is some research going on in this area in universities. References below have few links. Google search with "data mining version control" will give you additional links

With SVNPlot, now I have a way of converting Subversion logs into an SQLite database. Also Python have some excellent libraries for Network analysis. I am using NetworkX for analysis and Matplotlib for visualization. I think such analysis will be useful in
  1. In indentifying the key developers and their specific areas in the project.
  2. Key files (files which are involved in the code changes more frequently than others)
  3. Identify the clusters of related files (across directories and modules)
I think the results will be useful to software development companies as well especially for getting advance warning for problems and especially big projects in indentifying critical developers, planning the technology transfer during movement from people from one project to another etc. I see many exciting possibilities.

The initial results are interesting. I will put up the charts/analysis etc on my site in a few days time.

References and Interesting Articles/Links
  1. Introduction to Social Network Analysis (from orgnet.com)
  2. Casestudies of Social Network Analysis (from Orgnet.com)
  3. Wikipedia page on Social Networks (Check the history of Social Network Analysis)
  4. Social Life of Routers (Computer networks as social networks)
  5. Finding Go-to People and Subject Matter Experts in Organization
  6. Predicting Defects using Network Analysis on Dependency Graphs – ICSE 2008
  7. Mining Software Archives (a special issue of IEEE magazine)

Wednesday, January 14, 2009

SVNPlot - my first opensource project

During the 1 week gap between the two jobs, I finally started an opensource project. The project is called in SVNPlot. It is inspired by the excellent StatSVN Subversion Statistics generation package.

SVNPlot generates graphs similar to StatSVN. The difference is in how the graphs are generated. SVNPlot generates these graphs in two steps. First it converts the Subversion logs into a 'sqlite3' database. Then it uses sql queries to extract the data from the database and then uses excellent Matplotlib plotting library to plot the graphs.

I believe using SQL queries to query the necessary data is resulting great flexibility in data extraction. Also since the sqlite3 is quite fast, it is possible to generate these graphs on demand.

As tribute to python and author of Python-Guido van Rossum, I have generated the graphs for Rietveld project. Check it out here

SVNPlot
is hosted on Google code (http://code.google.com/p/svnplot/) and licensed under New BSD license. For information on installation and usage, check the introduction page here

I am using python to implement SVNPlot. I am a novice to python. Hence any suggestions to improvement are welcome.

Saturday, November 15, 2008

Changes - What I learned in last 12 year ?

After 12 years in the current organization, its now time for change. I have resigned and 21 Nov 2008 is my last day in the current orgnization (Geometric Ltd.). I am going to join another company. I will write more details after joining.

These 12 years gave me tremendous amount of exposure in various parts of organization. It was great experience. I have conducted and facilitated trainings and workshops ranging from core programming topics to soft-skills like Mindmapping. I worked on some pretty difficult algorithmic projects like ClassA surface design, Sheet nesting to building a ALM (Application Lifecycle Management) infrastructure for the company. In all my projects, I got tremendous support from my team mates.

This is just a small list of what worked for me.
  1. It is easier to say 'sorry' than get permission.
    I think this is true for most organization. In my experience, starting a new initiative on your own and getting support is easier than explaining the idea, getting permission etc. The person who is suppose to give permission may not be as passionate about the idea as you are.
  2. Treat your team members as 'adults' and trust them.
    If you treat them as 'kids' you get the behaviour of kids. I have already written a small post about it.
  3. Target to make myself redundant in a project within 1-1.5 years time
    In every project, I have put target that within one year I should be redundant for the project. Some one else should be able to take over from me. I have to identify and mentor my replacement. This gives me freedom and incentive to learn new things. When I want to shift to new project I could go to my manager and say 'my team member xyz, can now handle project on his/her own and he/she should get a chance. Give me some other project/responsibility'.
  4. If I make a mistake, then I have to admit and own the mistake.
    Everyone makes mistake sometime or the other. So if I make a mistake and realize it, then I have admit and own the mistake. I do have a hot temper. And sometimes I have been a 'temporary a** hole'. If that happens, I have to say 'sorry' to the concern person, irrespective of he/she is junior or senior to me in the hierarchy.
  5. I have a responsibility towards my team mates
    I have a responsibility towards my team mates to help them in case of problems in whatever way I can. Sometimes it is just sympthetic listening and advise, other times it is arranging a plane ticket in case of family emergency. It means following up with company bureaucracy on behalf of your team mate and ensure that things move. It also means I will be the one giving the bad news to senior management and customer in case of problems.