On the Road Again

I’ll be on vacation the next two days, but here’s a quick post before I go.

As I’m sure has been widely reported, WS-I Basic Profile 1.0 shipped today. But sheer lack-of-coincidence, MSFT shipped the latest P&P: Building Interoperable Web Services. No time to read it now, but I’ll check it out next week and report back.

More on P2P Problems

I discovered a FAQ for the WinXP Advanced Networking Pack Among other FAQ’s (including “What is a F.A.Q.?”) are “What is a PNRP seed server?” and “How do I know if I can contact the Microsoft hosted PNRP seed server?”. A seed server is a bootstrap for a PNRP “cloud”. PNRP is supposed to be serverless, but there has to be some way for the system to be bootstrapped. MSFT runs a seed server at a well known address (well known to the P2P system, since no one told me). To see if you can reach said seed server, you can run “netsh p2p pnrp diag ping seed”. If the number is one or greater, all is good. In my case, that command raises Error 0x800706d9: “There are no more endpoints available from the endpoint mapper”. I’m not sure what that means, but I’m guessing that explains why I can’t resolve PNRP names.

Problems with P2P SDK

Has anybody gotten the P2P SDK to work? I’ve been playing with it, working on ideas for wrapping it in managed code. I’ve actually got classes wrapping the Identity Manager and PNRP Namespace APIs as well as a start on the Graphing API. Due to the nature of the SDK, I’ve been writing in Managed C++. While tricky and not as much fun as writing C#, MC++ is pretty cool. Wrapping the P2P SDK with MC++ has been much easier than I expected. Except for one problem – I can’t seem to get PNRP to work. Even the GraphChat demo doesn’t work for me.

PNRP stands for the Peer Name Resolution Protocol. It is supposed to be a serverless DNS system. It allows me to register a peer name for later look up and resolution. I can register and unregister a peer name and endpoint. It even throws and exception if I attempt unregister without registering first, so something must be happening. But I can’t resolve the peer name to an address. And it’s not just my code (which is copied near verbatim from the help files), the sample GraphChat app doesn’t seem to work either. I’m attempting to register in the default “global” cloud as is the GraphChat sample, but no luck.

Just chatted Scoble on this – since he was so excited when we released it. As a fellow evangelist, he is willing to put me in touch with the powers-that-P2P. However, I’d appreciate hearing any other “war stories” out there.

Storytelling

A customer who reads my blog (and I think would rate me in the 7-9 range) sent me links to an article and book on Storytelling. The .NET & web services vision makes a great story. If you look at my old .NET Vision PPT, there is a real-world integration scenario. There are two slides – how it’s done today, and how it would be done with web services. I haven’t thought about it in terms of protagonists and antagonists, but the foundation is there.

Reflections on a Bad Presentation

Last week I did a presentation at the Executive Briefing Center. This is not unusual, I’ve done lots of CxO briefings in the past with typically high to very high scores (7-9 out of 9). However, this time, while I had some decent scores, I also had some awful ones (more than half under 5 including a 1 and a 2. Ouch!) and was the worst scored presenter of the session. While it would be easy to chalk it up to “you win some, you lose some” or to blame the customer (i.e. “they weren’t technical enough”) that’s not going to help me do better next time. I’ve given it a bunch of thought, and there are two key things I’ve learned from this experience.

The first thing is that I wasn’t utterly prepared. This is Scott Hanselman’s 2nd tip and I blew it. I used to deliver the “.NET Vision” presentation three or four times a week. Doing that for a year is the definition of utterly prepared. However, in the past year, I’ve changed roles. I’m an architect evangelist now, and we have a dedicated role on the team – called the .NET Advisor – who is focused on delivering the high level vision of .NET and web services. I have an old friend who used to say “use it or lose it”. He was talking about programming skills, but the same goes for presentation skills. My ability to deliver the high-level .NET & web services vision has waned from lack of use. This wouldn’t be a huge problem, except that I didn’t realize it. I chose to white board the session, in order to be more flexible. But since I was out of practice on the material, I ended up being inflexible and doing a poor job delivering the message.

(BTW, speaking of .NET advisors, we have an opening on our team for one in Charlotte, NC. Submit your resume if you fit the bill.)

While I understand what to do about preparation (i.e. do more), I’m sort of stumped on my other key learning. We had the customer present first, to tell us about their organization. Among other things, they told us their list of IT priorities. It looked something like this:

  • Webify legacy applications
  • …a bunch of other stuff…
  • Build web services

I imagine this priority list is pretty typical. However, it’s upside down. Building web services in front of legacy applications needs to be more important that webifying them. The IT world is getting faster and more complex by orders of magnitude. This requires a new way of thinking about how you put systems together – i.e. Service Oriented Architecture (SOA). Webifying old applications is lipstick on a pig.

But how do you tell the customer they are wrong without being arrogant? I mean, webifying legacy apps was their #1 priority and I told them it should be struck from the list! Conventional wisdom for sales people is that the “customer is always right”, but I’m an engineer at heart where right and wrong usually can be technically quantified. Adopting SOA is, IMHO, a critical factor in the continued long-term success of any organization today. In many ways, it is even more important than choice of platform (though I remain confident that a customer who adopts in SOA is more likely to choose the Windows / .NET platform).

I meant to challenge the customer’s assumptions. Instead I proceeded to alienate at least half of them. While it is tempting to blame them for being closed minded, the truth is I could have challenged them in a way that didn’t alienate them. The problem is, I don’t know what that way is.