This started as an idea, which led to a prototype put together in my own time, as much because I like a coding challenge as anything else.
We used libraries of training modules, written in MS Word, that were collated into timetables, more Word documents, to build our training courses.
A spreadsheet of all modules was maintained, in various categories. Hundreds of modules.
And it worked great. With a solid reference coding system imposed by a previous head of, it really worked well.
There were shortcomings though. Having to copy and paste information from each module summary document into the timetable document can be incredibly time consuming. When the document library was moved from a windows network drive to SharePoint, the time to do this was increased by a factor of 10.
In addition, trainers collating the module documents in preparation for delivery took days. Wow.
And tracking who was updating any given module, or what past updates had been made, was a nightmare too. It involved opening each module document, scrolling to the bottom and checking the changelog. Yuck.
Virtuoso was born. A windows forms application, written in c#, storing all information in a local database, providing a drag and drop interface for building timetables. Module information was maintained, including versioning and SharePoint document locations. Timetable documents could still be created using Office automation whenever required. And perhaps more importantly, trainers could collate all training documents at the click of a button.
Due to IT constraints, there was no shared SQL database server available, so I created a set of SharePoint custom lists to act as the central storage. Using SharePoint web services, I could synchronise the local data with SharePoint as and when needed, dealing with the rare conflicts as and when they occurred.
(Update: October 2016: It has been through a few iterations, minor bug fixes and feature enhancements, but is still running today.)