Tuesday, September 28, 2010

Microsoft Company Meeting 2010

Best. Company Meeting. Ever.*

(*excluding the classic Company Meetings, especially the one where Cheap Trick played afterward.)


-- Comments

Monday, September 27, 2010

Here Comes Microsoft Company Meeting 2010!

Hello, SafeCo Field! Another year, another Microsoft Company Meeting!

Anyone who has read this blog for a while knows that I'm a big fan of the Company Meeting, though I have to admit this is the first year I've thought of skipping and just go out for some beers instead. Well, instead I'll peruse the past and conjure up some enthusiasm:

Alright, I'm in. So what is there to talk about going into the Company Meeting?

No Elop: yeah! So no repeat of last year's late-night telemarketing demo unintentional-skit. In fact, we might have one big demo cut altogether...

Unique Demos: anyone who repackages a demo from earlier in the year should just get boo'd off-stage. Any demos should be new and quick quick quick.

Dreading Mundie: please spare us. If the Company Meeting had a chatter meter for when the audience stopped paying attention and started talking with their seatmates, this would be the peak.

WP7 Microsoftie Demos: I think it would be sweet and smart to have some of the top-notch Windows Phone 7 apps created by Microsofties - under the application developer program to support employee apps - get up on stage and do 1 minute demos of their apps. Microsoft exists only due to the great work of the geeks who work there - celebrate it.

Financials: a nice review of *profits* from the various groups.

Stealth Layoffs: are we done yet? I'm all for making Microsoft a smaller company, but not at the morale busting cost of layoffs lurking around campus like the Spanish Inquisition. It will eventually take a toll on people considering moving to groups that are in a start-up mode with unclear Senior Leadership Team support.

LisaB: she tried something big, Ballmer didn't go for it, and then she faded and became busy with layoffs. And her basketball team. Ms. Brummel kicked off another Listening Tour this year. Now would be a good tie to roll-up any insights and results. What is my dream result? Team based awards. And it's pretty simple.

Every VP-level person has to stack rank their organizational teams, top to bottom. For Sinofsky-fied product teams, this would be at the Dev Manager / Test Manager / General Program Manager triad level, typically defining a product team such that every product team get a rating. Every team gets ranked just like individuals and the team gets a rating just like you and me: Exceeded / Achieved / Underperformed and 20% / 70% / 10%. This - along with the concise VP-level written evaluations - gets pasted into every team member's annual review and part of the overall bonus / stock compensation now comes out of this result.

The reasoning: strong, well-run and results-producing organizations should be rewarded. And poorly run, low WHI organizations should be disinfected with some mighty strong corporate sunlight. When it comes to informationals with new teams, you can ask: "What was the team's rating last year?" in addition to MSPoll results.

Reviews: as long as we're on LisaB and HR: how about them reviews this year? At least we had merit increases back. If you're feeling a sharp-blow about your results and you're up for an interesting point of view (along with a bunch of other good things), I suggest reading Philip Su's goodbye note for leaving Microsoft and joining Facebook: Goodbye Microsoft, Hello Facebook! « The World As Best As I Remember It. (you might remember Mr. Su from the high-profile post-Vista blog-post Broken Windows Theory). That whole post is worth discussing soon. As is the always popular observation: if you're not happy with Microsoft, there's abundant opportunity around you. Try checking it out.

Ballmer vs. The League of Meh. Maybe because we have a lull with our major product groups either coming in for a landing (WP7, Natal) or just taking off (Office 15, Windows 8) that my circle of friends have hit a patch of corporate ennui like never before. True, some of them work on products way on the fringe but others work on some pretty core products and they are feeling... full of meh.

I still believe that Microsoft has turned the corner. Or, as someone else wrote this week, it has turned the tanker: The Microsoft Tanker Has Turned and You Ignore it at Your Own Peril. Why this meh? First of all, the stock: if you are investing in the success of Microsoft, you cannot underestimate the power of the stock to energize the employees to create break-through results. We had great quarterly earnings and what did the financial market say? "Meh." Maybe they started it. Part of it I'm sure is that even though we've turned the corner, sometimes we screw up and spill the Big Gulp in our lap and skip the curb and take out a mailbox (KIN). That startling inconsistency to deliver focused results I'm sure puts fear and doubt into Wall Street, and if there's one combination that Wall Street underperforms dealing with it's fear and doubt.

After the dismissive reaction to our last quarterly results, we had article after article written about Microsoft's Lost Decade, covering how poorly Mr. Ballmer and The Board have been doing running Microsoft and calls for their dismissal. That's not cool, and if anything, it's draining. Under that context, to see Mr. Ballmer screaming and running around high-fiving a bunch of MBAs riding our two cash cows until the milk's dried up is challenging to your self-motivation.

Going back to my friends: some are very loose in their seat, and others have already left to enjoy unfettered engineering (one in particular happy to realize how much unexpected joy results in the 'make Partner or take the 10%' cloud going away).

I expect a CEO like Mr. Ballmer to revisit his previous Company Meeting talks and discuss where those ideas are now. Some of those ideas were quite exciting, but went... where? Otherwise, without the follow-through I guess this is another throw-away show that's in-between me and my beer.


-- Comments

Thursday, September 23, 2010

Tutorial: Undocumented behavior of kernel functions min()/max()

I was recently reviewing some code written to be shipped with AX6, and noticed an unfamiliar pattern being used in it. I investigated a bit deeper, and turns out it actually works fine on previous versions of AX as well.

I am talking about 2 kernel functions for finding the maximum or minimum of the specified values.
The signature of these methods is shown on the below image:

As you can see, it takes 2 arguments of anytype, and returns an anytype which is the largest of the two values. But it can accept much more than 2 arguments, even though it is not documented as such.

I wrote a small job to showcase this behavior. The code is provided below. You can also download it from my SkyDrive Dynamics AX share.
static void Tutorial_MinMaxFunctions(Args _args)
{
#define.ArraySize(11)

Random rand = new Random();

int counter;
int arrayInt[#ArraySize];
str arrayIntAsString;
int arrayIntMaxValue;
int arrayIntMinValue;
;

for (counter = 1; counter <= #ArraySize; counter++)
{
arrayInt[counter] = rand.nextInt();
if (arrayIntAsString)
arrayIntAsString += ', ';
arrayIntAsString += int2str(arrayInt[counter]);
}
info("Generated array of integers: " + arrayIntAsString);

info("The typical way to find a maximum is by looping through all the values one by one, calling the comparison function multiple times");
arrayIntMaxValue = minint();
arrayIntMinValue = maxint();
for (counter = 1; counter <= #ArraySize; counter++)
{
arrayIntMaxValue = max(arrayIntMaxValue, arrayInt[counter]);
arrayIntMinValue = min(arrayIntMinValue, arrayInt[counter]);
}
info(strfmt("Max.value: %1 and Min.value: %2", int2str(arrayIntMaxValue), int2str(arrayIntMinValue)));

info("Using max and min with 11 arguments works just as well");
arrayIntMaxValue = minint();
arrayIntMinValue = maxint();
arrayIntMaxValue = max(arrayInt[1], arrayInt[2], arrayInt[3], arrayInt[4], arrayInt[5], arrayInt[6], arrayInt[7], arrayInt[8], arrayInt[9], arrayInt[10], arrayInt[11]);
arrayIntMinValue = min(arrayInt[1], arrayInt[2], arrayInt[3], arrayInt[4], arrayInt[5], arrayInt[6], arrayInt[7], arrayInt[8], arrayInt[9], arrayInt[10], arrayInt[11]);
info(strfmt("Max.value: %1 and Min.value: %2", int2str(arrayIntMaxValue), int2str(arrayIntMinValue)));

info("Note that comparing an integer and a real also works, as well as outputing the results straight into an infolog message");
info(max(12, 12.001));
}

Another interesting point is that it can actually accept different types of arguments, for example, a real and an integer, as shown above. And it actually returns an anytype, which implicitly gets converted to a string when sent to the infolog.

Disclaimer: Since this is not a documented feature, it can theoretically change in the future releases, but I doubt it in this particular case.

Friday, September 17, 2010

Microsoft Annual Review 2010

Just a quick post: some of you enjoy posting information relevant to your review, both looking at numbers and a critical view of the message given to you. It has started to happen a bit in the last post (I'm going through the comments now) so I'm just going to capitulate (again) and put this small post up for the 2010 Annual Review share and compare. Yes, this is a bit late.

Oh, and obviously grab yourself a few grains of salt. Folks seem to like this format:

  • L# (promo'd?)
  • (Exceeded|Achieved|Underperformed) / (20|70|10)
  • Bonus $K
  • Stock $K
  • Merit % (/Promo %)
  • Optional comments about Division / Group, discipline, impression of review

Administrivia: yeah, that was another long pause moderating and posting and all that. I was on an extended vacation that continued as an extended vacation of the mind. My apologies. I've got at least one short post in mind before our Company Meeting 2010.