Thursday, December 3, 2009

Correct KernelFunctions xpo

Hey, guys.

Just a small update on my previous post on Kernel Functions for those interested.
I have now corrected the link to point to the right xpo.
It was previously pointing to a parser class I used to get some of the functions in.

Sorry about that :)
The uploaded xpo is compatible with AX 2009

Wednesday, November 25, 2009

Kernel functions exposed through BC.NET

BC.NET is a great feature of Dynamics AX. It allows to access the AX application from any external application that supports .NET, and provides a rather rich functionality out of the box.
But one feature that is missing in BC.NET is the ability to call AX kernel functions, like fieldId2Name, num2str, decRound, etc.

I needed to use these functions in my code recently, and in order to access them, I created a class in X++, that simply wraps the useful functions in static methods, kinda like the ones that exist in class Global.

Download Class_KernelFunctions.xpo

You need to import it into AX before using, of course. This can be automated, if you don't want to include this XPO as part of the package you deliver to your customers.

Now you can call it through the Business Connector the following way:

Axapta ax = new Axapta();
ax.Logon("ext", null, "localhost", null);
// num2str(123.45, -1, 2, 1, 1);
Convert.ToDouble(ax.CallStaticClassMethod("KernelFunctions", "num2str", 123.45m, -1, 2, 1, 1));

Tuesday, November 24, 2009

SysCompilerTarget - compiling X++ code without showing the compilation window

I have been posed with a question about how to avoid showing the compilation window during compilation of some X++ code (When doing compilation from code, naturally).

So I decided to post a possible solution for this question, re-using one of my previous posts about ClassBuild class.

Basically, AOTcompile method on TreeNode class supports an optional flag, controlling the compilation output:
An integer that indicates whether output should be sent to the message box. If the value 1 is passed, no output is sent to the message box. The default value is 0. This parameter is optional.

So all we need to do now is change the compilation output target to Message Window. Looking at the SysCompilerSetup form code, it's rather easy to come up with the following code:

static void SysCompilerTargetExample(Args _args)
ClassBuild classBuild;
DictClass dictClass;
SysCompilerTarget targetOrig;
// Setting Compilation Target = Message Window
targetOrig = SysUserInfo::compilerTarget();

// Building the class with 1 method
classBuild = new ClassBuild("TRN_ClassBuild", false);
classBuild.addMethod("test", 'void test()\n{\n}');
classBuild.addSourceToMethod("test", @"
info('We created a Class and can call its methods');");

// The actual compilation. Note the _flag argument == 1

// Call the class method to show that we are done and the code is compiled
dictClass = new DictClass(className2Id(;
dictClass.callObject('test', dictClass.makeObject());

// Restoring Compilation Target to its original value

Don't forget to restore the original settings after the compilation is complete, as shown above.

Friday, November 6, 2009

How to quickly set up Application Integration Framework (AIF) for testing Axd documents

Purpose of this post
Part of the test effort on our team at MDCC goes for verifying the Axd documents shipped with the Dynamics AX application.

As many people find it hard to setup AIF, I have tried to help them by creating an automated way of doing the initial setup, which can be used for testing the documents using a 1-box setup and FileSystem transport adapter.

Download link
From the following link, you will be able to download an X++ class that initializes all the entities required for AIF to work, like the endpoints, transport adapters and channels, services, their actions and action policies.
Note, that since I am working on the Inventory team, I am filtering out the services accordingly. You can easily extend/modify this to suite your specific needs by changing the filter or adding new ones in classDeclaration and method main

Download xpo

Example from the standard application
To give a specific example, I encourage you to try sending a selected item electronically in form of an XML file right after executing the job.
To do that, navigate to Inventory Management\Common forms\Item details and press Send electronically button. Fill in the values for endpoint, filter on a specific item(s), and press OK.

Your screen should look similar to this:

Processing the document
The document is successfully placed into the queue for processing and sending through the gateway. If you have a batch job for processing AIF services up and running, you will soon see a file in the outbound files folder setup on the outbound channel.
If you would like to learn, how to set up the batch jobs for this, follow the below link: Start and stop the asynchronous AIF services

In order to avoid having to set the batch jobs up, I have added 2 extra methods to the class for starting the processing of inbound and outbound messages.

public static void ProcessOutboundDocuments()
new AifOutboundProcessingService().run();
new AifGatewaySendService().run();
public static void ProcessInboundDocuments()
new AifGatewayReceiveService().run();
new AifInboundProcessingService().run();

Just call the DEV_AifInitialSetup::ProcessOutboundDocuments method from a job, and the document will be automatically processed and sent on its way to the outbound documents folder.

The resulting XML file for the item should look similar to the following:

Wednesday, November 4, 2009

Microsoft Layoff 2009 Completes Last Milestone and Ships!

With today's 800 Microsoft layoffs, Microsoft Layoff 2009 has reached its final milestone and shipped, exceeded expectations of 5,000 with 5,800 reduced positions.

Err... yay?

Last week during the Town Hall Mr. Ballmer confirmed there would be one more iteration on the layoffs. And after that? Who knows. More to come? Maybe. Booga booga!

You know, we have people working for Microsoft (or, at least did, I don't know, maybe no longer) responsible for driving executive leadership education and growth at Microsoft. This is their friggin' job. Develop Microsoft Leadership at the executive and L68+ levels. So, has anyone hemmed and hawed in-front of Mr. Ballmer and mentioned that this nickel and diming layoff approach is at the worst case end of the layoff management scale?

The looming threat of continuing RIFs and layoffs indicates that Microsoft is just too big for its leadership. It is beyond their capabilities to wrap their minds around everything Microsoft is doing. It has gotten away from them. What needs to go? Hell, I don't know even what all these people do, and you want to decide who stays and goes?


Cut deep. Cut once. Get on with it and say, "We're done. We have aligned our company to be efficient and effective within this new global economic climate and are ready to focus on returning to profits and market share growth."


Coverage I've noticed today on the outside:

On Don Dodge:

And, bummers for me given that she interviewed me for Microspotting, Ms. Ariel Stallings tweet about being caught up in this layoff round.

Coverage from the inside? No email. Quiet. Quite dysfunctional. There was something linked off of the MSW site and it also had a FAQ document that had to be one of the worse FAQs I've ever read. There is an "A" portion to an FAQ and in this case some of the questions were great but the answers looked like they were generated from some sort of English obfuscation Perl script 3rd place prize winner.

So, I'm going through about sixty comments now on the older post. I think it was necessary for Microsoft to have layoffs due to the mismanaged growth and lack of focus and direction our Senior Leadership Team has given us. But it should have been twice as much, done all at once. Now we dither.

Were you affected by the layoff or know someone who was? I'd be interested in knowing which groups and organizations are affected.

-- Comments

Monday, October 26, 2009

Mock objects implementation for AX

As you might now, I am working as a Software Development Engineer in Test at Microsoft Development Center in Denmark.

But the only real test framework that comes with AX is the SysTest framework (you can read more about it here).

Below you will find another framework for Dynamics AX, that was written by one of the members on my test team and allows to implement and use mock objects for testing the AX application.

More information and download link

It would be great if you could try it out and provide your feedback here or directly on the author's blog.

Thursday, October 22, 2009

Running a class from AOT or "How to assign a class to an action menu item?"

OK, so this might seem as a very simple question for many of you.

But, in reality, I still now and then meet people who have worked with AX for quite some time, but don't know this very basic concept.

Therefore, I just want to briefly describe it here to refresh everyone's memory

Apart from allowing to run the class from AOT, this will allow to assign it to a menu item (according to Best Practices, it should be a menu item of type Action), and run the class using this menu item.

Below is the correct syntax of the main method:

public static void main(Args _args)
//Your code here

Please also note, that there is an editor script that contains the template for the main method. You can invoke it from Scripts->template->method->main

Tuesday, October 20, 2009

Windows 7 and a Grab Bag of Microsoftness Before FY10Q1 Results

October 22nd 2009. Windows 7. The circle is now complete.

What is Windows 7? There's a lot that Windows 7 is (oh, it's faster, it has an improved task bar, peeking, snapping, homegroupin', stable drivers and some pretty freaky desktop pictures) but the big thing that it isn't is that Windows 7 is not Vista. It didn't suffer Vista's raging dysfunctional mismanagement and broken windows. It didn't require a reset. Sure, it wasn't perfect and there's a lot of improvements yet to be made in focus and team productivity, but the Windows team delivered. So toot that damn horn, because this here train is arriving on time.

With FY10Q1 announcements coming this week and along with Windows 7, I hope we have a lot of good things to talk about with the analysts. Google and Apple and Yahoo! certainly did. Usually we release our quarterly earnings on the appropriate Thursday afternoon, after closing. It is unfortunately disturbing that we've decided to release our FY10Q1 earning results instead on this Friday morning before trading. I say disturbing only because the last time we did this, a whole bunch of Microsofties were pulled into a layoff. Now... hopefully this earnings report is delayed so that we can have this Thursday the 22nd be all about Windows 7 and not our financials. And I can not imagine that we (and by "we" I mean the Microsoft Senior Leadership Team) would be so dumb as to release our flagship product on a Thursday and turn around and fire a bunch of people the next day.

So, anyway, what's in the mix as the financials come up this week?

Windows 7: check. Thank goodness for SteveSi. I certainly hope he gets paid a lot more than Robbie Bach this year.

Within the Windows 7 reviews, there's going to be a point-of-view that the operating system is dead, which is, ah, kinda dumb. Your web browser isn't going to bootstrap that Intel CPU on its own. What might be dead is rich applications, which is a fair argument and Microsoft is failing to provide much in the way of new rich applications. In fact, we are cutting them one by one (Money, Encarta... Streets, you best watch your back). Sure, there's a transformation to online replicated services and all, but we really need to convince our consumers that there is a strong worth in having a Windows 7 on your laptop so that it's not a fancy glowy brick when the internet is down.

Kindle? Wouldn't it be sweet if we had a nice ebook reader application? We could call it... mmm, Reader?

Windows Live is supposed to help with building value via rich applications. Live has been broken out of Windows to free it from the consent decree and all ('cept for sneaking a Win7 component out early, wink-wink). Messenger, Mail, Photos, Movies, and an awkward online service. And Live Writer (though rumored a dead-man walking per comments).

It's a fair start, and if I had my druthers OneNote would move out of Office and into Windows Live to be the essential authoring companion to the Windows experience. Windows Live Essentials is a good start, but to add some joy into owning a Windows machine, what we need just as urgently is Windows Live Non-Essentials.

Joy. There's a concept just asking for a planning pillar. How strangely would your coworkers look at you during spec reviews if you asked how joyful the feature happened to be?

Windows 8: speaking of planning! The Sinofskyfication of Windows continues, along with alignment around his good lieutenants.

Office: hey, hey, hey, there's a Beta on the way. The Office train lost its conductor but it mostly seems to be still on track. Though trust me: Office wants its Steven back. Bad.

Mobile: Holy. Crap. I don't think we have any unbruised skin left on our body to take any more lumps regarding our mobile strategy. The Microsoft Mismanagement theory is in full force as we throw any willing body into the Mobile effort. Something good has to come out of those typing monkeys, rights? Windows Mobile Phone 6.5 or whatever the hell it's called didn't win any "Wows" and I discovered 1:1 the worst question to ask is, "So, can I upgrade it to Windows Phone 7?"

Look. Let's talk about device loyalty. I first started with owning PocketPCs. An HP Jornada. I loved it. When upgrade time came, HP had bought Compaq and abandoned the Jornada for the iPAQ (what, they had the iThing first?). So, unable to upgrade to the next CE, I cursed a little and bought one of those iPAQs. But HP decided not to allow it to be upgraded. So I switched to Dell to get their latest Axim PocketPC. Dell would be a safe bet, right? And Dell gave up on the line. My latest act of company loyalty: getting a powerful HTC WinMo 6 device. It was cut-off the 6.5 train, and soon, I'm going to be buying a new phone.

And I'm going to buy an iPhone.

I hate it. I hate to think that I'll be installing Apple software on one of my computers because their PC software is so inelegant and buggy (check Watson). I hate that I've been so loyal to the PocketPC platform and Windows Mobile but I've finally had my chain yanked for the last time. I'm not buying a 6.5 device only to have it abandoned when 7 comes out. Microsoft is doing nothing to convince me that it's going to get any better. We suffer through rumors that Pink is imploding and issues with Sidekick data doing disappearing acts while our CEO has conniption fits over Microsofties sporting iPhones. Dude, this is why.

In this case, Microsoft is going to have to earn me back and convince that not only do they have a better experience and better quality phone but that they also won't kick me off to the side of the road when a new release comes along, spinning a sad tale that the carriers make all the decisions.

Dev Div: If I had to sit down tomorrow and write a casual application for the PC, my mind would fork itself in about five different directions. Native with ATL? WPF? Silverlight? An HTA? And what's up with XNA? If I want to write an app for the Zune (which Zune?) what do I do? And can it run on some future mobile device? And the PC? And Xbox?

And how do I share it? How do I sell it? And, ah, crap, you mean you just released a whole new version of C# / Silverlight / XNA that I have to go and relearn? Maybe those free Starbucks coffee dispensers wasn't a good idea...

If anything, I'd probably be pretty damn tempted to invest time learning Adobe AIR. And I'm thinking that while smack dab in the middle of the Microsoft bubble. There are a lot of Partners in Dev Div, and I'm not seeing any benefit from their concentration. The Windows client should be the premiere development platform. It's not. What am I missing?

Are We There Yet? Are the layoffs over? Has Microsoft stabilized? Of course, I'd be satisfied with another 10,000 or more positions being eliminated. But I want it done in one fell swoop, like all the conventional wisdom out there dictates, so that the remaining work force can align itself and get to work and not constantly worry if their group is next. If we're going to continue this quarterly rhythm of maybe-layoffs, maybe-not then morale is going to get seriously poisoned. Let's finish this round and call it done.

Ballmer: well, Mr. Ballmer, if you ever wanted to leave on a high-note, this is it. I'm frustrated because when you hear Steve 1:1 you know that he gets it. He knows some key strategies and things that need to get done. But then Yahoo! happens. Vista happens. Over-exuberant hiring happens. Layoffs happen to shed off the over-hiring. And a flat stock price happens. So something is seriously not connecting between (a) when you hear Steve talking and (b) when he makes major decisions. Hmm. Maybe it's something about guys named Steve having localized reality distortion fields.

This week, as we celebrate Windows 7, you do see an undercurrent of knife-sharpening while examining Mr. Ballmer.

The biggest question still out there: just who would you replace Ballmer with? If a shareholder revolt was to actually happen (shyeah, right) who would be the right choice to lead Microsoft? There is no heir apparent. And no obvious motivation to find one. But wait. Maybe, just maybe... you know, we'll have to wait and see and discover if Steven Sinofsky's upcoming book One Strategy! has a chapter on 'How To Become the CEO of a 100,000 Employee Company' (hopefully followed by the chapter 'More With Less - How To Transform a 100,000 Employee Company Into a 70,000 Employee Company').

Any fireworks you're expecting this week of Windows 7 and Quarterly results?

-- Comments

Monday, September 28, 2009

New AX blog in da house

Most of you probably don't know Denis Fedotenko, but he is a well-respected member of the Russian AX community with multiple incredibly detailed articles about SCM functional areas.

He has recently started translating them to English and posting on his web-site,

I highly recommend all of you to visit the link above and read the articles already posted there.

Thursday, September 10, 2009

Quick Thoughts on the Microsoft 2009 Company Meeting

Some quick comments on this year's Microsoft 2009 Company Meeting.

First, how did my six hopes for the Company Meeting hold up?

  1. Steve Ballmer comes out first to set the context for the meeting in light of a pretty awful FY09 Q3 and Q4: Zilch.
  2. Practical vision: well, Craig and Ray did seem to focus on the practical aspects of product groups, research, and inbetween the technology transferring power of the labs groups. Seemed practical. But then there was that whole Avatar assistant thing that no one around me felt like was real: one-half.
  3. Demos are short, sweet, powerful... sorry, but Elop's demos sucked the life out of entire stadium. Some were good, and some were really really short. So: one-half.
  4. Show us the new stuff. Hey, we did get to see some new stuff. Bing. Zune HD. Map goodness. No Halo. New ad cuteness. But it was still conservative. Hmm. How about: three-quarters realized.
  5. New simple review system? Phffft. Not unless thwacking balls w/ your avatar is our new review system. 160 for that. Zero for this.
  6. Serious wrap-up by Ballmer. Zero.

Add that up and we get 1.75/6.00 - hey, almost one-third realized.

Now, I'm not going to go into revealing anything all that interesting that happened in the meeting. Just my general impressions of the day.

Kevin Turner was first and, well, I'm kind of tired of the "ThankYou"s by now. He did take on the job of addressing the tough year and I believe he said some things that really surprised me. Growth hides mediocrity being one of them. That we over hired. Sure we all thought it, too, but to now go and put on the 20/20 glasses and speak it in front of the company gives me hope (hmm, need a new word) that it won't happen again. Same with the realization that you shouldn't start up doing work in good-times that you know you'd drop and cut during bad times.

Dr. Qi Lu might be my favorite techie right now. I was impressed with what he's brought together for Bing and what's coming and how he has focused the team and adopted some of the new technology that Satya was showing. Who the hell thought we'd be feeling so good about our search decision engine? Ever?

Elop. Steven. Baby. Dynamics. XRM. Really? What did I do to you to have that forced down my eyeballs? I'm pouring another glass of wine right now hoping I can kill whatever brain cells are still connecting this demo memory together. Geez. Did anyone give you advice that this was a bad idea? If so, keep listening to them. If not, you're seriously lacking good reports willing to give you honest feedback.

Robbie Bach did okay, but I can't say the demos blew me away. The table-top demos were full of slick sparkly presentation but... it was all stuff I've seen one way or another so nothing new there. He missed a golden opportunity for Microsoft-Fan-Boy love to go and have someone play Halo:ODST on stage or show some great Zune HD apps.

Bob Muglia. What did he talk about? I remember the real cool tech for traces and then WinDiff. Did he talk about how we're losing the edge on client development for Windows and how it's all a confused multi-SDK technology mess centered around everything being .NET based?

Sinofsky went pretty fast - when in doubt, load up the stage with a bunch of new, cool technology and play with it. I loved the reveal on the Mac Air case ("It's aluminum!"). And I think Steven gets the best line for when the train let loose its blaring whistle he said something along, "This is where someone mentions about the trains running on time."

Craig and Ray: it was nice that they switched up their presentations - that added some energy. But not enough. It seemed a lot more practical this year, other than what I mentioned previously about the whole very well staged Starfire demo. I hadn't seen that in like... over ten years.

And then Steve Ballmer. I've got say, at this point in the day I was pretty much in a "Where's mai KoolAid" funk until Mr. Ballmer came on stage and started presenting. I feel this is a big transitional year for Microsoft. I've said we've turned the corner, but that doesn't mean we're out of the bad neighborhood yet, nor are we incapable of making bad decisions all over again. The second half of FY09, and what we are still enduring as part of the economic crisis, has provided a certain level of alarmingly crisp clarity to refocus, and I believe Ballmer's presentation served for about as much focus we're going to see in the near term.

And I like how he ended his presentation. How do we feel? He reflected on how Microsoft is not a normal company and that its employees have an unnatural emotional attachment to it (yep, that's true - it can cause them to have all sorts of crazy reactions and do crazy, passionate things). How do you feel? Steve, well, he wants you to feel good about where we are, what we're doing, and where we're going.

I must feel good, because I have hope.

(Oh, by-the-way, if you see Mr. Ballmer walking your way: hide you iPhone. Trust me on that one.)

Additional links:

-- Comments

Wednesday, September 2, 2009

Six Hopes for This Year's Microsoft Company Meeting

(Updated below for the Extra-Long-Labor-Day-Vacation-Layoff of September 3rd 2009)

I'm one of the biggest Microsoft Company Meeting fanboys *evah*, but even I'm surprised that we're having a full-blown Company Meeting this year at Safeco Field in Seattle. I thought it and MGX were going to be cut without a second thought given the economic reset we are all enduring. I'm wrong. Given that it is happening, it's my opinion that this year's Company Meeting sure can't be a clone of last year's. I mean, last year's was great and everything... but now our everything is different.

I think about the context around this year's Company Meeting. There is what the crowd brings, what the crowd expects to see, and what the Senior Leadership Team (SLT) wants to accomplish with this meeting. Look, against this current economic tide the Microsoft SLT is putting on the Company Meeting. There has to be a pretty big goal they are shooting for, not just rah-rah party-demo time.

Because there are two very large elephants sitting down front and center with the hand-picked floor crowd. Two grumpy elephants with very good memories, one of January 22nd 2009 with 1,400 Microsoftie layoffs and the other with May 5th, 2009 and 3,600 further Microsoftie layoffs. Folks are going to come into Safeco, grab their box lunch, sit down with their co-workers and friends and as they fold their pink paper airplane, they are going to remark, "I can't believe they are spending all this money for today. <<Fill name in the blank>> and more could have kept their job if they just cancelled this horse and pony show."

These folks might have on their Proudly Serving My Corporate Masters buttons, but they've scratched out the Proudly part. They are staring at the grumpy elephants, and are looking to the SLT for some serious L.

I'm just imagining what corporate baggage people are bringing in during the Company Meeting. Maybe they were part of the original 1,400 and had to scramble through interview loops to find a new Microsoft position. To be clear: I wanted cut-backs when we were in the 50,000 range of employees, let alone approaching 100,000. 100,000, man. That's crack-pipe craziness. Had we been more prudent and efficient over the years, we wouldn't have reached the stage where the light bulb went off over Ballmer's head and he said, "I know... layoffs!" We got bloated and we cut, and we should cut more. But our leadership shouldn't have gone down that crack-pipe path to begin with.

Anyway, looping back to the 2009 Microsoft Company Meeting, some of my hopes and expectations:

One: I expect Steve Ballmer to come out front first, before any other Microsoft leadership, to speak the truth about the last year and where we are now. He must acknowledge it starkly. We had layoffs. We had inefficiencies. Positions had to go due to the economy being unable to sustain those parts of the business. There are people missing this year that, last year, were some of the biggest Microsoftie fans.

And, there are people here this year that will not be in the audience next year.

Take that in.

With success in the middle of hardship, this is a rare opportunity to enact change in Microsoft culture and recalibrate to being efficient and streamlined. I want Ballmer to get out front and say, "Today, we're celebrating our success of Windows 7. From this success we are learning and we are acting. We're learning why it was a success, how to do even better, and then taking those lessons and putting them into practice. In Windows. In Office. In Dev Div. In all of Microsoft. The rest of today we will not only tell you where we are and where we are going, but we're also going to discuss honestly how we're changing to be an efficient, streamlined company that smartly uses its successes to leverage good change. For the benefit of the company, our customers, our shareholders, and our employees."

Two: Any vision this year has to be practical and realized with one, two, or at most, three years. And, closing the loop on accountability, there's a discussion and a review of how the vision of the past has brought us to practical results. The pie has come down from the sky and now it's time to eat.

Three: demos are short, sweet, powerful, and made especially for a crowd of some of the smartest (plus good looking) people on earth.

Four: if it's new and hot, we get to see it now. That new Halo game. Zune HD. Stuff that even Beta testers haven't seen yet. Give us some reward for actually working for Microsoft and being excited about seeing things that are new and known by very few. Hell yes we'll tweet and blog about the coolness. And to assuage any anxiety over that: happy, enthused Microsofties sharing their enthusiasm for Microsoft with the world == a good thing in this day and age.

Five: a short introduction by LisaB of the new, efficient, streamlined review system: a simple Word document that let's you cover what you were responsible for, how you did, and your manager's assessment. Hey, I can dream.

Six: wrap-up by a serious Steve Ballmer. No running around high-fiving people or shaking his fists in the air to get a "YeAAAH!" from the crowd. But rather a serious Ballmer who covers what we've been through, how we're going to change, and a re-enforcement for the success at Microsoft being something that has to spread through-out the teams.

After the Company Meeting, I intend to sit down at Pike Brewing and ponder over: what did the SLT intend to accomplish this year at the Company Meeting? How are the Microsofties attending better for having been there?

My concern is that the template for the meeting this year is the same as it ever has been, with some comedic hijinks, Kevin Turner covering all the "gooood" results that we should be fired up about, music, Liddell's financial review, an opaque speech by Ozzie, very late arriving busses full of people wondering why we can't figure out traffic control, rambling demos of misbehaving and barely competitive technology, paper airplanes smacking the back of my head, and a big cheerleader Ballmer at the end, all screaming and full of gusto... and totally passing over the hardships of this year.

I hope that all doesn't happen, but if it does, later I'll just sit at the bar between the grumpy elephants and drop some tears into my beer while still musing over what the SLT's intentions and goals might be.

What goals and expectations do you have for the Company Meeting?

Addendum: as of September 3rd 2009 it looks like it might be two large grumpy elephants and a little baby elephant:

Weird. How much more than 27? And just who is affected? I don't see it on the WARN site yet. Snippet from Ms. Chan's post:

Microsoft spokesman Lou Gellos said the company is making cuts across the country, but he did not elaborate on how many more jobs in the U.S. were affected.

"I can confirm that part of our effort to reduce costs and increase efficiencies involved 27 job eliminations here and in other regions across the country. While job eliminations are always difficult, we are taking these necessary actions to realign our resources against our top priorities."

-- Comments

Monday, August 24, 2009

“Go to main table” on a RunBase dialog control

In one of my blog posts, I have been posed with the following question:

“how to achieve go to main table on dialog field.
for example a dialog is having a field of lookup custAccount, now what i need to have a go to main table functionality on the same.”

So, the short answer is: It is not possible to override jumpRef method directly on the dialog control. This is due to the fact that in order to show the “Go to Main table” link in the context menu of a control, you need to actually override that method on the form, which is later used to draw the context menu.

There are 3 possible ways that you can achieve the same functionality though, that I would like to briefly discuss here:

  1. Recommended Don’t bother with the dialog. Simply create a form, and override the jumpRef method on the needed control on the form. To demonstrate this behavior, you can use the Tutorial_RunBaseForm class and form. Override the jumpRef method, put the code to call the main form there. And you are done. Simple, and does not require a lot of coding. There is a lot of confusion, where junior AX developers think it will require a lot of code changes to replace a dialog with a form. This is not entirely that hard, as RunBase classes can use a regular AOT form instead of the regular dialog.
  2. Use controlMethodOverload approach, and create the controlName_context() method, which is executed when you try to open the context menu on the specified control. Inside this method, build the context menu from scratch. This way, only the items you want to be shown will be present in the context menu. Note: this means, that standard context menu items, like Setup, will not be shown in the menu (unless you add and handle them).
  3. Use controlMethodOverload approach, as in the previous example, but instead of overriding context() method, override the showContextMenu method. This will allow you to add your custom context menu items to the standard context menu. This does not seem to work on Axapta 3.0 though, and I did not try to figure out why. Note you need to uncomment some code in order to enable this approach (I left a TODO comment for that).

I have made the necessary changes, demonstrating the latter 2 approaches, using the class located under Classes\Tutorial_RunBaseBatch. You can download the xpo here (it contains only the USR layer changes).

The class used for drawing the context menu in the example is called PopupMenu. A good example of how this class can be used in the application is available in AOT under Forms\Tutorial_PopupMenu. Some information, along with another example, is available on MSDN.

A while ago, I have suggested some minor changes to the Dialog framework classes, which allow to simplify the process of overriding control event methods on the dialog. The original post can be found through this link:

Let me know if any of this requires more clarification.

Inside Dynamics AX 2009 – Russian Translation

As you all know, Microsoft has recently released another book on development in Dynamics AX, called Inside Dynamics AX 2009.

For the past 2.5 months, I have been working on the Russian translation of this book, and now I am glad to say that the translation is over and will soon hit the shelves of online-stores. I guess it will also be available directly from Microsoft Russia, similar to the 4.0 version.

The book has gained a lot in weight :) and content. With more than 200 new pages, as well as many changes and updates of the existing chapters, the book is definitely a good investment. New “hot” features of Dynamics AX, like SSRS reports, Workflow, Role centers, etc., are described in the book from a developer point-of-view.

I really hope that my effort will not go in vain, and the book will be helpful to people working with Microsoft Dynamics AX 2009.


Sunday, August 23, 2009

Microsoft Annual Review 2009

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 so I'm just going to capitulate and put this small post up for the 2009 Annual Review share and compare.

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
  • (Promo $K)
  • Optional comments about Division / Group, discipline, impression of review

The promotion budget is significantly less this year meaning that if you got promoted you're really at the top of the heap. If you didn't, well, you're going into a long line.

And as we know: no merit raises this year (though you will get a raise if you're promoted). But bonus and stock awards are the same, ensuring we have the flexibility to reward our top performers.

I would expect that the Underperformed Microsofties have already been managed out. If you are an Achieved/10% then I'd expect you're given a very short term idea of what success looks like and can expect to be closely managed. Great time to update that resume and see what else is going on.

I found a bunch of old reviews of mine recently. Flipping through the review forms started with refreshing simplicity from over a decade ago, rapidly turning into confusing churn (company value ratings and all that crap), to now a fragmented collection of task-driven thoughts. While it's nice that the review form has pretty much stuck to the current form now and we don't have new components coming and going (yeah schema?) it really doesn't compare to the first couple of reviews I did at Microsoft.

Of course, I had great managers who knew how to give concise feedback, both daily and as part of my review. Where you don't have demonstrated collective excellence, you have process.

-- Comments

Tuesday, July 21, 2009

Microsoft FY09Q4 Results

This is it. The wrap up of FY09, coming fresh to us Thursday July 23rd. I'll put this up a bit early in case there are any initial questions, thoughts, or insights regarding how FY09 is closing.

Some of my favorite places to track insights and opinions on MSFT quarterly results:

Topics I'm interested in:

  • Description of efficiency so far and an enumeration of which groups are going to get Sinofsky'd.
  • Assessment of further financial risk at the hands of the EU Commission.
  • Oh, any more layoffs? If not, it would be wise for the SLT - for the sake of employee morale - to close the door on this now.

Given how negative Ballmer has been about the economic reset, I can't imagine any rosy picture painting just yet, even if Intel looks like it has bottomed out and Apple is frantically trying to create as many iPhones as it possibly can.

Sunday, July 12, 2009

Microsoft Has Turned The Corner

I've got to say: in my opinion, Microsoft has turned The Corner.

You know The Corner.

The one that gets us off of pothole ridden Vista Avenue (one street over from Lincoln in Blue Velvet). The Corner that requires Microsoft to shed some of the fat it has layered on recently just to make the turn without flipping. The one that requires a bit of humility for past failings (the aforementioned Vista, Xbox losses & red-ring, Zune's market performance so far, WinMo asleep at the wheel, no coherent brand strategy, search lagging behind for so long, the abandonment of IE after IE6, a confused developer story, a bungled Yahoo! acquisition attempt, etc etc etc).

The Corner that perhaps doesn't get us out of the bad neighborhood, but is at least pointing us in the right direction. What has helped make the turn?

  • Windows 7
  • Bing
  • Silverlight
  • IE EU chutzpah
  • ...and award worthy, coherent ads that aren't a demonstration of how best to destroy millions of dollars quickly.

Redemption takes a while. Time is needed to allow perception to change and to re-earn trust and respect. Once Microsoft was the scrappy underdog playing catch-up against many competitors. Later Microsoft was the dominating OS and application suite, so drunk and arrogant on its own power (pre-monopoly designation) that it made some truly dumb, strong-armed moves (and even worse, did sloppy "nuh-uh!" cover-up maneuvers). After that, Microsoft went from getting beat-up by the US government to the dot-com bust to the development of Vista, reset after the huge effort of XP SP2. The Evil Empire became The Bungler, hatred turning to scorn and frowning distaste. And the EU hurried over to slip in a few kicks to the wallet.

While all of that could have been avoided with competent senior leadership, it at least served as a hard enough whack to the side of the head that even our mediocre leadership took action to aright the ship.

Now we have the potential to start shaking this off and achieving solid, if not stellar, results.

This is happening, too, while the shine on Google is dulling. Rather than pulling an Apple on us anymore, Google has picked up the nasty habit of pre-announcing technology. Guys, you stole the wrong playbook. And, uh, we don't want it back. Plus the government's gaze has moved from the fallen-working-on-redemption of Microsoft to the obvious domination of Google in search and information strong-arming. A dose of the medicine Google's now getting:

Anyway. Let us enjoy this success of Microsoft turning The Corner, all while being a wee bit smaller and more efficient. 5,000 jobs eliminated so far and a declaration from Ballmer that efficiency is his key focus right now. Wall Street likes how that blood in the water tastes so far.

I'm going to start my whole "and we can cut a whole lot more positions" screed in a second. But first a moment to reflect on the flesh and blood people caught up in the layoff mess we've gone through so far. There is certainly a sobering perspective on this within the abundant comment stream of the last post.

It's not their fault they were part of the layoff. It's not their fault that their position was considered part of the inefficient part of the company that was eliminated. I certainly don't blame anyone for wanting to work for Microsoft. Large parts of Microsoft are magical, exhilarating places to be. In its bones, Microsoft is a great company with amazing potential. It's just turning The Corner and directing itself to where it can focus on efficient, lean-mean, profit making products that engage and delight Microsoft customers.

At Microsoft a lot more positions still need to go to achieve efficiency and focus. 15,000 more is my magic number. It's not personal. But to achieve efficiency and resolution of what to focus on with determination, we need a whole lot less people and to publicly admit there are opportunities we will focus on and others we are okay walking away from. ("That's right, Adobe: you can charge as much as you flipping want for your Photoshop line of software.")

For efficient product development: Yahoo!'s Carol Bartz has a good point when she swears like a sailor over having way too many program managers vs. actual developers (overloaded with one program manager for every three developers). <<edit edit edit - this went quickly into the weeds - let me sum up some quick thoughts>> Looking across groups, I still see exceptionally inefficient use of broad, front-loaded thinking and design locked into a 1970s waterfall model that leads to reality and focus coming way too late and a bunch of frantic, mediocre consensus driven crap floating like chunks into an end product. Kaizen. Kaizen. Kaizen. Efficiency is not going to happen as long as we continue rewarding people for this status quo. Shedding a respectable chunk of the company would bring an exceptional amount of upfront focus to our teams and result in high-quality features end-to-end, vs. what we see in misshapen compromise that we can fit in.

Microsoft has turned The Corner. But our car's suspension is still wobbling from the load we're carrying, and while some fine spots of leadership has gotten us around this bend, it doesn't take much for the remaining mediocre leadership to assume that the pressure is off and to get their grubby hands on the wheel and start turning us back towards Vista Avenue. The job isn't done. It's just beginning. We iterate again.

(Oh, and hey, here's a question for you: if you could create a new Microsoft leader based on the best attributes of our current leaders, what would you create? For instance, I'd start by combining the efficient layer-busting profit focused philosophy of new President Steven Sinofsky with the campus design skills of President Robbie Bach. Ideas?)

Administrivia: to subscribe to all comments here, use the following: . While I enjoy providing the freedom of unmoderated comments over in The Cutting Room Floor, I had to turn off anonymous comments for the time being. You can still post unmoderated comments, you'll just need to provide a Blogger ID / OpenID.

CRF: unmoderated comment thread: Microsoft Has Turned The Corner (plus a snippet of what I deleted from this post).

-- Comments

Wednesday, May 20, 2009

Moving RSS from FeedBurner

Hi, subscribers. This is a small notification message.

Just wanted to let you know that I will be moving the RSS feed away from FeedBurner over the weekend, as it does not seem to work correctly with one of the MSDN pages, where my blog is being displayed.

So, instead of the following feed:
you should use the one exposed on the blog:

If the problems with the MSDN page are solved, I will switch back to FeedBurner, but this won't effect you all, if you are using the latter feed link (as it is redirected automatically)


Tuesday, May 5, 2009

Microsoft Layoffs - Cinco de Fire-O

Well, if ever you wanted to console yourself with some tequila, today might be your day. Phase Two of the big Microsoft 2009 layoff engages today.

Is this it? Will there be more? From Mr. Ballmer's email:

With this announcement, we are mostly but not all done with the planned 5,000 job eliminations by June 2010.

Strangely, Ms. Brummel have asked folks to avoid emailing each other today because the last layoff's email volume was so distracting. Gee, sorry to be a bother while people are trying to figure out what the hell is going on. Let's see... how to avoid that... I know, tell people what the hell is going on and which people / groups are affected. Oy.

Please, if affected by today's events, note which group you're in and any messaging about things going forward (as appropriate and proper).

(And please, Ms. Brummel, if you talk to the troops about this, don't share how people affected by the layoff are thanking you - that just seems creepy.)

Dropping moderation for today, but as usual: be responsible. I will delete comments later that are off-topic, along with any other comments that react to the deleted comments. If in doubt, go visit the CRF parallel thread:

Sunday, April 26, 2009

Lookup methods tutorial + custom list lookup implementation

One of the great features available in Dynamics AX is the support of lookup forms that provide a user-friendly interface for selecting a value for a field from a list, and are highly customizable, allowing the developer great flexibility in meeting user needs.

Recently, I was posed a question of how to present a user with a list of custom-defined values in a lookup form.

The simple (and suggested) approach here is to create a new BaseEnum, containing all the specified values, and add a ComboBox control for this enumeration to the form. If the values are to be displayed conditionally (only a subset is shown each time), you can build a superset of all values in AOT, and use SysFormEnumComboBox class to limit the actual output at runtime.

But, this would not work in my case, because the values in the list were dependent on other data in the form plus the current date. Using a temporary table for this scenario seemed like an overkill (but possible). So i decided to investigate the system class SysLookup for hints on how this can be done with minimum effort. The implementation of this method is provided below.

As part of posting this implementation, I decided to also briefly describe some of the other lookup method options available to an AX developer, turning this post into a small tutorial on lookup methods.


1. The approach used most in the application is the implicit lookup based on table fields. As you can see from the control properties, DataSource and DataField specify which table field the control is based on. In my example, it is based on SalesTable.CustAccount, which uses the ExtendedDataType CustAccount, which has a relation to CustTable.AccountNum. Therefore, any time you add this field to a form, it will automatically provide a lookup button to select one of the customers.

Relations being specified on EDTs is at times confusing to people, who are used to seeing the relations between tables on the tables themselves. Technically speaking, such definitions on EDTs are incorrect. But no worries, AX supports the “correct” scenario out of the box as well. The relation to CustTable could have been specified on the table just as well.

2. 2nd most used approach is to specify the ExtendedDataType on the control directly. This is used to allow the user to specify a value to filter the records on directly from the form, for example (without the need to go to Extended Query form). It is also indirectly used on all RunBase dialogs in the system (when creating a DialogField, we specify the EDT to be used, which is transfered to the ExtendedDataType property on the corresponding control). In the tutorial, it is again the CustAccount EDT that is specified in the properties.

3. The 2 above examples both used metadata to define what lookup is to be displayed. The 3rd most used approach is relying on SysTableLookup class and builds the lookup at runtime. The code is relatively straightforward, and is described in more detail on MSDN. Using this approach, the developer can specify the query to filter the data being displayed in the lookup form. Note, that SysTableLookup only allows to have data from one table in the lookup form (+ display methods on this table). SysMultiTableLookup is an extension I have created a while ago, that adds this and other useful functionality to SysTableLookup class.

4. The remaining 2 standard approaches are rarely used in the application. Lookup based on ExtendedDataType is very similar to approach described under #2, but is executed from code at runtime. This way, you can change the lookup data displayed dynamically, based on some conditions (For example, on Ledger Journal lines, the offset account lookup shows vendors, customers, banks, etc. based on the offset account type specified on the line).

5. BaseEnum values are usually represented as a ComboBox (and, in special cases, CheckBox or RadioButton) control on forms in Dynamics AX. The lookup is provided by the kernel automatically for this type of control. But, sometimes, it is required to show the values of an enumeration in a string control – most common scenario is providing filter capabilities based on enums, where multiple values can be specified at once, similar to extended query form filters. In fact, this approach is actually used on SysQueryForm for enum fields. As you can see from the code, the lookup call is also very simple in this case.

6. This approach does not currently exist in the application, and the goals for its implementation were already described above. The lookup method code in this case looks rather straightforward, here it is:

public void lookup()
Counter yearCount;
List valueList = new List(Types::String);

for (yearCount = 0; yearCount < 5; yearCount++)
valueList.addEnd(strFmt("Year %1", year(SystemDateGet()) - yearCount));

SysLookup::lookupList(this, valueList, "List of years");

As you can see, the data displayed in this lookup depends on current system state (date) and other data (yearCount). It uses the class List to hold the values to be displayed.

You can download the project (Compatible with Axapta 3.0 – Dynamics AX 2009) with the tutorial and custom list lookup implementation by following the link below:

Note: The xpo contains changes to SysLookup class/form (only usr layer has been exported, for your convenience). Be careful when importing those, and don’t import them into the production environment.

Thursday, April 23, 2009

Be careful with join clauses when writing complex queries

Join clause evaluation is dependent on its position in the sql statement. In SQL Management Studio, if you try to specify the conditions incorrectly, you will receive the following error message:


In X++, you will not receive any compilation errors, nor any runtime errors. In complex scenarios with a lot of queries, this might go unnoticed, and will be extremely hard to weed out at a later stage, when data inconsistencies crawl in.

Take, as an example, the following job. At first glance, the 2 methods look exactly the same, and it seems as if they should work just fine. But in reality, the second method will return incorrect results, because inventSum.InventDimId will be treated as a constant (empty string as the default value) and not as a table field used in the same select statement.

QueryBuild classes have a major advantage in this situation, as you cannot easily add join clauses (links) unless adding to the child (joined) queryBuildDataSource.

static void JoinClauseWarningJob(Args _args)

void testCorrectJoin()
InventTable inventTable;
InventSum inventSum;
InventDim inventDim;

select inventTable
where inventTable.ItemId == #ItemId
join inventSum
where inventSum.ItemId == inventTable.ItemId
join inventDim
where inventDim.inventDimId == inventSum.InventDimId;

info(strfmt("Correct join where clause: %1", inventSum.AvailPhysical));

void testIncorrectJoin()
InventTable inventTable;
InventSum inventSum;
InventDim inventDim;

select inventTable
where inventTable.ItemId == #ItemId
join inventDim
where inventDim.inventDimId == inventSum.InventDimId
join inventSum
where inventSum.ItemId == inventTable.ItemId;

info(strfmt("Incorrect join where clause: %1", inventSum.AvailPhysical));
// Actually execute the code

So, the suggestion is simple: Use QueryBuild classes (or AOT queries) whenever possible, and pay attention to the order of tables and join clauses in the select statements that you write.

Wednesday, April 22, 2009

Microsoft FY09Q3 Results

Last time we did quarterly results, it was a doooozy. Immediate layoffs for 1,400 Microsofties and sometime-in-the-next-18-months layoffs for 3,600 more. Of course, the layoffs were offset somewhat by continued crazy hiring for Live Search (should we expect a work of Shakespeare to pop out of there sometime soon, too?).

What kind of questions do you want to be asked during the conference call? Some off of the top of my head:

  • So... how's that, ah, layoff... thingy.. going?
  • Which groups and products are specifically being affected by layoffs?
  • What other cost-cutting measures are in effect?
  • What are the causes in drop of revenue and what are the expectations going forward (will Microsoft give guidance this time)?
  • What bright spots are there in profits?
  • How is gaining share going?
  • The EU seems to be pulling its leg way back for a full-on kick to Microsoft's financial groin. How does the defense against EU charges look to protect shareholder money for additional EU fines?
  • What does a financial geek have to do to get a beer at The Commons?

And you know, speaking of The Commons: I trekked over there today (meh, not the sunniest day) and I have to say it's an impressive space. I walked around admiring the scope of the project, thinking "This is what Windows built. This is what Office built." I then reflected on the irony that it's Mr. Robbie Bach's Entertainment and Devices moving into the new campus with The Commons. Windows and Office funded this extravagant place for the folks who managed to burn through $8,000,000,000USD+ on the Xbox, be shown how it's done right from Nintendo with the Wii, dash the Zune against the juggernaut iPod, and have the iPhone drop-kick WinMobile to Mars.

Microsoft Senior Leadership Team is rewarding something here moving these people into such a great place, but it's not anything that I could make sense of while I wandered the new campus...

I'll update this post later with commentary about the quarterly results. In the meantime, some of my favorite places to track insights and opinions on MSFT quarterly results:

Update: closing the loop here a little bit later than I wanted (sorry, I was bounced off the grid for a while):

Wow: have a plunge in profits and get rewarded by your stock shooting up 10%+ in one day! Sweet! And by "Sweet" I mean none of this makes a lick of sense except to look at an article like Cost-cutting saves Microsoft stock after rough 3Q and realize that the market is supposedly rewarding the stock price and recognizing appreciation for the reduction in overhead and expenditures.

So now, we must have a plan to have constant announcements about reduction of expenditures.

Announcement #1: No more Company Picnic. Ever. Next?

What would be on your short list of things to cut back on? MGX? The Company Meeting? Beer at morale events? Soda? The Company Store? Whole product groups? Your group? Yeah, I don't know how often that last one makes the list. Though I have friends who have sniffed the way the FY10 wind is blowing and are getting the hell out of groups that have spent more time talking about what they are going to do than actually doing anything or - get this - shipping something to actual customers. You know, the type of groups that make Yahoo's Carol Bartz slip in the F-bomb.

I'm surprised to learn from Ms. Fried's Company Picnic article above that The Company Meeting is still on. As much as I love the Company Meeting, it was totally dead and gone to me in my mind. Talk about the most challenging Company Meeting ever. Yes, we'll have Win7 and coming in close Office 14, along with other emerging products. But how in the world to you manage to pull off a great Company Meeting within our current environment? You have to take the big issues head-on, and part of that will be looking at the upcoming MSPoll numbers and actually sharing with Microsofties who they hell were let go as part of the layoff. And why.

The Company Picnic boggled my mind just looking at the logistical nightmare it had turned into. Tell you what: if we reduce the company size back down to something reasonable, we should bring it back. But for now, I'll be happy with my group renting space for a family morale team event at Vasa Park.

CRF: unmoderated comment thread: Microsoft FY09Q3 Results.

Wednesday, April 15, 2009

Spitfire Backfire, Live Labs, and Not My 1,400

Here's a quick post before next Thursday's quarterly results. Given the layoffs in the last quarterly results I know there is some increased anxiety about any additional cost cutting Mr. Ballmer might be ready to unleash, like more staff reductions or, you know, "Hey congratulations on entering RC and all. Now... about that next release and, well, you specifically..."

Mr. Joseph Tartakoff over at paidContent has a post around further reductions: Microsoft Still On Track To Cut Another 3,600 Jobs.

Contrition time for me: last post I shared how amazed I was that everyone in the 1,400 that I knew or that were in my extended network got rehired. Pretty much the feedback I heard here and on Twitter was, "Wow, you're one lousy sample set," because a number of you are either in the non-presently-Microsoftie 1,400 or know plenty of people in that pool.

I wish I could blame it on drinking too much at Spitfire but, (1) it wasn't opened yet, and (2) it will never be opened thanks to the brazenly stupid idea to have it planned and ready to go for what seems like the better part of a year and then three days before it was to open, Microsoft yanks the rug out from under Spitfire and thirsty Microsoftie patrons.

You know, if upfront the Senior Leadership Team had decided that a bar was an interesting idea but didn't make sense for Microsoft I would have just shrugged and scooted over to a Mustard Seed, had I even heard of the idea. But to have this set up for so long with curious expectations building in Redmond and then to have a last minute revelation and cancelling Spitfire really calls into question basic judgment and execution abilities.

So-- what, what's that? Hmm, checking in over at the Bring Spitfire back to Microsoft Facebook group ( it appears Spitfire is on track to open at the end of the month? From Jonathan Sposato:

thx for everyone's support! OK there's GOOD NEWS today; the spitfire has reached an agreement in principal with msft to open on the west commons campus later this month : ) over the last few days, both parties re-engaged and worked creatively to find a way to deliver on a great spitfire experience on campus.

('scuse me while I tweet that.) Great! Allow me to raise a glass. Now I'm vaguely curious to know about all the soap-opera court-intrigue going on behind the scenes here. And I can cancel my idea for a BYOB + Towel Commons protest.

Update: well, not so fast, you twittering fool. Looks like the compromise is pretty extreme, in that drinks will only be served for scheduled special events. Hmm. More by Mr. Todd Bishop here: Microsoft revives Spitfire pub under compromise arrangement.

One last thing: Live Labs recently restructured, with some projects going forward and others getting the axe and the researchers being repurposed into groups like Mobile and Search. I've only had superficial dealings with Live Labs folks and I found them very refreshing compared to other teams in research I had planned with: a sort of practicality that was uncommon. To add a few more words here, we'll end with a special guest writer reflection on the recent Live Labs happenings:

Microsoft (NSDQ: MSFT) is downsizing its high-profile Live Labs group, which was created three years ago to speed up innovation in the company’s online business, has learned. -- Joseph Tartakoff, Microsoft breaks up its Live Labs group, 2009

Microsoft describes it as a "restructuring". About half of the team will be moved to various product groups. The remaining half, still run by former Overture/Yahoo star Gary Flake, will focus on search, data organization and user experience aspects. There's more information in articles by Mary Jo Foley on ZD Net, Ina Fried on CNET, and Gavin Clarke in The Register.

Contrary to recent whispers and tweets, we are not shutting down, disbanding, dismantling, or anything of the sort. In the coming weeks and months we'll bring you updated developer tools, new ways to use Seadragon, and much more. Going forward, we intend to focus on a smaller number of projects relative to what we've done in the past, but invest in them at a much bigger scale. -- What's next for Live Labs, on the Live Labs blog

Mary Jo comments that "Microsoft execs often touted Live Labs as proof that Microsoft is an innovator, not just a follower," and there's no question that the acquisition of Seadragon and merging it with Microsoft Research technologies has a chance to be transformational. Photosynth is an encouraging start, and there's a lot more to build on. A tighter focus and bigger bets could be a good thing here. On the other hand, Live Labs was also supposed to be a company-wide (or at least Windows Live/MSN-wide) innovation center. Gary's 2006 Live Labs Manifesto and coverage at the time like Ina Fried's captures the original vision: bridging the gap between research and the product groups and revitalizing how software is developed. This was always going to be a tough sell, with senior executives like Steven Sinfosky firmly against the idea of a separate innovation group outside of their control. The restructuring seems to throw in the towel on this front. And Microsoft spokeswoman's Stacy Drake McCredy's comments in are somewhat alarming:

Economic conditions are imposing constraints that challenge the original Live Labs model by diminishing the group’s ability to transfer innovations to business groups who’re understandably giving priority to “needs” vs. “opportunities.”

Well yeah, it is understandable. But what this is saying that Microsoft product groups aren't in a situation where they can take advantage of opportunities. It's really hard to see that as a recipe for long-term success.

Administrivia: The Cutting Room Floor is unmoderated and folks have been pleading for me to shut down the red-hot discussions over there. I moderate here - when I can manage - to keep things on track. If the CRF can be the crazy diatribe magnet and that makes moderation here all that more easy: fan-damn-tastic.

CRF: Unmoderated thread for "Spitfire Backfire, Live Labs, and Not My 1,400"

Sunday, March 29, 2009

Shared Sacrifice and Microsoft Free Radicals

How have you been doing? Me, I've been doing some kind of wonderful.

Since I pressed the pause button (a button I'm going to be enjoying quite often) a lot has happened yet not happened. Sort of like those layoffs. Just like you and your fellow Microsofties, I talked to a lot of people who where either affected by the 1,400 cut or who had a friend affected. From just my perspective, everyone I know or know-of through someone in Redmond was... rehired.

When's a layoff not a layoff?

I mean, even the folks I muttered, "Whew, thank goodness they took their badge and finally got rid of 'em" got rehired. Sheesh. We can't even do layoffs right. For at least the slice of people I know of, this was more a rebalancing than a layoff. Sorry, Ms. Bick, I guess I don't know the folks you wrote about.

Also during this time, both Toyota and HP made interesting moves to deal with the impact of the crisis on their business. I pay attention to Toyota thanks to writings like those of Mary Poppendieck's that look at Toyota's approach to empowering its engineering employees to make direct front-line team decisions, sort of like the feature teams various product groups at Microsoft have. And of course, HP is a big Microsoft partner. Both went down the path of avoiding layoffs. Both cut salaries vs. having layoffs, a "shared sacrifice" in Toyota's word (more on Toyota: Japan's management approaches offer lessons for U.S. corporations).

Mark Hurd's memo about the HP salary cuts should have been the memo that Ballmer wrote. Why? Because in it Mr. Hurd reviewed how they already had done due diligence to become a lean and mean company, and that further cut-backs didn't make sense. Also - call it a token gesture if you will - he and the executives took the biggest salary cut. Yet he re-emphasized that HP will pay for performance. None of our executives had said anything about taking a cut back, but rather just re-iterating that their SPSA payout will be less because the company's bottom line is suffering just like everyone else in this crisis. But zero details other than "significantly less."

Winking while we stuff our pockets AIG-style.

So yes, HP will have restructuring, but they don't have 3,600 additional cuts hanging over people's heads.

Do you think that the concept of shared sacrifice would work at Microsoft? If it still felt like a company driven by the employees, probably so. That's my perspective. I think if we still felt like the drive and ambition of the front-line employees shaped the company and defined it, then helping one another would make sense. But the huge growth shattered that sense of employee ownership, abetted by the abysmal Microsoft stock performance we've had since, yes, Mr. Ballmer became CEO. With that all these layers and organizational obstacles spread about and it went from a different, special place for crazy-happy geeks to a jay-oh-bee.

Mr. Mundie recently reflected on a number of topics. One idea was the desire for Microsofties to move around in the company more effectively. I love it. If someone, like, oh, our Senior VP of HR, was to take a moment and muse, "Now's a great time to go back to basics and focus on what it is to be a Microsoftie" one of the keystones should be job movement through the company as part of following your passion and ambition. Maybe it was easier to take risks, be bold, and honestly do what the hell you really wanted to back in the mythic days of FYIFV. And gee, guess what? What do you get when you have people doing what they want to do? Great results.

Obviously we've got about zero job movement right now, so that has to be fixed first. Microsoft gorged itself at the buffet bar of mediocre hires. And now we're bursting at the seams and deadlocked. We are stagnant right when we have two major product releases coming in for landing - Windows and Office - and you'd like those people to be ready to move around Microsoft and cross-pollinate good engineering. Especially those responsible for the obvious success of Win7. Maybe some movement will happen within Windows and Office themselves, but not across the company and probably not into their groups from other parts of the company. Hell, you have people in Windows worried that the Senior Leadership Team is waiting for them to get to a safe RTM harbor so that the 3,600 quota can start getting taken care of. Do you expect people to look around - to take risks - in that environment?


Zero attrition. Stagnation. Organizational constipation. Nothing good comes out of that but corporate sepsis. Given that our leadership team has had their cage rattled by the global crisis, has examined all sorts of horrible past economic situations, and has locked down on the hiring and gotten on-board with some odd variant of firing, you'd expect they are playing out the forward-looking implications for the product groups and other Microsoft divisions, right?

I'd hope so. But it's not based in any sort confidence based on past results. And it's certainly not based on our leadership engaging with us as we work and live through this crisis. Things are certainly uncomfortably quiet. It's the worst side of "best of times, worst of times" but one hell of an opportunity for re-birth and re-engagement and truly building a stronger Microsoft. A few challenges and opportunities I'm thinking of ahead of Microsoft:

EU: you say "ee-you", I say, "ewwww!" As long as the Microsoft ATM continues shooting out cash fines the EU is going to keep mashing our buttons. Kudos to the folks in Office for demonstrating foresight to jump on documenting their file formats and protocols, even enduring the inevitable attrition such onerous work forced upon the team and the delays to O14 it caused. I'd say, at the end of the day, this saved a large chunk of a billion dollars in fines that the EU would have gone after. You talk about people who deserve to be in The Circle of Excellence? If they head off another EU money-hunt, it's the O14 crew. And good job, Win7, in making IE8 removable. Now, what's the next EU target?

Review Reset: as organizations look to clear out the recent mediocre hires to make room to hire excellent people suddenly really interested in working at Microsoft, middle management is discovering that the review tools have really screwed them over. Told you. To keep everything clear and accounted for, I spend four times the amount of energy dealing with the new review tools through the entire year to get the same results before with the Word form. The current system is wasteful. If it can't be modified to spit out some fixed commitments based on your level, it should be replaced with the old simple Word form.

Free Radical Career: I'm pondering ideas about making employees more mobile within Microsoft. The one I've come up recently is to let anyone who has reached a certain career achievement (Exceeded/20, or just in the top 20%) to be free to move to another part of the company and to have their headcount and associated budget go with them. E.g., the destination team doesn't even have to have open headcount, they just have to be willing to have this new (great) employee come over and join. Okay, they do have to have office space. Sucks for the former team, great for the new team. I know, my first worry there is that you get one crazy charismatic leader and suddenly everyone is working on BoonDoggle '12. But my goal is that if you're great, you can literally write your own ticket to be where you want to be in Microsoft. We need something to break the career stagnation because I know of folks already dorking with their organization is small, petty ways, and remarking, "Well, where are they going to go?"

CRF: Unmoderated comment stream for "Shared Sacrifice and Microsoft Free Radicals"