This article cooked up in my thimble-sized brain after a string of events at my office. The issues all circled around having islands of data sitting around in various places, inside of various "containers" and in various formats and structures. The data in one particular case involves inventory. But inventory is a big, fat, drippy, soggy bag of goo that has different meanings and different values to a lot of people circled around it like kids at a campfire. Some want numbers. Some want names and labels. Some want locations. Some want state values (indicators of current status or changes of state). Some want derivatives, like contract data, support metrics, and other secondary and tertiary cost drivers.
If you put a microphone up to each of these people and ask them where all this data should reside, you will very likely hear a wide variety of answers:
- Spreadsheets
- Database Tables
- XML files
- Visio Drawings
- AutoCAD Drawings
- Compound Documents (Word documents with embedded spreadsheets, etc.)
- Web-enabled reports (web services providers)
- Paper print-outs
- You can't predict future needs
- You can't predict future project priorties
- Sizing the storage requirements is challenging
- Placing the storage provider is challenging
- Avoiding proprietary "lock-in" can be challenging
- Strive for version independence. Avoid storing in a product where version changes often cause upgrade issues for consumer applications and services. ADO and ADO.NET (ODBC, OLEDB) are fairly version-agnostic. Meaning that if you move the tables from SQL 2008 R2 to SQL 2012 there's much less chance of having to recode applications to change the connection endpoint compared with storing in Microsoft Access, Excel or even AutoCAD drawings.
- Find a "platform-neutral" provider medium. Client applications are always off the table unless there isn't a choice. It has to be a "server" application or service. It has to provide robust access to everyone that needs it, with the least overhead, and the least performance drag. If every consumer of the data has to have a proprietary application installed in order to access it, you're taking a risky, and often costly direction. This is why databases are most often preferred, since they offer up access in the most neutral ways and the widest range of applications and uses.
- Take your time! Don't let anxious users pressure you into making a quick decision rather than a correct decision. Just because the floor plan folks want everything in AutoCAD in time to meet their looming deadline doesn't mean that a month later, five times as many users will scream for access to the data via a web services provider medium, or an XML table.
- Try to leverage what you already have. If you have Oracle, use it. If you have SQL Server, use it. If you have an intranet server with web services enabled, use it. Try to not build new bridges when others exist unless you can't possibly make do with what you have. Reinventing the wheel is dumb.
- Enlist an objective team. Gather folks from your database group, your applications development group, management group, finance group, any group that might even be remotely impacted by what you're trying to accomplish. You'd be amazed what you can learn from people you didn't think had any interest or involvement in what you'r doing. Many times they've been down the same road before and can offer valuable insight and advice. Take it! Learn from it. It's ok to meet with the direct consumers, but if you surround yourself with only them, you will be going forward semi-blind.
- Get metrics! Don't ever base a purchase decision or a project direction on input from test users that don't back it up with hard numbers. It's not that you can't trust them (sometimes you can't), but it's that without numbers, there's no way to objectively compare and analysis what's going on. For example: I was involved with a project to establish a central data repository for a variety of applications over assorted quality WAN links. Three of the locations complained about performance problems and pushed HARD to go with another alternative. It turned out to be a network link configuration problem at the router, and once it was addressed, the performance was perfectly fine. Had this not been investigated, the alternative project direction would have delayed the entire project for four more months and added 50% more cost. Metrics are king.
