The $300K Spreadsheet: How Manual Provisioning Became a Liability
Last year I got pulled into a project where the team was drowning in spreadsheets. Not the good kind, but rather the unfortunate kind: manual user provisioning lists, copy-paste operations between systems, and a recurring cloud bill that kept climbing because of over-provisioned resources sitting idle.
The kicker? Along with all the manual inefficiences, we incurred $300,000/year in overprovisioned cloud spend. And that was before we even talked about the staff time or the risk of things breaking when a step in the process was missed.
Let me walk you through how I turned this liability into a strength, and what I learned about why manual processes are more expensive than they look.
The Problem: When Spreadsheets Become Your System
It started with a learning management system (LMS) that handled course enrollments and training materials. Users needed access to hands-on labs for practical exercises, and video conferencing for live sessions. On paper, it sounded straightforward: add a user to a course, provision their lab environment, and set up their meeting access.
In reality, the process had grown organically without any integration between tools. Learners sign-up for a course in the videoconferencing tool. Export a CSV from the video conferencing tool, import it into the LMS. Manually cross-reference the list with an Excel spreadsheet tracking lab tenant assignments. If a user changed sessions or modalities (instructor-led vs self-paced), all three systems had to be updated manually: LMS, lab infrastructure, and video conferencing. The cloud spend was the most visible symptom. The team was bulk-provisioning lab tenants for entire courses, even though most sat idle for weeks.
Mapping the Chaos: Four Systems, Zero Integration
To fix this, I first had to understand the full scope. We had four main systems:
- CRM system (acting as the source of truth for user identities)
- LMS (for course management and content delivery)
- Lab infrastructure (cloud-based environments for hands-on practice)
- Video conferencing platform (for live sessions and recordings)
Each system was an island. There were no APIs connecting them, no automated workflows. Everything relied on manual exports, imports, and human coordination. Any time a step was missed, users could end up with mismatched access status between the LMS, Video Conferencing tool, and hands-on labs.
The Business Case: Making Invisible Work Visible
Before we could sell automation, we needed to quantify the problem. I spent time shadowing the team and tracking their workflows. Here's what we found:
- Time spent: 15-25 hours per month on cloud provisioning and sync tasks
- Cloud waste: $300K annually on idle lab tenants
- Risk exposure: High potential for business interruption if a learner signed up late and was missed during the spreadsheet loads.
The $300K figure wasn't just a number, it was the annual cost of over-provisioning lab environments. By moving to just-in-time provisioning, we could eliminate that waste entirely.
The Solution: Automation and Integration
I decided we needed to treat the CRM as our single source of truth for user identities and roles. From there, I built automated bridges between all the systems.
First, I implemented SSO through the CRM's identity provider to connect everything. This was an easy transition for learners, who were already familiar with this login for our Knowledgebase. A user with access to the Knowledgebase (customer or prospect), now had access to the LMS. This also eliminated manual user provisioning in the LMS.
The Hard Part: Cleaning Up the Legacy User Mess
Of course, we couldn't just flip a switch. The systems were already in production with users, and we had years of accumulated data drift - users in some systems but not others, stale permissions, mismatched roles. This kind of drift is inevitable when systems don't talk to each other. It's not a failure of diligence, it's a failure of architecture. I worked with the LMS admin to find users with last-login dates older than a certain threshold, and we disabled those accounts. Additionally, the LMS admin drafted communications instructing learners on how to use the new login flow. Using Just-in-Time provisioning through the SSO provider, we were able to dynamically map existing user accounts to be SSO-enabeld, and any new learner accounts created dynamically as they authenticated.
Automating the Video Conferences: Work from a Single Tool
As mentioned earlier, there was also a video conferencing tool in the mix. Under the previous setup, the Training team had to set up Meetings for every instructor-led training class, which was then used as the "sign-up" for the class. We changed this around by moving the "sign-ups" from the conferencing tool, to the LMS. I got the video conferencing tool integrated into the LMS natively, and worked with the Training Team to start building their Instructor-Led course catalog out in the LMS. Now, each instructor-led course is populated with "Sessions" for each instance of the training, and during the setup the trainer opts for the LMS to use the conferencing tool.
The net result is that as learners sign-up for instructor-led courses, the LMS automatically creates and adds the learner to a conference specific to that session. In the trainer's view of the LMS, they see the "host" join link, while the learners see the "attendee" join link. Trainers only need to define courses and sessions in the LMS. Learners only need to find and sign-up for sessions in the LMS. One place to go for everyone.
Automating the Lab Provisioning: Webhooks and Workflows
Working with our in-house workflow automation team and my coworker for lab support, we worked through a number of problems:
- How to know a course is "lab-enabled"?
- How to know when a lab-enabled course starts/ends?
- How to know what type of course it is (self-paced versus instructor-led)
< Webhooks just entered the chat >
The LMS provided a number of webhooks which allowed us to start with as subset of information, and then dynamically query the LMS and HOL systems to fill in the blanks. Using this we were able to build a number of workflows to act upon the Event happening in the LMS, and take appropriate action in the HOL system.
The Results: From Liability to Asset
The transformation was dramatic:
- Provisioning time: From 1-2 days of manual work per course to under an hour of automated processing
- Cloud costs: Eliminated the $300K in idle tenant spend by moving to on-demand provisioning
- Staff time: Freed up dozens of hours per month for the training team
- Simplicity: Trainers and Learners start from the LMS, leading to a repeatable experience.
The biggest win wasn't the speed or the cost savings—it was the peace of mind. Provisioning became something we could rely on, not a source of constant worry.
What I Learned
This project taught me a few hard truths about enterprise systems:
Manual processes feel cheap because their costs are invisible. They're baked into staff time and occasional crises, not line items on a budget. But when you add it all up (time, waste, risk), the real cost is staggering.
Automation isn't about doing the same thing faster. It's about making work auditable, repeatable, and scalable. And sometimes, it's about eliminating work entirely.
The most valuable systems are the ones that let you do more with less. Provisioning is foundational. If you get it right, everything downstream gets easier. If you get it wrong, it becomes a bottleneck that limits your entire operation.
Finally, never underestimate the power of cleaning up your data before automating. You can't automate chaos; you have to fix the foundation first.
Comments welcome!