Posted by Josh | Posted in Life As A DBA, SQL Server, The Lone DBA | Posted on 10-17-2011
Tags: Simplicity, SQL Server
This post is the third in an ongoing series about how to survive as the only DBA in your organization. Since October of last year, I’ve been assigned to a team that is responsible for owning and maintaining the development infrastructure. It’s a great team of seasoned professionals, but not a single other DBA. As a result, I’ve had to think very carefully about how I go about my daily work, so as to give our customers consistently good service, while still allowing those without a lot of SQL Server related knowledge to pick up my work when I’m not available.
What Makes A Process Simple?
sim·ple [sim-puhl] adjective
- easy to understand, deal with, use, etc.: a simple matter; simple tools.
- not elaborate or artificial; plain: a simple style
- not ornate or luxurious; unadorned: a simple gown
- unaffected; unassuming; modest: a simple manner
- not complicated: a simple design
When I design a process for my team to follow, I always do my best to follow the definition above, especially the first and last lines. Processes should be easy to follow and only as complex as they need to be, no more. Programmers can sometimes get carried away with complexity, because a) it’s fun, b) it lets us stretch our muscles a little. That’s all fine and good in your lab, but when you’re trying to design something to be used in the real world by actual people (other than yourself), complexity can be a huge problem.
Take this example: your team needs a way to locate information about a particular server, including what it’s used for, make and model, etc. Here’s two choices for how you fulfill this requirement.
Option A – Command line / SQL scripts and a SQL Database
Sounds easy enough, right? And a relational database seems like the perfect place to store this kind of structured information.
Well, that’s great, for someone who is comfortable writing T-SQL code to interrogate a database. And who understands the structure of the database. And, oh by the way, can even find where the database is.
I’m guilty as charged on this one. When I started on my team there was no repository for server inventory, so I made one. I’d call it a pretty well designed database, normalization and structure wise, but there’s one glaring flaw: no interface. Every operation, such as adding a server, removing one, looking up information about one, etc, is done via T-SQL scripts (hand-written mostly). Fine for me, but my teammates are going to quickly get lost and just call me when they need information.
Let’s assume I’ve even saved scripts in our code library for common operations, such as looking up a server’s information by its name (not always a valid assumption, certainly). Even with that shortcut, so the team doesn’t have to write JOIN statements, consider the list of steps required to look up a server:
- locate the correct script in the repository
- Open the script in SSMS (do they have that installed?)
- Connect to the server where the management database resides (do they know where that is?)
- Look through the script and find the “find/replace” tags (I would at least use SSMS template parameters, though it’s debatable if that is easier)
- Execute the script and interpret the resulting text output
Hmm… five steps and several questions. Not very simple.
Option B – A Small Web Application With A SQL Back End
With this choice, we still get the benefits of storing the data in relational format, but with a cleaner interface (even my crappy UI design skills can manage this one). Most competent admins can understand a web interface with fields and buttons, so they should have little problem using it once trained (and of course, its use would be documented).
Consider the steps required to perform the same operation here:
- Open a web browser and browse to the web site (do they know where it is?)
- Select the “Find Server By Name” option presented on the home page.
- Enter the server name and click the “Find” button.
We’re down to three steps and only one question (do they know what the site address / URL is). Now we’re getting into the realm of simple.
One could certainly argue that there’s an even easier solution, along the lines of a folder on a searchable network drive with a set of Word documents, one per server, in standard format. I wouldn’t discount that argument, but I just really had folders full of Word documents, especially when you have to go through all of them one at a time to change some common field.
You could also argue that the process of writing a web application (and supporting it) would outweigh the simplicity gained by having the information presented in that manner. After all, can anyone else on your team understand C# code? What happens when it breaks and you’re on vacation? That may be true, but I honestly believe that if you write your code properly (and, drumroll please, simply) then the application should be pretty much self-sufficient. Good code hums along and doesn’t require babysitting.
So the next time you’re designing a process for your team, remember to keep things as simple as you can. Your teammates will thank you.