As we were moving all our SharePoint Sites from 2019 to the cloud, we decided that we needed a fresh Provisioning Service to handle the changes brought by M365 in the cloud era. We had a few options on the table: we could either again purchase a ready-made solution from a third-party company or go the open-source route.
Our main aim was to find a solution that stays stable without demanding too much upkeep, all while keeping costs in check and being dynamic enough to keep up with the constant changes Microsoft is pushing out at the moment.
Our managers initially leaned towards the easy route of purchasing an external service and calling it a day. However, during an early discussion with one of those companies, I noticed how straightforward Microsoft had made everything. It struck me that I could probably handle it myself. Even if I can’t, it’s at least a challenge, and I’ll pick up some valuable skills along the way.
I didn’t have any experience with Azure Functions, but around the same time, we finally got our Azure subscription. This gave me the opportunity to experiment. On a rainy November weekend in 2023, I had some time to myself because my wife took our daughter to visit her grandparents. I decided to dive into the challenge.
The fine tuning
After creating the core solution, I presented it to my managers. I assured them that I could build our M365 Provisioning Service on my own with just a few more days for code cleanup and fine-tuning. Thankfully, my managers trust me enough for projects like this, and they gave me the green light to proceed.
However, it ended up taking more time than I initially anticipated to handle all the smaller details. I also had to redesign the app to accommodate requests for new Teams simultaneously. This part of the project took longer than expected, mainly due to changing requirements and my oversight in using alpha and beta framework components that weren’t yet in production. Lessons learned… 😀
Despite the time pressure caused by this setback, I managed to complete all aspects of the project, and the system became ready for use within a reasonable timeframe.
The final product
The end result comprises 25 Power Automate cloud flows. Each of them essentially triggers an Azure function through HTTP calls and records the status and outcome in a SharePoint site where all the data is stored.
I’ve also begun using Obsidian for managing my tasks and projects, and I must say, it’s incredibly versatile. When properly configured, it provides a seamless overview of all your workflows, code, and dependencies, making things much easier to manage!