Starting a new role at Microsoft

I’m very excited to announce that today is my first day as a Cloud Developer Advocate at Microsoft, focused on Teams and Graph development! I wasn’t even looking, but a friend mentioned it and when I read the job description … well it was just too good of a fit.

Do you find yourself building Bots? Are you excited about integrating Microsoft Graph data into line of business applications? Are you extending Teams with your custom application? Are you spending time with SharePoint or Azure Active Directory? Find yourself excited about the latest Microsoft Graph schemas? … Use tools like curl and OAuth? Spend your free time pouring over the latest research on collaboration software?

Yes, yes, yes to all of the above! Me, pick me! And I’m thrilled that they did!

What is this new job?

The Cloud Advocates team is technically in the Azure organization, ultimately reporting to Scott Guthrie, which is prety exciting in itself. The goal (as well as I understand it on my very first day!) is to help developers succeed in the Microsoft cloud – all developers, from enterprises to partners to startups to students. Recently, the Cloud Advocates team expanded beyond Azure to also include Power Platform, and now Microsoft 365.

In this new role I expect to be:

  • Creating written content, videos, and samples that help people learn how to develop collaborative apps using Microsoft 365.
  • Speaking at conferences, meetups, coding boot camps, online forums, Twitter, Stack Overflow, Hacker News, and more.
  • Collecting and prioritizing product feedback and technical blockers with engineering.

So it’s not that different than what I was already doing, right? But on a larger scale. And some things I was doing on an extracurricular basis will become part of my day job, which is awesome.

I’m extremely thankful, especially in such challenging times, to have such a wonderful opportunity. Many thanks to all my colleagues in the One Commercial Partner Technical Team (OCPTT), and to all the awesome partners I’ve gotten to work with over the last 2 1/2 years. It’s been a lot of fun and I’ve learned so much from you all! I look forward to continuing to work with you as part of my new role.

And to all my friends in the wonderful SharePoint/M365 community – I hope to see more of you all than ever and work together on exciting new developer scenarios. The journey is only beginning!

Working from home with Microsoft Teams

While the world has been adapting to unprecedented changes due to the novel coronavirus pandemic, I’ve been counting my blessings. My family and I are all OK (so far at least!) and I have a job I love where I was already working from home. I was interviewed for the job using Skype for Business, and now my team works almost entirely using Microsoft Teams.

So at my manager’s suggestion, and in accordance with the internally published company policies on social media, my teammates and I decided to pitch in and share our favorite tips for working from home with Microsoft Teams. These are not official videos from Microsoft; they’re from some Microsoft employees acting as members of the community with a sincere desire to help out.

I made a playlist of our videos and am pleased to share it here. I’ll continue to add to this list over the coming weeks. All videos are short – 2-8 minutes – so if you’re busy but hungry for knowledge, you can just stop by for a snack-sized nugget and when you’ve had enough, put it aside and come back later.

Teams WFH Playlist

Continue reading

YouTube Grand Opening

I’m thrilled to announce that in addition to this blog, I’ve started creating short YouTube videos on Microsoft Teams, SharePoint, and Azure development. At first I was going to put everything on my own YouTube channel, but I’m thrilled that I was invited instead to post them on the Microsoft 365 Patterns and Practices channel. I consider it an honor, and it’s a great opportunity to reach nearly 16,000 SharePoint and M365 developers!

I’ll list my videos across all channels on the Videos page in this blog.

Here’s a video to get you started!

Continue reading

Provisioning Teams with Azure Functions and Microsoft Flow Part 5: A Change in Direction

It’s only been a few weeks since I published the 4-part blog series on Teams provisioning, and already I’ve learned a lot. So here is part 5 of the 4-part series, which will explore early learning and begin to discuss future directions for the project.

  1. Solution Overview
  2. Installing the solution
  3. Building a Flow for the solution
  4. Looking at the code
  5. A Change in Direction (this post)

ALSO – the code has moved to an official PnP repository! Please update your links accordingly.

Continue reading

Two Vantage Points

I just returned to Microsoft after a six-year adventure at a startup, BlueMetal. It was a great experience, but I was ready for a change, and I was fortunate to secure a great position as a Partner Technology Architect in Microsoft’s new One Commercial Partner (OCP) organization. I’m thrilled!

Now that I’m back, I’m able to blog on MSDN again! So which is it – MSDN, or my own blog at Decisions decisions!

For the time being, I’ve decided that “both” is a pretty good option; this will allow regular followers to keep going to the same place, while inviting MSDN readers to the party. So read either one; I plan to post the same content to both places.

Thanks, as always, for your interest and comments!

Office Developer Bootcamp Sponsors on Board

Some readers may already know that Scot Hillier and I are presenting an Office Developer Bootcamp focused on the SharePoint Framework on Friday, October 27, 2017 at the Microsoft office in Burlington MA. This is a great opportunity to learn SharePoint Framework development, including related technologies, Typescript, WebPack, and React. There are still openings, and it’s free! Please register here to join us!

I’m pleased to announce that we have some great sponsors for this event. Not only will they ensure that attendees are well fed, they were hand-picked as they bring key technologies that every SharePoint developer should know about!

Continue reading

New Release of Widget Wrangler

When you’re writing a widget in Angular 1.x, it’s possible to pass configuration information into the widget using the ng-init directive, as shown in this example. (Angular 2 isn’t ready for widgets yet since there’s no way to put multiple copies on the page; Microsoft is working with Google on a fix. Here’s a sample.)

That works fine in Angular, but what if you’re using some other framework? The Widget Wrangler has a feature, the ww-appBind attribute, that allows you to bootstrap your own widget; this allows pretty much any JavaScript framework. But then how can you pass in configuration information?

The answer came from colleague Brian McCullough, who contributed a new feature to the Widget Wrangler. I have to admit I’ve been kind of swamped at work lately; he submitted the pull request more than a month ago! Well today Brian’s new attribute, ww-appConfig, is released in version 1.02 of the Widget Wrangler.

Here’s an example:

<h1>Knockout Widget 1</h1>
<span data-bind="text: textboxLabel"></span>:
  <input data-bind="textInput: message, event: {keyup: messageChanged}" />
    <span data-bind="text:messageLabel"></span>:
    <span class="secret" data-bind="text: message"></span>

  <script type="text/javascript"
          ww-appConfig='{"textboxLabel":"Enter a secret message",
                         "messageLabel":"The secret message is"}'
          ww-appCss='[{"src": "style.css"}]'
          ww-appScripts='[{"src": "", priority":0},
                          {"src": "script.js", "priority":1}  ]'>

In this example, two labels are passed into ww-appConfig in JSON format.The Widget Wrangler passes the appConfig value to the appBind function, myWidget.Load(), which parses the JSON and makes it available to the Knockout application.

var myWidget = myWidget || {};

myWidget.Load = function (element, config) {
  myWidget.Config = JSON.parse(config);
  ko.applyBindings(new myWidget.vm(), element);

You can see the whole thing in action in this Plunk.

Thanks Brian, this is a great addition and your contribution was clean and ready-to-go!

Roadmap to the Future of SharePoint

(cross-posted to the BlueMetal Blog)

This week Microsoft mapped out a bold new plan for SharePoint. Microsoft is investing heavily to modernize the product to make it work as well in the Device and Cloud era as it once did in when the Web was still shiny and new. This article will explain how these changes could affect your organization’s SharePoint plans and how you can start preparing.


If you missed the announcement, this is a good place to start. Here are some of the highlights:

Continue Reading

Learning TypeScript: A Code Camp Adventure

Last weekend I had the pleasure of presenting a couple sessions on TypeScript at Boston Code Camp 25, one on my own and one with my good friend and colleague, Bob Goodearl. We’ve just posted the materials, which may be useful beyond the presentation.

TypeScript 101

This session covers the basics of the language. I tried to distill the whole thing into a set of code samples, inspired by the old “Got Dot Net” site from days of yore. You can find the Github repo here, including project folders for both Visual Studio Code and Visual Studio 2013.

TypeScript 102

This session delves into creating AngularJS 1.x applications in TypeScript. I started off with the simple example of a weather “widget”. A widget is a small application that runs independently on a page; in this case I used the Widget Wrangler library to place the widget on the page. Because it’s small and simple, you can easily see how to set up an Angular controller and service in TypeScript, and how to handle Angular promises.

After that, Bob Goodearl picked it up with a more advanced example that shows a hybrid Angular/ASP.NET MVC application with a WebAPI back-end service. Pointers to his code and the other session materials are here on his web site.

Please check it out and send feedback in the comments; thanks!

Microsoft’s New Approach to Collaboration and Portals

At the Ignite conference last week, Microsoft laid out a new vision for collaboration and portals that is a major departure from the site-based approach that has been the core of SharePoint for more than a decade. Microsoft still fully supports SharePoint in its current form and will continue to do so, both on premises and in Office 365, even as it introduces Office 365 Groups and a new suite of Office 365 “NextGen” portals that could replace SharePoint sites for enterprises that want a more modern, cloud based approach to collaboration. SharePoint sites will continue to work, but it’s unlikely Microsoft will invest in enhancing them beyond where they are in SharePoint 2013.

Continue Reading