Digital Transformation and Knowledge Management and how do we deal with a Digital Chaos

Riyaz Lakhani has a wealth of experience in Knowledge Management being Colligo's Enterprise Strategist he's seen every success and horror story.

This week Riyaz shares with us some of his experience in this 5 min interview from MSIgnite.

 

This Week's Topic

kmdiagrm.png

Knowledge Management story is evolving, but the problem still exists. Now that most of the knowledge is digital - how do we deal with digital chaos.

Key Questions

Here are some of the key questions we've got answers to with much more in the video:

  • What's the current state of Knowledge Management?
  • New Trend: Digital chaos ... too many line of business systems make it hard to manage actual knowledge
  • How do you sell Knowledge Management to an executive?
  • How does cloud impact Knowledge Management?
  • Adoption is it all about measurement?
  • Fully implemented project doesn't mean fully adopted!
  • Much more ...

Leave your comments on what are some of the things you're curious about and we'll try to get an expert insight on the topic

ypentsarskyy_2016_small.jpg

Yaroslav Pentsarskyy is a founder of OrigamiConnect, rapidly growing service and product offering which enables organizations to get the intranet that's designed for them, without starting from a blank page. He's also 8 time Microsoft MVP, speaker at many local and worldwide tech events, and a published author of several SharePoint related books.

@spentsarsky

Managing Online Communities and Creating Engagement within Organizations

Lesley Crook, Yammer MVP and Microsoft Ignite Speaker is also Yammer Adoption Consultant at Perspicuity - Microsoft Gold Partner. Joe Francis is a Collaboration Services Improvement Manager at GlaxoSmithKline and also Microsoft Ignite Speaker.

 

This Week's Topic

buy-sell-phone-e1496669730853-840x590.jpg

This week's discussion is focused around managing online communities in your organization. From building the engagement to maintaining it while people and organization evolves. The tool our experts are discussing is Yammer but methodology and approach is tool agnostic. Whether you're using Teams, SharePoint, or Yammer there are some great examples and methods you can use to engage your users.

Key Questions

Here are some of the key questions we've got answers to with much more in the video:

  • How does Yammer fit with the rest of Microsoft collaboration tools such as Teams, SharePoint and Email?
  • What are some of the key characteristics of successful online community manager?
  • Does Yammer require governance planning and if so, what are the key things to watch out for?
  • Measuring adoption? Are there tools or methods you'd suggest to an organization?
  • What are some of the surprise findings you've seen from your analytics?
  • Does Yammer require culture change?
  • Much more ...

Leave your comments on what are some of the things you're curious about and we'll try to get an expert insight on the topic

ypentsarskyy_2016_small.jpg

Yaroslav Pentsarskyy is a founder of OrigamiConnect, rapidly growing service and product offering which enables organizations to get the intranet that's designed for them, without starting from a blank page. He's also 8 time Microsoft MVP, speaker at many local and worldwide tech events, and a published author of several SharePoint related books.

@spentsarsky

Succeed with Yammer in a mid-size organization

Last week at MS Ignite 2017, we've got a chance to catch up with some of the most amazing speakers and industry-leading experts.

Over the next few weeks, we're going to share a set of our exclusive interviews with insight on some of the hot topics.

This Week's Topic

Yammer has been on a top of our list to get some insight into as there has been a lot of talk about it leading up to the conference. We're interested to see how mid-sized organization can successfully implement Yammer and what does it take to keep it running. Finally, how do you measure the success of the implementation?

The Experts

Becky Benishek, Yammer MVP and Microsoft Ignite Speaker is also Social Media & Community Manager, Crisis Prevention Institute (CPI). Larry Glickman is a Yammer and organizational transparency advocate working for a non-profit organization.

Key Questions

Here are some of the key questions we've got answers to with much more in the video:

  • Can Yammer "fly" on autopilot once launched or does it require someone to "watch it"?
  • Does Yammer require governance planning and if so, what are the key things to watch out for?
  • Measuring Yammer adoption? Are there tools or methods you'd suggest to an organization?
  • What are some of the surprises you've seen from your analytics?
  • What are some of the upcoming Yammer features you're excited about?
  • Much more ...

Leave your comments on what are some of the things you're curious about and we'll try to get an expert insight on the topic

ypentsarskyy_2016_small.jpg

Yaroslav Pentsarskyy is a founder of OrigamiConnect, rapidly growing service and product offering which enables organizations to get the intranet that's designed for them, without starting from a blank page. He's also 8 time Microsoft MVP, speaker at many local and worldwide tech events, and a published author of several SharePoint related books.

@spentsarsky

Top Collab Related Trends to Observe at MSIgnite 2017

ms ignite.jpg

With MSIgnite confirmed for next week, there's going to be a lot of news and announcements coming out; 26K people are coming this year and right next door to Ignite conference center, Envision is happening with another 4K attendees. With all this excitement, there are few specific things we're going to be paying close attention to as those are major areas of focus according to many analysts and experts.

Here are the top questions we're aiming to get expert and insider answers to.

Microsoft Teams and Collaboration

  • With quite a few sessions covering customer deployments of MS Teams, we want to know how those organizations came to realizing the value of teams. Is it another tool or is the gap filled
  • For those who deployed Teams, what are their thoughts on Yammer. Do they see an overlap?
  • How were MS Teams "sold" to executives in an organization?
  • Interesting or surprising metrics they found from their Teams experience? Adoption metrics?
  • Does Teams require governance planning and if so, what are the key things to watch out for?
  • Deployment gotchyas and lessons learned?
  • Did Teams require culture change in the organization?

Yammer Adoption

Next up, Yammer, as it got a lot of attention this year with many more customer presentations. Naturally, we're curious about the adoption and some of the details around success factors. Here are some of our top questions to get answers to.

  • Apart from employee engagement, what are other practical uses for Yammer? Knowledge Management?
  • What are the types of organizations where Yammer is an easy and natural fit?
  • Can Yammer "fly" on autopilot once launched or does it require someone to "watch it"?
  • Does Yammer require governance planning and if so, what are the key things to watch out for?
  • Measuring Yammer adoption? Are there tools or methods you'd suggest to an organization?
  • How will Yammer evolve and what are some of the natural evolution directions?

Office 365 Adoption Survival Guide

  • With new feature releases how does one do adoption?
  • What are some of the key adoption strategies with Office 365 and rapid release cycle? Are there techniques and tools to be aware of?

Cybersecurity

  • Did cybersecurity get more attention these days in light of recent breaches and how are organizations reacting?
  • What are some of the most common challenges you face when trying to "sell" security to a business and what do you respond with?
  • Many think that going to the cloud will solve a lot of infrastructure management and security problems, what are some of the gotchyas?
  • What are some of the most common shortcuts organizations take that result in undesirable consequences?

Knowledge Management

  • Knowledge management has always been a popular buzzword, less so now, what's changed?

  • How do you "sell" knowledge management to an executive?
  • What are the challenges with adoption of knowledge management solution?
  • Is knowledge management always unique to an organization or are there prescriptive patterns, or a bit of both?

Search and AI

  • Is search evolving and how?
  • With AI getting a lot of attention does it mean the search is falling into the background?
  • AI and it's potential impact on day-to-day workplace?

Leave your comments on what are some of the things you're curious about and we'll try to get an expert insight on the topic

ypentsarskyy_2016_small.jpg

Yaroslav Pentsarskyy is a founder of OrigamiConnect, rapidly growing service and product offering which enables organizations to get the intranet that's designed for them, without starting from a blank page. He's also 8 time Microsoft MVP, speaker at many local and worldwide tech events, and a published author of several SharePoint related books.

@spentsarsky

Microsoft Teams reportedly to swallow up Skype ... related predictions on Delve, Yammer, and PowerApps

535274376.jpg

However your weekend went, it's probably not as bad as folk's who leaked the "announcement" about Skype becoming part of Microsoft Teams ahead of a big show in just few weeks. But, is that news surprising? Hardly, if you take a closer look at how Teams evolved, which in one way or another, relates to Slack. So, what else is cooking?

First, Microsoft Teams

Since the day Teams were introduced, the app was widely recognized as Microsoft's answer to Slack, which slowly but surely, over years, started to dominate the collaboration market.

One of the key features of Slack, apart from it's intuitive and natural chat workspace, is the ability to make phone calls to anyone you're chatting with. As Microsoft added this feature to Teams, it started not only to duplicate Skype but also make Skype appear as a redundant and out-of-date application (not even an app in a modern sense). Chat conversations in Teams are persisted and you can always go back to them or anything else that was shared during the chat.

Skype on the other hand, largely stayed the same, despite going through numerous name changes.

So here we are. We're expecting to hear a lot more from Microsoft in coming week(s) to clarify their messaging and announce more complete transition roadmap.

What we believe is going to happen, is that Skype to remain (re-branded or not) as-is for on-prem customers. This will eliminate any complex change management for large customers. It will also, and yet again, position Office 365 as more obvious vNext for many customers currently still on-prem.

Delve, SharePoint Newsfeed and Yammer

Next item we see for potential amalgamation/deprecation is SharePoint Newsfeed. Here's why?

yammer.PNG
  • There were some updates to SharePoint Newsfeed but features seems to largely overlap with Delve.
  • Delve is integrated with Yammer even tighter as you can see in the image here where you can comment in Yammer right from Delve home.
  • Yammer is now a full citizen of SharePoint Online with way more features than Newsfeed.
  • Delve API has been recently redesigned to allow for more holistic integration.
  • Microsoft is dedicating a lot of content this year about Yammer at Ignite (over 50 sessions) and much of it showcasing the value of Yammer. This can't be said about other native social features in SharePoint.

The biggest issue of course, and the most obvious one, is on-prem deployments. We suspect that Newsfeed will be left to fizzle out with minimal maintenance. With that we recommend our customers to keep integration and customization with SP Newsfeed limited or none.

Microsoft Forms and PowerApps

This is still an early proposition but we believe that these two may merge within the next 2 years. Why 2 years? Microsoft Forms has been launched a year ago and more widely launched just few months ago. From the feature comparison, the functionality is very similar to Google Forms.

One of the biggest advantages is that the Forms app is web based and this is more attractive to many users. The problem is that things you can do with the resulting forms are still incredibly basic. There is no real comparison between forms and PowerApps. Here are some pro's and con's to illustrate the point.

Microsoft Forms - pros

  • Web based form authoring and filling
  • Final forms are very close to how they looked in InfoPath so naturally more atractive to existing users, functionality notwithstanding
  • Will work for mobile and desktop scenarios
  • Some Flow integration available

PowerApps - pros

  • Supports mobile native device features
  • Advanced Flow and API integration available
  • More controls to build more complex forms
  • Offline support to save data entered while device is not connected to the internet

With that we believe that Microsoft will wait around for another year before making any decisions. Of course, both products could stay separate to fill their own particular market niche, which brings us to the next point ...

Other apps in Office 365 ecosystem

Looking at some of the other apps in Office 365 ecosystem you may assume that perhaps Outlook Tasks and Project To-Do's are also up for merger. What about Planner and Project Online? Sway and PowerPoint Online?

It's hard not to get carried away thinking about some potential takeovers and changes but here are two guiding principles:

  • Just because there are similarities in two Microsoft products, it doesn't mean one of them will take over the other. Look at Microsoft Forms again, clear competitor of Google Forms, it's an app that was created for a particular segment to start with, an education sector. Over time Forms were introduced to the rest of the ecosystem with hopes of wider adoption. It's not up to the ecosystem to react. Microsoft may hope for particular reactions but not know for sure until the product is out in the wild.
  • Design your solutions to solve users' needs and not to introduce a cool new feature.
Focus on service design and not feature design (aka design by features)

There is a lot more I can say here about design thinking since it's a significant area of my work. In summary, the key is to always build according to roadmap of what users need. With that mindset, the right solution will emerge both as a clear and viable option as opposed to myriad of options available in the ecosystem, each with their own risks.
I'll be sure to post more on the service design and how to realize it in practice.

More announcements at MSIgnite

Microsoft Ignite will most certainly hold a lot more announcements in store, although some of those have been spoiled, rest assured, there is still more to come.

Just as last year, I've got an agenda packed with meetings and interviews with experts and customer champions. Can't wait to share their reflective stories in a series of interviews coming up soon. Stay tuned for upcoming videos and posts!

20150505_140024_resized.jpg
ypentsarskyy_2016_small.jpg

Yaroslav Pentsarskyy is a founder of OrigamiConnect, rapidly growing service and product offering which enables organizations to get the intranet that's designed for them, without starting from a blank page. He's also 8 time Microsoft MVP, speaker at many local and worldwide tech events, and a published author of several SharePoint related books.

@spentsarsky

Future of Forms in SharePoint: Latest trends and what most decision makers say

eyes.PNG

It's been almost 4 years since Microsoft announced InfoPath to reach end of life by 2023 (Updated: 2026 as pointed out by one of the readers). What we're seeing though, that most customers, 38% surveyed last week, still use InfoPath and planning to do so until viable alternative comes from Microsoft. The next runner up are custom forms with 24% of respondents as a preferred choice. So what's happening here?

Why are people still on InfoPath?

Let's look at some of the reasons we're hearing and what you might be hearing in your organization:

  • "If it ain't broken, don't fix it". If you're already using InfoPath in your business, unless you have digital transformation project underway - what's the point of replatforming.
  • "2026 is a long time from now". True; many businesses these days refresh their systems once every 3-5 years and that's plenty of time to let InfoPath sit for a little bit longer.
  • "People here like it". If you've got InfoPath - you've got someone to support it. If you're not experiencing any pain from maintaining InfoPath form it's probably because you've got a unsung hero who maintains it.

3rd party tools?

Nintex forms, K2 forms, and many more smaller form solutions all compete in forms for SharePoint business. So why aren't people flocking to those? In fact 24% of our respondents said they already Use Nintex alone. Here is what we hear:

  • "Why would I pay for something that's already free in SharePoint" - it's true, having InfoPath, in most cases, free for a long time sets a bias that form solutions should not cost and should be out-of-the-box. We hear this over and over. There is also fed by a hope that Microsoft also recognizes this and is just about to release full next gen form solution. We'll get to that a bit further.
  • "Cost of migrations" - ok so you've decided to invest in Nintex for example. Now you've got to find Nintex resource/developer to migrate all of your forms. It's expensive just like any other transformation project.
  • "Not sure how viable is [3rd party product] roadmap and support". People are worried that smaller vendors just don't have far enough vision, roadmap and support standard. Many customers worry that if Microsoft dropped their form solution, so can any small vendor and then they're stuck with unsupported already invested costs on migration.

What about PowerApps?

About a year ago PowerApps went into preview and became generally available October last year. Yet, only the smallest percentage of people, 14% of those surveyed, are using PowerApps today. Why is that?
Here is what we hear:

  • "PowerApps are just not powerful enough". Many still believe that things you can do with PowerApps are far from what they consider production solution to replace InfoPath or their custom forms.
  • "They seem to be only focused on mobile". At the time when InfoPath was announced to be phased out, mobile was a key priority for Microsoft and PowerApps played that role too. That's just obvious from reading a first paragraph of statement from Microsoft. Forms created with PowerApps look amazing on the phone and I can still hardly believe you can make them available on a mobile so quickly, but how they look on a desktop is far from credible.
  • "We're not in Office 365 to be able to use them". PowerApps do support gateway to extract data from on-prem lists and libraries but you need Office 365 to be able to build and deploy PowerApps even if you're not storing data in Office 365 (Update: as long as you can authenticate to O365, as pointed out by the reader). This is a major turn off for organizations not currently in the cloud because all of the sudden form migration turns into a cloud migration.

Custom forms anyone?

  • "Cost of development". With great power of building anything you want, comes a lot of responsibility. Business requirements, build, and deployment. Unless your organization has accessible development team (contract or your own resources) you're not likely to go into custom development of forms. However, if you're re-building core business solution and require custom form logic already, in house forms are not such a big of a barrier.
  • "users need to be able to maintain those forms on our own" - power users believe they should be able to build simple forms just as easily as they build Excel spreadsheets rather than reaching out to developers and that's fair and valid point. Although this can be achieved with custom solution, it's a bit more effort and cost of implementation may be less desirable.

So, what should you do?

Here is what we hear these day from many decision makers:

  • "We're waiting till PowerApps mature, until then we're on InfoPath"
  • "We're building custom forms to better fit what we're trying to do"
  • "We're in a middle of migrating key forms to Nintex"
  • "[Vendors] should have migration tools to migrate our existing InfoPath forms"

What experts say

Here is our guidance. Start small with a pilot project first before settling on any specific direction.

Just like riding a train, it's not about where everyone else is going, it's where do you want to go to.

If you're on InfoPath already, and there isn't major transformation initiative in planning, wait a couple of years. Microsoft has recently switched their top focus away from mobile and this is likely to reflect on the direction PowerApps is taking. This means forms might be easier to deal with on a full fidelity device.

If you're planning any kind of IT transformation project try to bundle and migrate your InfoPath forms with it - either use Nintex or build custom forms. If can't fulfill requirements by using Nintex, build custom solution since customizing 3rd party can be more challenging than building form from the scratch. Also consider whether your forms need to be built by Power users in large quantities, if the answer is yes, you might want to consider 3rd party solution which supports templating etc.

What are your thoughts and what do you think is Microsoft missing from their forms strategy today?

ypentsarskyy_2016_small.jpg

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

Mobile Trends at Work: Mobile Sites or Mobile Apps

Whether your business has a formal mobile strategy or more of a mobile direction, what often is a tough choice is whether you should invest in mobile app or mobile site.

Image source: http://www.nydailynews.com

Image source: http://www.nydailynews.com

To keep things clear, let's focus on mobile use by business internally, not a public consumer scenario.

So, which one will it be Mobile App or Mobile Site? and what's a Pseudo-Mobile App?

Here is how the Internet feels in a short poll hosted just few days ago:

mobile at work.PNG

In early days of mobile, "mobile" sites dominated the web, both within organizations and consumer facing. Main reason: too many types of mobile devices to cover all the bases, plus websites were the most organic, easy, and thus first option. With arrival of iPhone, the pendulum swang the other direction - everyone went the apps route.

Where are we now

We are in a pretty stable spot right now, we have clear leaders in mobile platform space with iPhone and Android dominating the market. Relative maturity of those platforms allows for stable and cheaper development and improvement of tools to build apps. This means we can make a conscious choice which direction to chose when it comes to the mobile strategy.

Let's take a look at the pros and cons of each as they relate to an enterprise business scenario:

Mobile App - Pros

-Push notifications to users (blinking light and stacked messages)
-Offline mode (get some part of work done with or without internet)
-Device storage (save and process data before uploading to the server)
-Faster performance (take advantage of phone hardware)
-Faster graphical interaction (user perceived performance)
-Quick access to the app (login info stored, launch app quickly)
-Native device feature (GPS, Camera, touch etc)
-Better AI integration (less data entry may be required since device knows more: ex.: location)

Mobile App - Cons

-Requires dedicated development team
-Requires testing on multiple platforms
-Native functions are harder to troubleshoot ('works for me' scenario)
-Upgrades and patches are highly visible

Mobile Site - Pros

-Shared use of code base (no new skills required)
-Pretty easy to adapt to any screen size
-Upgrades and patches are easy and instant

Mobile Site - Cons

-Slower performance
-Slower graphical interaction (user perceived performance)
-No quick access (can bookmark the site but that's about it)
-No access to native features (GPS, storage etc)
-Rudimentary offline experience (limited to filling in forms)

Pseudo-Mobile Apps

This is a new category of apps emerging, example of which is Microsoft's PowerApps. It has some characteristics of a mobile app but at the same time breaking the rules of a typical mobile app.

For example, you can run the app offline on the device but you can't store local data (apart from the form data). Strict limit to what native features you can use (camera and touch screen).

Of course, these come at a significant advantage of:
-Being easy to build (in fact, PowerApps require no code knowledge at all)
-Upgrades are fairly automatic
-No need for public app store

The Verdict

You have pros and cons, so what's missing - well, where do you want to be?

Whichever is your choice, mobile is a strategy. Determine your users' true needs to do their jobs, the bottlenecks they face, and convert that data into desired features which fall under home-runs, nice-to-have's or side-dish.

Mobile app clearly is far more usable; However, unless you're planning to take advantage of the features such as mobile hardware, offline access, push notifications, storage, there is no point in investing in a dedicated team to build and continuously maintain the mobile app.

Pseudo-mobile apps are too new and the development tools are still too much in flux to recommend them as successful strategy at this time. Time and market will tell whether pseudo-mobile will be a new trend or just turn into just mobile.

Would love to hear your thoughts and comments!

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

PowerUp your intranet with IoT BTTN and Microsoft Flow

In this video we'll check out how to get started with bt.tn and getting it wired to Microsoft Flow to create IoT integrations in an instant.

This is great for: integrating automating helpdesk and service requests, automating staff meeting rooms etc.

Enjoy and I'd love to hear what you'd automate!

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

Functional Fixedness: Most Common Hidden Obstacle on any Project

About a week ago I came across an interesting article about Psychology in UX from Nielsen Norman.

The article brought to light an interesting study where children of various ages were given a simple problem to solve. The problem had to do with giving a child 2 objects, box of matches and a candle. Younger children had little or no context about these. The task was to create a candle holder. The same experiment was repeated with group of older children who naturally had more context about what candle and box of matches are used for.

The conclusion was that children who had no context of original purpose for the objects given (younger children), were faster at solving a problem which required somewhat of a creative creative solution. Older children were a bit confused when given this unusual task as opposed to a task of lighting a candle.

What's happening

As we live and interact, with everyday objects and people, we build a bias of what's acceptable and how things should work. This bias is great at solving standard problems repeating over an over again. At the same time, this bias is terrible when it comes to building a creative solution which has never been attempted as far as we know.

As consultants we face this issue a lot. We listen to business and technical problems every day. We make assumptions. We have a toolbox filled with solutions. Most of the time, things work. But more often than not we get stuck with the template approach. Now multiply this same factor by the number of stakeholders you're dealing with. If you have 3 people on the project - then all 3 of you are likely to have their own toolbox and assumptions and biases.

Recent example

In my recent discussion, customer asked me for a technical solution to preserve search results and filters as they open a new page with details of particular search result. My immediate reaction was that this will be a lot of work for developers, to preserve the state of the page before someone chooses to click on a link.
The less obvious solution: open a search result in a new window or a tab and leave the old page untouched. Simple and efficient.

How do we train creative thinking?

So how do we build up our creative thinking?

  • Focus on the end goal. This applies to everybody. Just because you're deep in trenches, it doesn't mean you don't have creative freedom. Even the most technical task can be looked at from a different angle.
  • Keep you mind clear. Thinking of a creative solution requires thinking outside of the box. If your brain is in a fog of thoughts - it's harder to think creatively and you default to more technical solutions. Practice techniques to help you relax and get comfortable.
  • Look for inspiration in other domains. Does the situation you're in remind you of game of chess, art sculpture or process of ordering coffee? If so, try and draw parallels how you can solve your problem following similar approach. Added bonus is if you share your story - customer is likely to relate to it in a similar way and you will encourage their creative thinking.
  • Practice, practice, practice! :) Don't do it just once or twice after reading this post. Our brain loves solving puzzles and coming up with creative solutions. The more you practice it - the more natural process it'll become.

Would love to hear your thoughts and comments!

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

It's a Wrap: SPS New York City 2017

20170728_172152.jpg

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

Create interactive voice menu with Twilio and Azure

In the last post we looked at how we can trigger phone calls from events happening in SharePoint lists. We used [VerifiedRegistrations] list and when a new item was created in that list we used Twilio to make a call to a user and present them with some sort of voice response menu.

Today, we are going to take a look at how we can not only create that voice response menu, but also record the results back into the list into SharePoint using Twilio, so let’s get started.

I’m using the exactly same setup so check out the previous article if you haven't so you don't feel lost.

Azure

I’m going to start by opening my Azure Portal and my Azure function I created is last post. That’s the function that will be used in Twilio as a web hook and this is where Twilio will trigger a phone call from. In that function I talked about the URL handler highlighted on the side. That URL is the URL of the second Azure function I will be creating today. This is the actual function that will present users with a simple voice menu.

I'll create a new Function just as I did the last time with Twilio added as project reference. Here is the source code:

#r "System.Runtime"

using System.Net;
using System.Text;
using Twilio.TwiML;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("Function triggered");

    var data = await req.Content.ReadAsStringAsync();
    var formValues = data.Split('&')
        .Select(value => value.Split('='))
        .ToDictionary(pair => Uri.UnescapeDataString(pair[0]).Replace("+", " "), 
                      pair => Uri.UnescapeDataString(pair[1]).Replace("+", " "));

    var response = new VoiceResponse();

    string phNum = "";
    if (data.Contains("From"))
    {
        phNum = formValues["From"];
    } 

    string digits = "";
    if (data.Contains("Digits"))
    {
        digits = formValues["Digits"];
    } 

    if (!string.IsNullOrEmpty(digits))
        {
            switch (digits)
            {
                case "1":
                    response.Say("Thank you for confirming. See you there.", voice: "alice");
                    RecordAnswer("Verified:" +phNum);   
                    break;
                case "2":
                    response.Say("My bad", voice: "alice");
                    RecordAnswer("Declined:" +phNum);   
                    break;
                default:
                    response.Say("Sorry, try again!", voice: "alice").Pause();
                    RenderMainMenu(response);
                    break;
            }
        }
        else
        {
            RenderMainMenu(response);
        }

    var twiml = response.ToString();
    twiml = twiml.Replace("utf-16", "utf-8");

    return new HttpResponseMessage
    {
        Content = new StringContent(twiml, Encoding.UTF8, "application/xml")
    };
}

    private static void RecordAnswer(string answer)
    {
        using(var client = new HttpClient())
            {
                string bodyJson = "{'ItemId': 4," +
                "'ItemResponse': '"+answer+"'}";
                var content = new StringContent(bodyJson, Encoding.UTF8, "application/json");
                var result = client.PostAsync("[This URL will come from Microsoft Flow]", content).Result;
            }
    }

    private static void RenderMainMenu(VoiceResponse response)
    {
        response.Gather(
            new Gather(numDigits: 1)
            .Say("Do you confirm registration for SPS New York? To Confirm - Press 1", voice: "alice"));
    }

This function is super simple. We start with Async task which will fire and present the caller/recipient with a voice menu. From here we call [RenderMenu]. Let’s take a look at [RenderMainMenu]. It essentially uses Twilio’s method here to verbally say whatever we want to say and gather a certain number of digits.

Twilio will read out all the options and gather user input. Twilio can also accept voice input but in my example I'll make my callers just press dial-in numbers as response.

Once we gather their response we’re going back to this function and processing their response using [RecordAnswer] function. This is how we record values back to SharePoint. The magic here is that there is no code in Azure to do anything to save results back to SharePoint. It's all done with Flow.

Microsoft Flow

I’m going to switch back to my Flow and I’m going to create a new Flow. We've seen some basics of working with flow in my previous article so I'll just jump straight into it.

I'm going to find Request/Response template and add it to my flow. This template is super simple and it only asks for optional JSON Schema. Paste the following schema:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "ItemId": {
      "type": "integer"
    },
    "ItemResponse": {
      "type": "string"
    }
  },
  "required": [
    "ItemId",
    "ItemResponse"
  ]
}

This basically will be our remote method signature requiring ID of the list item we're updating and the response we want to record. The URL of the remote method will be created after we save the flow but we need to add an action before we do that.

The action step will be from a SharePoint template and I’m going to pick an action that says [update list item]. Parameters are pretty basic so I'll just show you the snapshot of the entire flow:

Lets go ahead create this Flow and obtain the URL of the remote method, and add it to our azure [RecordAnswer] function.

Let's run our flow, and see how this works in action.

Running and testing it

I’m going to switch back to my SharePoint list and create a new item in my list like I did before, click save, and I should be getting a phone call in a moment. Here it is, let's go ahead and refresh the list after I answered the automatic voice question ... it works! my phone number has been verified.

If things didn't work for you, you can troubleshoot the flow by reviewing the run history. If you click on details of the run, you will be able to see what happened. In our case, the request came in and there’s some parameters that came in here, our hardcoded item ID, our response, whatever the user has entered and of course that has been consumed by our update list item action and here is the parameters that were updated.

This is really how easy it is to configure your own interactive menu in Azure, gather some input from users and send it back to SharePoint and record all this information in SharePoint.

I hope you found it useful, and again if you have any specific scenarios you would like to see more, please leave a comment, like this post, and I hope to post more interesting stuff really soon!

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

How To: Create interactive voice menu with Twilio, record caller's input in SharePoint

In this video we'll continue from the previous one this time taking a detailed look at how to create interactive voice menu with Twilio and record caller's input back into SharePoint.

This is great for: automatic voice reminders, overdue notice calls, emergency messages, contact verification, or just about automatic anything you'd normally have someone call you.

Enjoy and I'd love to hear what you'd automate!

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

Intranets of the future: Creating Multidimensional Intranet Experiences

Some time ago, the world was believed to be flat. Luckily, this is no longer a majority opinion.

When most of our work was done at the office, at our desk in front of a screen, it made sense to have an email, intranet and line of business apps in front of you to get things done.

Over time, this style of work shifted towards being more distributed.

I often work with our team on the same project but in a different time zone than others. When there is a blocking issue, one of us may need to get a hold of the other at various times of the day. At first, we were worried that our communication was turning into chaos. However, this chaos is primarily due to archaic tools we were trying to use in modern day work culture. We're seeing similar sentiment with many of our customers today.

Here are a few examples we're seeing as major opportunities for creating multidimensional intranet experiences.

Smart use of IoT

Here is the scenario. You're in a meeting room with your customer, someone is trying to present their screen. But wait, they're using a mini display port on their laptop and they forgot to bring their dongle. What do you do? Email helpdesk or create a ticket? Call helpdesk, what's the number? Run around the office asking if anyone has a spare dongle? Create a virtual meeting via Skype even though everyone is in the same room?

What if your meeting room had a big, red "Call Helpdesk" button which pages helpdesk staff available at that time to come to the boardroom, create a support ticket, and lets you carry on without getting preoccupied whether or not anyone has responded.

The hardware is already available to facilitate this kind of interaction, check out what folks at BT.TN are doing. Using their hardware and software integration of Zapier or Microsoft Flow it's easy to put many of the bits and pieces together

Now, this is IoT in action at the modern office. We're running an experiment with one of our customers right now to see what kind of response/usage we're going to get -- I'll share stats with you shortly on the data we have.

Interactive Employee Engagement

Employee engagement is one of the biggest use cases for an intranet, yet there are far more natural settings for employee engagement, for example: Staff kitchen or a break room :)

I've been working on the intranet project for a healthcare provider. Sure, a lot of admin staff use the intranet to save documents but what about employee engagement? Yes, we've added a poll, a news carousel and few other widgets to keep people in the loop but what value does it bring if only admin staff have access to those. Can you even consider results of a poll complete if 70% of staff is a floor staff with no practical means of accessing the intranet?

In this scenario we're experimenting using a TV in the staff break room to display new carousel with part of the screen being dedicated to poll. Staff can use physical voting buttons to cast their vote... and that's been a bigger hit than a new coffee machine.

Bringing interactive experiences like this has tremendous impact on employee engagement when placed strategically. This is especially relevant for staff that don't normally have physical access to a computer... think staff at the store, manufacturing facility etc.

Easing into mobile

Mobility is perceived differently within different organizations. If you're a software company like we are, jumping on board with whichever is most productive is great. Our company size also allows us to be flexible and adapt as things become more annoying or less productive. Most of our staff owns several devices and uses them interchangeably to get the work done.

However, this is often not the case for some of our customers. Enabling mobile is a huge deal. There are security and access implications.

One thing to remember: It's not an all or nothing scenario!

Going mobile doesn't mean your entire intranet needs to go mobile. For one of our customers we proposed to use Microsoft Teams to handle helpdesk requests. Why?

teams1.PNG

It has a mobile app for which you can send text and pictures.

You can use it on the go, which is usually where you need help.

You can add a link to Knowledgebase. It took no time to install and minimal change management.

You can even integrate tools like Zendesk directly into the Teams UI.

In this case the company wasn't on Office 365 or SharePoint Online, but the workflow was adapted almost immediately because the use case was fairly clear and didn't require further integration.

In your organization it may not be Teams, but try to look for opportunities to use the latest tools to add efficiencies to existing workflow while doing little to no development.

Leverage your existing investments

You're probably thinking that all of the above will require re-design or re-build... but no, you can leverage existing infrastructure and development. Most of the scenarios I've described above are extensions we built on top of the existing intranet, even one for SharePoint 2013. The key is to determine how your staff works and the biggest impact you can bring to the table to maximize efficiency and engagement for your people.

As always, would love to hear what challenges and creative solutions you've implemented, comment, like and share!

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

Biggest All Microsoft Tech event this weekend in New York City - SPS NYC 2017

Join us at SharePoint Saturday NYC 2017, this Saturday at Times Square, register here while seats are still available: Register Now

After presenting at various SharePoint Saturdays over the past years, I think the biggest thing I learned is not only what's in the agenda. At the event like this, you get to talk to technology innovators, see what's coming, see the trends, plan use cases and pitches in your organizations. The fact that this event is community sponsored and free makes is that much more accessible.

In case you're wondering, I'll be presenting on Twilio and Office 365 Integration, and there is plenty more amazing sessions just check these out here

Hope you can join me and dozens of other presenters at Times Square this Saturday!

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

How To: Triggering a Phone Call from SharePoint using Microsoft Flow and Twilio

Today, I wanted to share with you how you can trigger a phone call, based on events happening in your SharePoint.

Recently we built a functionality for one of our customers where a number of people were registering for an in-person event. Registrants needed to provide their phone #, among other things, and the company wanted to verify that this is a valid number for cancellation and exception handling purposes. Obviously having someone dial hundreds of numbers was not an option.

We’ll take a look at a shorter version of this particular scenario just to keep things nice and short.

Create a list in SharePoint

I’m going go ahead and create a list on my SharePoint site. We aren’t going to go into details how information gets into this list, in our case, it came from online form, you can use some other process as long as data ends up being recorded in our SP list.

All of the events that are happening from now on are going to happen around this list. So, I’m going to add one more field to this list, [Single line of Text] type, called [Verified]. This one will indicate whether this particular person had their number verified by our system.

Microsoft Flow

Next, I’m going to switch to my flow, and create a new flow sequence. Flow has a variety of triggers, several of them are SharePoint related triggers.

I’m going to pick a trigger that says [when a new item is created] and in here I’m going to provide my SharePoint site, and pick my newly created list.

Now, we'll add an [Action] to our Flow. If I was to pick [Twilio] as a Action you'll see that Twilio doesn’t have the ability to make a phone call from Flow, not yet :). It only has the ability to send a text message, list text message, or get messages, so how do I make a phone call?

Well, one of the things Flow provides is the ability to make HTTP requests. So, I’m going to pick HTTP as my template with HTTP Action and this will allow me to perform a remote call to some service and have that service make a phone call.

I’m going to use Microsoft Azure and specifically use [Azure Function App] to make my call using Twilio.

Here is how my HTTP Action looks like per-filed:

In here, our [Method] is going to be [POST], the URL of the service is going to be my Azure service (we'll create that in a moment). Next is the body of the request.

  • To - number to call to (your own number for the demo purposes)
  • From - number to call from (Twilio # you purchase)
  • SID - Twilio Account SID (this comes from Twilio)
  • Token - Twilio Account Token (this comes from Twilio)

I’m going to go ahead and create my flow by clicking the [>] button.

Azure Function

Lets take a look at Azure function that facilitates making the phone call.

In this post, we’re going to take a look at the first part which is making a phone call to a registrant. In the next post, we’ll take a look at how we can actually modify SharePoint lists from Azure function to record recipients response.

Basically, Function App is essentially like running your class in a cloud. You don’t need to worry about IIS, compiling web application, pages - you don’t have any pages. If its just a function that executes some logic and Azure can facilitate that for you. It's not just Azure that’s out there that has these capabilities, Amazon also provides functionality called function apps.

To create a new Function App from Azure:

  • Click [new] and new, and search for "function app"
  • Next, we provide the app name which is going to get its own URL, in my case "phonesurvey"
  • Pick your Azure subscription, the resource group, all the standard things that you create for any Azure subscription, and click create.

This will take a minute to create. Once done, go ahead and fire up the app. Now, this is just a basic frame. Next, is we create the function itself so I’m going to Webhook in C#. Once done, we'll see a demo class.

I’m going to copy and paste the code I already have and kind of walk through it

#r "System.Runtime"

using System.Net;
using System.Text;
using Twilio;
using Twilio.TwiML;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, 
    TraceWriter log)
{

var data = await req.Content.ReadAsStringAsync();
    var formValues = data.Split('&')
        .Select(value => value.Split('='))
        .ToDictionary(pair => Uri.UnescapeDataString(pair[0]).Replace("+", " "), 
                      pair => Uri.UnescapeDataString(pair[1]).Replace("+", " "));

  var accountSid = formValues["SID"];
  var authToken = formValues["Token"];
  var toNum = new PhoneNumber(formValues["To"]);
  var fromNum = new PhoneNumber(formValues["From"]);
  TwilioClient.Init(accountSid, authToken);
  var call = CallResource.Create(
            toNum,
            fromNum,
            url: new Uri("https://phonesurvey.azurewebsites.net/api/Switchboard?code=0W8XNvmdhJ/5kVmi8nFl2EOoIyf6VhN0Oz8AQaI6uTxu45YIeSGH2w==")
        );

    var twiml = call.ToString();
    twiml = twiml.Replace("utf-16", "utf-8");

    return new HttpResponseMessage
    {
        Content = new StringContent(twiml, Encoding.UTF8, "application/xml")
    };
}

First things first, you can see that I’m using a couple of .net references here and also, I’m using Twilio references. Obviously, those need to come from somewhere so I need to reference them in my so-called function project.

I’m going to click on View Files and create a new file called project.json.

{
  "frameworks": {
    "net46": {
      "dependencies": {
        "Twilio": "5.0.2"
      }
    }
  }
}

I’m going to paste the following:

What this piece of code really does is kind of like you adding DLLs to your project. In this case, we're saying that this project is going to be using Twilio DLL and .net framework.

 

 

 

Back in to my function. We have our async task where we read the body of the request which was passed to us from Flow and collect accountSid (coming from Twilio), and authentication token that’s also coming from Twilio. So, to get these two you basically need to sign up for Twilio. Then, I’m also collecting the number from which the phone call was made and the number to which phone call will be made to. We can read that information from our SharePoint list and pass it as a parameter here, but in my case it's hard-coded. Finally we're going to use our Twilio class which preforms the phone with few parameters: numbers being called from and to and how we want the request to be handled.

In next post, we'll take a look at how to write our own handler where we can actually answer the phone call and provide our users with some sort of messaging and handle what buttons they press or what they say to the phone and save it back to SharePoint.

And that’s it! Let's test this and see if I can trigger a phone call from Microsoft Flow to my number by creating a list item in my list.

Testing it all

Switch back to your SharePoint list and create a new item and I’m going to provide my name, remember this information would have ordinarily have come from some other form etc. We wouldn’t necessarily want show our SharePoint list with other fields in it.

Now as this item has been created, Flow is monitoring this list and is going to make a call to Twilio and confirm whether this is a verified username or not.

And here is our phone call!

Twilio: ‘Do you confirm registration for SPS New York?  To confirm press 1.’
Me: I press 1
Twilio: ‘Thank you for confirming, see you there.’

Perfect! And the system automatically hangs up. In next post I'll also show you how to wire customer's answers back to the list so we know exactly who's verified:

Now the conference organizers know exactly how many people are coming and who’s verified, valid phone number.

Pretty cool or what? :)

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

Video: Triggering a Phone Call from SharePoint using Microsoft Flow

You how sometimes ~Big Co~ calls you to verify your phone number, do survey or reminders? ... well in this video you'll see how you can implement your own in literally few minutes using Twilio Microsoft Flow, and Azure.

This is great for: automatic voice reminders, overdue notice calls, emergency messages, contact verification, or just about automatic anything you'd normally have someone call you.

Enjoy and I'd love to hear what you'd automate!

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

On-premises is Still an Option but...

Hosting your solution on-premises is still an option but chances of you picking it and actually being able to buy will become more of a challenge going forward.

Issue of Availability

We're not talking about technical availability... but purchase availability.

A few years ago, if your company had an enterprise agreement with Microsoft, you'd periodically have a conversation with your sales rep on whether you'll be upgrading to the latest version of the software, whatever you happen to be using.
You always had an option of not doing anything that year or investing in some sort of an upgrade.
Well, these kind of conversations are the thing of a past, as it seems, since pretty much every product hosted in the cloud is set for automated upgrade sooner or later.

Additionally, a recent announcement:

Microsoft is undergoing another huge reorganization to sell more cloud subscriptions and less software ... source: "Business Insider"

This means that programs/initiative helping small business and startups to get software packages will be completely geared towards the cloud. This will likely impact enterprise agreements as well.

Availability of New Features

Looking at Microsoft SharePoint in particular, even though some new features make it back to on-prem version via software updates, the majority of the slick new functionality remains "for the cloud only". We're talking:

-Delve
-Planner
-Video
-Modern Team Sites and Communication Sites
-Etc.

The question then becomes, not whether you want to have host your solution on-premises but, is there enough reason to design a solution that way.

More of our customers who require an on-prem solution today ask for it to be designed in such a way that it can be ported to the cloud with little to no changes in the near future. This isn't always the easiest since cloud providers constantly change features and API.

Take Delve API for example, it's been around for 2 years since release, then it has gone through rumors of significant new release, and now (literally less than 2 weeks at the time of writing this article) we know about it's API upgrade. This is just one specific example, many more follow this pattern.

delve api.PNG

Integration Landscape

The number of easy to use integration methods, microservices, webhooks, and serverless architecture has skyrocketed over the last year. Take Zapier for example; it's hard to begin estimating how much time would it take to build (by hand just 3 years ago) equivalent of integration that today will take 5-10 minutes using Zapier.

Same goes for Microsoft Flow, which is essentially Microsoft's version of Zapier, obviously mostly serving Microsoft products.

In both scenarios, almost all of the integrated solutions connect cloud services. If you're using on-prem version of Dynamics, on-prem PBX system, or a similar tool, you can't take advantage of these integration options. Once in the cloud, it's just a matter of providing authentication and a few connection options.

So do you really have an option?

Of course, but that option is likely to be in favor of a cloud solution whether now or in the next few years.

If you're considering to build a new solution, see how the landscape is changing and which parts should still reside on-prem and which ones should live in the cloud.

Not sure? Hire an expert, evaluate your options before proceeding too far ahead. In many cases it's not just technology but change management aspects and getting people trained. Just because someone in your company has been using the same accounting software for the past 20 years, doesn't mean they can't be trained on using a newer version with solid cloud integration.

As always, curious to hear your thoughts and comments!

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

Why: The whole big deal about serverless & microservices

Microservices sound complicated, like this picture above, but in fact we build a version of them every day ... my non-tech Mom does it!

Check this out:
-On your phone, you take a photo of the receipt
-You click Share
-You pick completely unrelated, DropBox app, and you save that photo in the cloud
-Boom, you just "submitted" an expense for a one man shop... next!

You just created your first serverless workflow by taking basic tools and combining them together to achieve a goal. You can mix and match tools to achieve a different goal!

Now, imagine you can build a bit more of a complex scenario. Like automatically text messaging your employees or customers to remind them when their appointment is coming up. Or texting employees to quickly fill a shift gap... and you know, there is an app for that! For techies out there here is my latest video describing how to set something like that up.

Now you understand microservices.

The concept of serverless is closely related; it applies to developers of those individual services. Imagine a developer out there who came up with an efficient way to collect all of the SMS responses, from above scenario, and lock a particular person for a shift based on their seniority and availability. This developer wouldn't need to build a server, worry about the traffic and spikes in usage, patches, or network security. They can literally program only their logic, with tools like Python or Node.js, and have their service running in the cloud as Microsoft Azure Function or Amazon Function

Now, hopefully you don't feel like being a microservices developer is like this picture to the left :)

This sort of architecture is only possible in the world of cloud, where "your" service can use "theirs" and vice versa. Instead of worrying about compatibility between services, you only care about what it does. The issue of availability and stability is taken care of by autoscale, which both Amazon and Microsoft do very well.

These by far, are the most important benefits of the cloud both for customers and vendors.

Did I miss anything? What do you think?

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky

Automatic SMS Appointment Reminders with Twilio and Microsoft Flow in SharePoint Online

You know those SMS reminders you sometimes get from shipping companies etc ... well in this video you'll see how you can implement your own in literally few minutes using Twilio and Office 365.

These are great use cases for appointment reminders at dentist office, salons, repair shops and other appointment driven businesses:

Enjoy and we'd love to hear your feedback!

Yaroslav Pentsarskyy has been a Microsoft MVP for 8 years and speaker at many local and worldwide tech events. Several of Yaroslav's books include: Rapid SharePoint 2013 development, Top 60 custom solutions built on SharePoint 2010, SharePoint 2010 branding in practice, and SharePoint and PowerShell Expert Cookbook.

@spentsarsky