Levels in Microsoft mapped to one single quality

I have this habit of over-analyzing things, trying to figure out the formula which connects the underlying dots to put a structure to my thoughts. At Microsoft I spent countless hours thinking about skills I need to acquire and qualities I need to build to move ahead in my career. Two most important activities I frequently did was deducing what skills my managers had which made them effective and second experimenting with my own ideas. After all the thinking, below is how I deciphered career levels in Microsoft to single most important quality people need to develop to get there.

Base = Intelligence and Hard work
These are two core qualities people need to get anywhere in life. You need to have a fresh mind which can think and you should be hard working. There is no escape from these.

Senior = Self Critical
Person who is self critical and is able to evaluate what skills he/she needs to acquire constantly (and then acquire those) should definitely make to Senior in Microsoft. Self critical people are able to see goodness in others and able to pick the right skills they need. Without continuous self improvement, your career is going to stagnate quickly.

Principal = Courage
Now this is where things get hard. As you climb up, you will be required to take many decisions everyday and those decisions are going to be very crucial for your team and product. Your level of courage will define if you are going to target big challenges or not. Courage will help you open up to take risks and experiment more which in turn will help you learn more. Without courage leaders won’t be able to pursue big dreams and take calculated risks. Courage is what pretty much separates men from boys, leaders from managers.

Partner = Good Intuition
Everyone in the world has some level of intuition on everything but depending on how good your intuition is, you are going to succeed less or more. Are you able to predict needs of others, market, customers better than others. Can you tell which team composition will work better, which market strategy will work, which features customers are going to love. Can you just feel what are the next steps team should take? Intuition helps with these kind of things and good intuition makes you extremely effective. You can term it as experience too but experience can build good intuition or bad intuition. People with bad intuition has view of the world which might not be right and actually will make them take bad decisions. As building deep intuition takes time, you cannot really fast forward in building this. IMO more you travel, experiment in previous years, better intuition you are going to have.

Vice President = Out of box thinking
Now out of box thinking is the hardest as most of the people will struggle their whole life to even understand what it means to be inside a box. Even ones which can tell when they are inside, its very hard to get outside the box. As per my own understanding, you are inside the box when you accept an outcome without rationalizing it completely, when you stop questioning processes/directions etc. just because that’s how you have seen them but can’t really justify it. People who are able to keep their awareness and perspective fresh and able to question their knowledge and principles all over again as required stay out of the box. These leaders can guide through their emotions and that of the team successfully and gets to fulfill the biggest responsibilities in corporate world.

Of course people have lot more qualities than these and there are many other things you need but these form the basic ones in my mind. Yes there are people who get to these levels without these qualities too but this is what separated majority of the people at these levels from ones below them. I would love to hear from readers what skills/qualities you might put higher than these.


New Beginning – Kenyt

After spending more than 13+ years working for Microsoft (14+ including 1 year at Cisco), I have decided to test some uncharted waters. Even though I was enjoying working for Microsoft, I had few ideas which I wanted to evaluate and it was unlikely that Microsoft will be willing to take bets on those. So I left Microsoft couple of months ago and have started my own company Kenyt.

Problem I have decided to work on is to make it easy for people to make decisions starting with shopping decisions. We live in era of umpteen choices and as the number of choices increase it is getting harder and harder to pick one out. Google is great tool but it is making decisions harder because there is tremendous amount of information (not knowledge) in front of you to go through. Customers are spending days and weeks trying to zero-in on a product or service. As per a research study done in USA, consumers are spending average of 70 days researching before they finalize a which product to buy. All this is completely taking fun out of shopping. Even after all this consumers are not sure if they have made write choice.

Kenyt’s goal is to make all this pain go away. We believe that consumers need clean/trustworthy data first to narrow down on choices and then need social validation in terms of reviews, expert advice, and what friends has to say. Kenyt has started with first pillar of clean and trustworthy data and to that end, we have released our first version of the android app on play store.

Here is what we are doing to provide meaningful insights to consumers. Our engine is collecting the data from multiple sources, cleaning it, conflating data from all sources and then extract useful knowledge. We have exposed knowledge like what typical specs you can get for a price which can help you decide your budget, how a brand is positioned in a particular price range, how each feature in a product stack against other products you are evaluating etc. Few useful tools are also included like ability to reject (many times consumers know what they don’t want but not what they want), merging multiple variations like different colors together so that you don’t see same product again and again, side by side comparison of any number of products and session management so that you can carry on with your research when you come back next time. Please download the app and give it a try and do share your feedback.

I have been thinking about blogging ever since I moved back to India in 2010 but for some reason or other never got to it. I am very excited to bring my blog back to life. I am going to share lot of thoughts on entrepreneurship and technology. Stay tuned for more.


Podcast on Running PHP on Windows

Peter Laudati & Dmitry Lyalin host the edu-training Connected Show developer podcast on cloud computing and interoperability. I met Peter in Chicago during Tek-X and we along with Don and Wade recorded a podcast on evolution of PHP on the Windows Platform. We talked about the improvements made to Windows in order to support PHP, including: Fast CGI, WinCache, PHP 5.3, the Web PI, and the SQL Server driver for PHP. Check out episode #31, “PHP On Windows” on Connected Show. Interview starts at 24:31.


If you like what you hear, check out previous episodes of the Connected Show at www.connectedshow.com.  You can subscribe on iTunes or Zune.  Peter and Dmitry publish new episodes approximately every two weeks!


Impact of name resolution on mysql_connect perfomance

I spend lot of time profiling popular PHP applications finding where exactly processing time is spent during PHP execution. Few months ago, one thing which caught my attention was performance of mysql_connect API. On my windows test bench, xdebug output showed that one call to mysql_connect was taking 0.31 seconds which is huge. While playing with the API, I noticed that when IP address of the MySQL machine is used instead of the hostname, performance of mysql_connect API is much better. Below is a simple script I ran to test this.
1. <?php 
2.     $hostname = "hostname";
3.     $ipaddress = "";
5.     $starttime = microtime(true);
6.     for($cnt = 0; $cnt < 10; $cnt++) {
7.         $connection = mysql_connect($hostname, 'username', 'password');
8.         mysql_close($connection);
9.     }
10.    $endtime = microtime(true);
11.    echo ($endtime $starttime . "\n");
13.    $starttime = microtime(true);
14.    for($cnt = 0; $cnt < 10; $cnt++) {
15.        $connection = mysql_connect($ipaddress, 'username', 'password');
16.        mysql_close($connection);
17.    }
19.    $endtime = microtime(true);
20.    echo ($endtime $starttime);
21. ?>
Below is the output I got when I ran the above script on my test bench.

3.14003 seconds (time taken for 10 mysql_connect calls when hostname was used)
0.01396 seconds (time taken for 10 mysql_connect calls when IP address was used)

As you can see in the results, hostname resolution slows down mysql_connect significantly and the performance hit seems to happen on each mysql_connect call. This slowdown only happens when connection is made to a remote machine. When MySQL and web server both ran on the same machine, there was no performance difference between hostname and ipaddress case. So if you are running MySQL on a remote machine, use IP address in the mysql_connect call. Alternatively you can add an entry in %windir%\system32\drivers\etc\hosts file to tell your system IP address of MySQL machine. System will find this entry in the hosts file and pick the IP address of MySQL box directly without going through more expensive name resolution. Change hosts file only if you have a static IP address. Name resolution performance will depend on your DNS/WINS configuration and on your network topology. So you should run the script above to find out performance impact of hostname resolution before making any changes.

Hope this helps.

Work items collected from Tek-X

Last week I was in Chicago in the company of very passionate and smart PHP programmers at Tek-X. I got to meet some well-known members of PHP community and also fellow Microsoft employees who have been working on improving PHP experience of Windows. I would admit that meeting people was the best part of Tek-X for me. Sessions were great too and I learnt a great deal from them. I returned to Seattle more knowledgeable and passionate for PHP then ever. One of the things I wanted to get from Tek-X was a list of problems PHP users face on Windows so that we can work on solving them. Below is the list of work items I collected during informal discussions, questions during my talk and from other sessions.
1.       PHP 5.3 in WebPI
Today, Web Platform Installer (WebPI) only offers latest version of PHP 5.2. Folks want us to offer PHP 5.3 through WebPI. We receivedthis request during web developer summit and work for this is already in progress.
2.       PECL extensions in WebPI
There are few PECL extensions which are very popular (e.g. XDebug, uploadprogress) and people want us make them available in WebPI.
3.       WebPI to download PHP from windows.php.net
During my WebPI demo, Derick Rethans pointed out that we are downloading PHP from http://sourceforge and not http://windows.php.net. We used to install PHP from windows.php.net but moved recently to sourceforge when windows.php.net went down for maintenance. We will move back to windows.php.net once it has mirrors set.
4.       SQL driver for PHP extension on PECL
PHP community is very happy with the fact that WinCache source code is in PECL repository and documentation is exclusively available on php.net. They want SQL driver for PHP extension to move from codeplex to PECL. Even better will be moving related documentation from http://www.microsoft.com to http://www.php.net as well.
5.       PHP frameworks in WebPI
During my talk, people asked if there are any plans to add popular PHP frameworks like CakePHP and Zend Framework in WebPI. If a PHP application code already has framework code included, WebPI will just copy that as part of application install. Right now there are no plans to offer standalone PHP frameworks from WebPI. I will be discussing with the product team and see if this makes sense for us.
6.       Simplify setting up of PHP build environment on Windows
Many at Tek-X made fun of the fact that compiling PHP on Windows is incredibly hard. I have published a script (winbuild.bat) which makes this very easy. I will continue to produce documentation/scripts related to this unless building PHP on Windows is seen as a simple task.
7.       CHM file for PHP documentation script
Gennady told me that script which pulls in php.net documentation and creates a CHM file is broken and need some fixes. He loves access to php documentation even when offline and want the script to work. I will be looking at it and try to fix it.
8.       Pre-built PECL binaries for Windows
http://pecl4win.php.net has been down for ages. Many showed frustration with the fact that pre-built PECL binaries for Windows are hard to get. Pierre has few extensions built regularly and has them available for download here. Getting binary for an extension which is not available here is as easy as sending Pierre an email. If you want to build the PECL extension yourself, you can follow the instructions here. We still need to look into pecl4win.php.net or its replacement plans.
9.       Getting operating system information from PHP is hard
Elizabeth Marie Smith, in her awesome Cross Platform PHP talk, mentioned that getting system information on Windows is hard. I will be following up on this and make fixes to PHP as needed.
10.   Debugging dependency check errors is very hard
Elizabeth Marie Smith mentioned this in her talk. I will look into this and see what can be done.
I will be following up on each of these and hopefully will close on most of these requests before Tek-2011J. If this list doesn’t capture something you need for better php on Windows experience, please leave a comment and I will add it to this list.