Office 365 Developer Patterns and Practices – Introduction to the program

Office365PnPLogoRed_thumb1I first want to thank the community for your excellent feedback towards the Office 365 Patterns & Practices program (PnP) which we launch on late July this year. Your interest has been tremendous and it’s great to see that there’s so many people willing to help others on the transition to the app model.

There has been great contributions on the GitHub project and excellent discussions in your Yammer group at the Office 365 Technical Network. You will also see some official communication through the Office blog also soon for giving credits for those who have been active and helpful in our start of the program, but I wanted to share some initial plans on what will be happening with the PnP program in near future and what is the current working model.

This post is written in Q&A format, to answer the commonly asked questions what we get all the time. If we missed something relevant, please let us know.

 

Why was the Office 365 Developer PnP program created?

PnP program originates from work we did originally internally in Microsoft by collecting patterns and practices from the work we did with our global enterprise customers towards app model transition. We first started sharing this internally for the benefit of the internal community, but since there was clearly lot of value for that for external community as well, we moved the project to CodePlex and released it externally during SPC 2014 using name of Office App Model Samples (Office AMS).

During summer 2014 time there was a decision to move the Office AMS to open source platform for the benefit of the community, so that we can start building the great tooling and guidance together with all the highly skilled Office 365 and SharePoint developer resources out there. We want also the external resources to have a change to participate on this program.

 

What is the Office 365 PnP program governance plan?

This is high level plan on how to start contribution and how we will release new monthly versions of the package.

  • Use ‘Dev’ branch for your development and contributions
  • We will do monthly releases of the ‘Main’ branch with more detailed testing
  • We will do monthly release communications to the official Office blog, including credits for the active contributed persons in GitHub
  • We will start monthly web casts on showing latest development and the next steps in the roadmap. More detailed contact information for this in our Yammer group when schedule is locked. We are expecting to have the first session on mid-September.
  • We are working on converting existing word documents to markdown format and to have additional content on the demonstrated patterns and practices in MSDN, dev.office.com and in the PnP wiki
  • We are working gradually to get the v1.0 of the core component out. Right now the component is in 0.5 version level due constantly evolving code. All changes are introduced in way that we should have full backward compatibility for previously used methods. Old methods are marked to be deprecated.
  • We will continue adding relevant simple samples on the specific patterns under Samples section
  • We will continue adding new scenario samples to the structure. Scenarios are targeted on showing how the core component works and how certain specific capability can be achieved using core component implementation
  • We will continue expanding the solution category with more comprehensive solutions, which can be used as a reference for your own development.

If you have good suggestions or feedback with the above high level pattern, please provide us feedback and input. Program exists for the benefit of the community, so we are more than willing to hear your input on things.

What is the Office 365 Developer PnP program roadmap?

Currently we are lacking lot of critical elements to match the shared content with the classic Patterns & Practices term, but we wanted to share the existing program content right away, rather than wait for the months and months on getting it out, so that elements which are useful can be already used.

Similarly as we do more agile releases with the Office 365 service, we needed to start with somewhere and now we can work together with the community to build the missing pieces. We are committed to drive the Office 365 Patterns & Practices to the similar direction as the previous P&P programs, but still keep the barrier of entry as easy as possible also for new developers.

These are the areas where we will be concentrating on upcoming months.

  • General development guidance aligned with the product and service roadmap
  • New patterns for SP side
  • Office client side patterns
  • JavaScript patterns
  • Improvement to core component
  • Unit testing for core component
  • Logging for core component

We need your help on this to ensure that content is relevant for the field. If you have commitment and willingness to help the SharePoint community on this journey, please join us on this journey by contributing to the GitHub or simply by providing feedback. Your input is vital for the success of this.

Note also that especially for the provider hosted app side, all the generic .NET and ASP.net P&P guidance also applies, so check the Patterns and Practices center in the MSDN for the generic building blocks and patterns.

 

How is content created and approved by Microsoft?

All patterns what we released are discussed and blessed by the product group engineering to be used and shared by the community. Our PnP core team works together with the Engineering team related on the global enterprise customers on separate program where we help our enterprise customers in Office 365 Dedicated to transition from the full trust code to the app model techniques. When we find out new options and patterns which can be used based on these enterprise projects, we target to provide sample on it as soon as possible in the PnP guidance.

Our initial objective is always to first provide simplistic proof of the pattern which demonstrate the key capability. This is simply to keep the barrier of entry as low as possible also for people who might not have multi-year development experience. These samples can be then combined for the larger solutions and any new capability introduced in sample section will be also included to the core component.

Following picture clarifies the process in high level.

image

  1. We work currently with numerous global enterprises currently on the app model transition. These projects are generating input and code patterns which are discussed also with PG engineering to ensure that we drive these enterprise customers to the right direction by providing them enterprise level developers who are trained to help customers on the transition to the app model and to ensure that transformed customizations are in proper quality level. Obviously lot of input is also coming from normal on-premises customers and partners who are moving to new model.
  2. Code patterns and formalized to simplified samples, which concentrate on demonstrating the key capability or functionality. We try to keep these as simple as possible, so that key topic can be easily adapted to be used outside of this context as well.
  3. Generic implementation of functionalities are moved to the PnP Core component which helps on increasing productivity of the provider hosted environment developers by encapsulating complex CSOM operations to reusable methods.
  4. Reference solutions are build using the core component, which demonstrate more production ready pattern to use the code. We do not have too many solution in this section right now, but there are multiple on going efforts to address that as soon as possible. Notice that these are still samples provided by the program and there’s no SLAs for the code.

We obviously also take community contributions to the all of the areas as well, so that we can faster evolve showing different building blocks which are critical for app development.

Right now most of the samples concentrate on the provider hosted app side simply due the nature of the work we’ve been concentrating. We would be thrilled to get more JavaScript or Office client app model samples included to the package.

 

What is the PnP core component for?

Office 365 Developer PnP Core Component is extension component which encapsulates commonly used remote CSOM/REST operations as reusable extension methods towards out of the box CSOM objects. It's targeted to be used with provider hosted apps and will help developers to be more efficient and productive by providing single line extension methods for commonly used operations from content type creation to uploading page layouts to publishing sites.

Following lines are from the Provisioning.Yammer scenario and they nicely demonstrate the power of the Core component usage. With the just the following lines of code we are provisioning new collaboration sites with specific branding and change the out of the box site feed to use Yammer group or Open Graph feed.

    1: // Create new sub site
    2: Web newWeb = hostWeb.CreateWeb(title, url, description, template, 1033);
    3:  
    4: // Set theme for the site
    5: newWeb.SetThemeToSubWeb(hostWeb, "Orange");
    6:  
    7: //Remove the out of the box "NewsFeed" web part
    8: newWeb.DeleteWebPart("SitePages", "Site feed", "home.aspx");
    9:  
   10: // Let's first get the details on the Yammer network using the access token
   11: WebPartEntity wpYammer;
   12: YammerUser user = YammerUtility.GetYammerUser(ConfigurationManager.AppSettings["YammerAccessToken"]);
   13:  
   14: // Get OpenGrap object for using that as the discussion feed
   15: wpYammer = YammerUtility.GetYammerOpenGraphDiscussionPart(user.network_name, Request["SPHostUrl"] + "/" + txtUrl.Text,
   16:                                                             false, false, "SharePoint Site Feed - " + title);
   17: // Add Yammer web part to the page
   18: newWeb.AddWebPartToWikiPage("SitePages", wpYammer, "home.aspx", 2, 1, false);

That’s pretty impressive isn’t it?

 

What is the GitHub project structure?

Here’s a short description of the different folders in the GitHub project. This is how we currently group the code and other elements in the overall package.

image

We will be also starting to add more and more content to the Office 365 PnP wiki, which already has links to great channel 9 videos, which explain some of the samples what we have in the PnP guidance.

 

What is the structure of the provide Visual Studio solutions?

Each Visual Studio solution has linked resources in it, including documentation and possible reference to the Core component. Below picture shows the exact structure.

image

 

Who are the core team members?

Right now we have selected group of people working as the core team members who can approve the submissions to the GitHub. These people have long term development background with enterprise customers and passion to help community on the transition to the new models.

This is pretty small group for now, but we will be growing the group based on the growth of the PnP program and we will be welcoming also non-MS people to this role in future. When we look candidates for this role, we are first of all looking commitment and wiliness to share for the benefit of others. Obviously overall skill set does matter heavily as well, but easiest way to show what you want to do is to contribute to the PnP.

 

How to I provide feedback for the program?

Our primary communication channel for any suggestions or ideas is the Office 365 Patterns & Practices Yammer group at https://aka.ms/OfficeDevPnPYammer. We follow this group actively and will collect input from you. You can also always shoot me an email with the feedback, if you prefer that, but please use the Yammer group for any technical support questions, so that we get those shared with the other PnP users.

We know lot of areas which needs improvement, but we always welcome concrete feedback with clear suggestions on how to improve the current work. Please note thought that PnP is community driven program based on the passion to share the knowledge for others. We do give credits for the people who contribute, but we do not fund the work being done at least at this time. This is open source program for the people who want to help each other’s for the benefit of the community.

Especially if you feel that something wrong or should be improved, just let us know. I personally highly value blunt feedback which should though also include the clear suggestions on how to fix the situation or what has been already done for fixing the issues / challenge. We can only improve if we know what’s the issue / challenge that should be addressed.

 

What is your history and why are you talking about the PnP?

VesaInvolve_181x202pngI’ve personally started my actual IT career back in ’95 during the bloom of the Internet. My first real company did essentially bankrupt back in 2000 and moved to work full time for others (Fujitsu) after that. I’ve always have background in development and love spending my time in Visual Studio, or that the time it was more VB5 or Visual Interdev. I moved to work in BasWare back in 2002 in R&D which was excellent time and gave me opportunity to fully concentrate on development activities. We spent lot of time on planning generic patterns and frameworks for the product platform, which are still used in the some of their products. Technology evolves, but patterns and models stay the same.

2006 I moved over to Microsoft to a role of consultant and continued working with the Enterprise customers, but moved to SharePoint platform. During my MS consulting time I had the privilege of working as a lead architect and developer with some of the biggest enterprises in the world for keeping still hands dirty on the actual development activities. Early on I realized that by sharing my findings will help the others in the community and due the openness with the learning's, I got to be involved in some really amazing programs, like SharePoint 2010 Ignite, SharePoint 2013 Ignite and Microsoft Certified Master (MCM) for SharePoint program. MCM was definitely the best experience on working as an instructor and content owner in all 18 rotation by facilitating the discussion and content delivery with the brightest and most skilful people out there for SharePoint.

Starting from first of July 2014, I’ve moved to the SharePoint product group to work as Senior Program Manager, specifically to the Engineering side of it to work in the SharePoint CAT team. I’m currently leading or co-leading multiple programs related on the FTC to app transition or to app model in general, including the PnP program.

If you have any feedback or ideas on how to improve the PnP program, please shoot me an email or use the Office 365 Patterns & Practices Yammer group for starting discussion. I’ll be also presenting in upcoming TechEd Europe 2014 on the app transformation topic, so drop by to say hi, if you are there.

 

Office 365 Developer Patterns and Practices

Office365PnPLogoRed_thumb1You can find the Office 365 Patterns and Practices project at https://aka.ms/OfficeDevPnP. This program is created for demonstrating patterns and practices with the app model techniques. You can find the team and other contributors also from the PnP specific Yammer group at https://aka.ms/OfficeDevPnPYammer.

Notice that this is community driven program and even all the people in Microsoft side have their day job, so there’s really no SLAs for the Yammer group questions, but we try to address those as fast as possible. Please join us on sharing your patterns, practices and learnings for the community.

“From the community for the community” – “Sharing is caring”