
PnP Core vs PnP.Framework: Why I Haven't Switched Yet
Learn why I'm still on PnP.Framework instead of PnP Core, the two blockers holding the migration back, and what has to land before I make the jump.
Provisioning SharePoint sites that survive contact with reality: PnP templates, eventual consistency, navigation, content types and Durable orchestrations.
Provisioning is the work of creating something in Microsoft 365 and having it come out right every time, which is much harder than creating it once by hand.
The recurring enemy is eventual consistency. The site exists, and Graph says 404. The list is created, and the field is not there yet. Anything that assumes a create call is finished when it returns will work on your machine and fail in production. The other recurring enemy is partial failure: provisioning half a site and then retrying from the top is worse than not retrying at all.
That is why so much of this overlaps with Durable Functions. Once you accept that provisioning is a long-running, resumable process rather than a script, most of the flakiness has somewhere sensible to go.

Learn why I'm still on PnP.Framework instead of PnP Core, the two blockers holding the migration back, and what has to land before I make the jump.

Learn how to checkpoint a Durable Functions orchestration so a failed SharePoint provisioning run resumes where it stopped instead of starting over.

Learn how to create Microsoft 365 groups programmatically with the Graph SDK in C# without sending a welcome email flood to every member.

We've all tried creating a SharePoint list without using Content Types from the start. It seems like the quick solution, but it can lead to challenges later when restructuring the list. This post explains why using Content Types from the beginning is a smart move that can save time and hassle in the long run.
No posts match — try another search.