From Spreadsheets to Software: A Digital Transformation Case Study
A 35-person UK freight and logistics company was running its entire operation on 14 spreadsheets. This is the full story of replacing them with a custom operations platform — the problems, what was built, the technology stack, the timeline, the results, and what every spreadsheet-dependent business can learn from it.
TL;DR
- Client: 35-person UK freight and logistics company running entirely on 14 operational spreadsheets
- Problems: data silos, version conflicts, manual reconciliation, inability to scale, no real-time visibility
- Built: custom operations platform — job management, customer portal, driver app, Xero integration, automated notifications
- Tech stack: Python FastAPI + React + PostgreSQL + n8n, hosted on Google Cloud Run
- Timeline: 4-month build, 8-week phased rollout
- Results: 80% admin time reduction, 40% revenue growth without headcount increase
The Starting Point: 14 Spreadsheets, One Business
The client is a 35-person freight and logistics company based in the Midlands, specialising in time-critical B2B freight movements across the UK. They have been operating for 12 years and have grown organically from a 5-person operation to a team of 35 — but the systems that served them at five people were still in use at 35.
Their operation ran on 14 spreadsheets:
- Quote Tracker: All active and historical quotes, with status, value, customer, and assigned operations contact
- Job Schedule (current week): All active jobs for the week, with collection and delivery details, driver assigned, and status
- Job Schedule (next week): A separate sheet because the current week sheet would get too large
- Driver Allocation: Which driver is on which job, their availability, and hours tracking
- Subcontractor Register: Third-party hauliers used for overflow capacity, with rates and availability notes
- Customer Contact List: Key contacts at each customer, updated manually by different team members
- Pricing Matrix: Rate cards by lane, weight, and customer tier
- Invoice Tracker: Jobs that had been invoiced, payment status, and outstanding amounts
- POD (Proof of Delivery) Log: Tracking which jobs had PODs received and filed
- Vehicle Maintenance Log: MOT dates, service due dates, and defect records for the fleet
- Driver Compliance: Licence expiry, CPC training, digital tachograph records
- Claims Register: Damage and loss claims with status and financial impact
- Customer Reporting: Monthly usage and performance stats compiled manually for each major customer
- Monthly KPI Sheet: Manually compiled management reporting — revenue, volumes, margins, on-time performance
Each spreadsheet was kept in a shared folder. Multiple people edited them simultaneously — which Google Sheets can handle to a point, but which caused constant conflicts when two operations coordinators were updating job status at the same time. The job schedule sheets were the worst: by Thursday of each week, the current week sheet was an unnavigable mass of highlighted cells, crossed-out entries, and manual notes in cells.
The Problems These Spreadsheets Created
Data Silos
A customer job existed in the quote tracker, the job schedule, the invoice tracker, and the POD log as four separate entries maintained by four different people. When the customer rang to ask about their delivery, no single person could answer without checking multiple sheets.
Version Conflicts
The pricing matrix was edited by the MD without the operations team being notified. Jobs were quoted at the old rates for three weeks before the discrepancy was discovered. The invoice tracker and the accounting system diverged monthly and required a two-day reconciliation exercise.
Manual Reconciliation
Friday afternoon reconciliation — comparing the job schedule to the invoice tracker, to the driver allocation, to the POD log — consumed five hours per week across two people. Every discrepancy required individual investigation. The month-end reconciliation was a two-day exercise.
Inability to Scale
The MD had turned down two major contract opportunities in the previous 18 months because "the team doesn't have capacity." The actual constraint was not drivers or vehicles — it was operations administration. Every additional job added proportional administrative overhead that the team could not absorb.
What Was Built: The Custom Operations Platform
After a two-week discovery process (interviews with each team member, process mapping, and a review of the spreadsheets), the scope for the custom platform was defined around four core modules:
Module 1: Job Management System
The core of the platform. A single record for each job containing: customer and contact details, collection and delivery addresses and windows, weight, dimensions, special requirements, status (quoted → confirmed → scheduled → in transit → delivered → invoiced → paid), driver and vehicle assigned, POD status and document storage, and real-time timeline of all status changes.
The job board view replaced all three scheduling spreadsheets — a Kanban-style view showing all jobs by status, colour-coded by priority, with drag-and-drop status updates. Operations coordinators could see the entire week's work in a single view that updated in real time.
Module 2: Customer Portal
A login-protected web portal for the company's 12 regular customers. Each customer could: view all their jobs and current status in real time, download PODs without ringing the office, access their invoice history, and request new quotes via a structured form.
The portal eliminated approximately 60% of inbound customer calls — most of which were status enquiries that the operations team had to interrupt their work to answer. Customers responded positively: they preferred the self-service visibility to waiting on hold.
Module 3: Driver Mobile App
A React Native mobile application for drivers. Each driver's daily job list populated automatically from the job management system. Drivers could: view job details (addresses, contacts, special instructions), update job status (collected, delivered, failed delivery), capture and upload POD photos, and report vehicle defects.
When a driver marked a job as delivered and uploaded the POD photo, the job record in the main system updated automatically, the customer portal reflected the delivery, the customer received an automated email notification, and the job moved to the invoicing queue — all without any operations team involvement.
Module 4: Xero Integration and Automated Invoicing
When a job moved to the "delivered" status, the platform automatically created a draft invoice in Xero using the agreed rate for that customer and job type. The operations coordinator reviewed the draft (30 seconds vs 5 minutes to create manually) and approved. Xero then handled payment tracking, reminders, and reconciliation.
The invoice tracker spreadsheet was retired entirely. The monthly reconciliation exercise that had taken two days was reduced to reviewing an automated reconciliation report in under 30 minutes.
Technology Stack
Backend API
Python FastAPI
REST API with async support, Pydantic validation, automatic OpenAPI documentation
Frontend
React + TypeScript
Web application with TanStack Query for data fetching, React Router, Tailwind CSS
Mobile App
React Native
iOS and Android driver app sharing component library with web frontend
Database
PostgreSQL
Managed Cloud SQL instance on Google Cloud, with read replicas for reporting queries
Automation
n8n (self-hosted)
Webhook-triggered workflows for notifications, Xero API calls, customer email and WhatsApp updates
Hosting
Google Cloud Run
Serverless containers, auto-scaling to zero, low-cost for the usage pattern
File Storage
Google Cloud Storage
POD images, documents, and attachments with signed URL access control
Accounting Integration
Xero API
OAuth 2.0 connection, automated invoice creation and reconciliation via n8n webhooks
The Build and Rollout Timeline
The project ran over six months in total — four months of build and two months of phased rollout.
Discovery and Requirements
Interviews with all stakeholders, process mapping for each spreadsheet, data model design, wireframes for all key screens, technical architecture decisions, and project plan. Deliverable: a requirements specification document signed off by the MD and operations manager.
Core Platform Build
Database schema, FastAPI backend, React web frontend (job management module first, then customer management and invoicing queue). Weekly demos to the client for feedback. Three operations staff invited to test the job management module at Week 6 — they found 12 issues that were fixed before broader rollout.
Portal, Mobile App, and Integrations
Customer portal, React Native driver app, Xero API integration, n8n automation workflows (delivery notifications, POD emails, invoice creation triggers, payment reminder triggers). Data migration: 18 months of historical job data migrated to the new database for reporting continuity.
Phase 1 Rollout: Operations Team
Operations coordinators trained and transitioned to the new system. Job schedules run from the platform; spreadsheet kept as read-only backup for the first two weeks. 22 new issues logged in week 15 (mostly UX preferences and minor data display issues), resolved within the week.
Phase 2 Rollout: Drivers
Driver app rolled out to all 14 drivers. Two drivers required individual support sessions to get comfortable with the app. Paper job sheets retained for the first week as backup. By day 5, paper job sheets were not being used and were discontinued.
Phase 3 Rollout: Customers and Finance
Customer portal launched to the 12 regular customers with a personal introduction email from the MD. Xero integration activated; automated invoicing live. Finance team trained on the reconciliation report. All 14 spreadsheets archived (read-only) after the first clean month-end reconciliation completed in 28 minutes.
The Results
Lessons Learned
- Discovery is worth doing properly. The two-week discovery phase added upfront time and cost but prevented scope changes during build. Every requirement we agreed in discovery held; every change request that came in during build was from something not covered in discovery. They were handled quickly because the underlying architecture was designed for them.
- Get end users testing early. The operations coordinators who tested the job management module at Week 6 found issues that the development team would never have found. They tested with real scenarios from their actual working day. Their feedback improved the product materially before it ever went near a customer.
- Phase rollouts are non-negotiable for operations systems. Running operations and spreadsheets in parallel for two weeks felt inefficient, but it provided a safety net that prevented any business disruption. Two issues found during parallel running would have been significant problems without it.
- The driver app was underestimated. React Native development across iOS and Android added complexity that was slightly underestimated in the initial scope. Two additional weeks were needed to resolve device-specific bugs on older Android models used by some drivers. Budget contingency (held at 15% of project cost) absorbed this without impact on delivery.
- The biggest ROI driver was not expected. We expected the biggest benefit to be administration time reduction. The biggest actual benefit was the ability to take on more revenue without more headcount — the 40% revenue growth was enabled entirely by the platform removing the operational bottleneck. This was not in the original business case because the client had not connected the spreadsheet problem to the growth constraint until we pointed it out in discovery.
When Does Excel Stop Being Enough?
Excel and Google Sheets are genuinely powerful tools. They are flexible, accessible, and require no technical expertise to use. The question is not whether spreadsheets are good — it is whether they are still the right tool for the job at your current scale and complexity.
The tipping point comes when one or more of these conditions are true:
- Multiple people need to edit the same data simultaneously and conflicts are causing errors
- Data in the spreadsheet needs to be available in real time to people who are not at a computer (drivers, field staff, customers)
- The spreadsheet has become the only way to run a process — and the person who maintains it is a single point of failure
- You are spending significant staff hours each week maintaining, reconciling, or correcting the spreadsheet rather than using the data in it
- The spreadsheet cannot do something the business needs — like send an automated notification, integrate with an accounting system, or show a customer their current status
- The business could grow faster if the operational process the spreadsheet manages could handle more volume
If two or more of these apply, the ROI case for custom software is almost certainly positive. The question is usually not whether to build — it is what to build, in what order, and how to phase it to minimise risk.
Running Your Business on Spreadsheets?
SpiderHunts Technologies builds custom operations platforms for businesses that have outgrown their spreadsheets. We handle everything from discovery and design through build, data migration, and rollout. If your operations are constrained by manual processes and disconnected data, let us show you what is possible.
Get a Free Discovery Call