This month we see the 73rd T-SQL Tuesday come around – six years were completed last month (the first was in December 2009), and this is the start of year seven. It's hosted this month by Bradley Ball (@sqlballs), and he asks a question about whether our environments are naughty or nice.
Now, I'm a consultant, and deal with a variety of customers. And I don't talk about those customers. It's a thing. I don't ever want to have a tweet or post where I say "Seriously? I can't believe my customer has a setup like this!" – because my customers wouldn't want me to say those things in public, even if I've kept the names private.
Something that I see from time to time though, which really affects the 'niceness' of an environment is the paradigm that was used to solve the particular problem.
20-something years ago, when I was at university, I did a lot of subjects that haven't obviously impacted my career. Most of them were interesting and fairly useful (although I haven't really been able to apply the particular nuances of using matrices to rotate the camera in a 3D-modelling environment), but one that really stands out for me as being particularly useful was a subject on Programming Paradigms. We explored functional programming, logic programming, and a few others. I can't actually tell you the full list of paradigms we explored – I didn't even attend most of the classes (I had stuff going on which meant I ended up only scraping through – the lowest scoring semester of my whole degree). But the impact that it had on me was an appreciation that the problems we face today shouldn't necessarily be approached with the same hat that we wore yesterday.
In the database space, we use a set-based programming paradigm. We apply relational theory to a schema design, and then write queries using set-based logic. This is a useful approach, but it can go too far. When you're writing queries that you want to perform in particular ways, the focus could be something different. Perhaps you want to create a cursor, looping through each row of a resultset and doing some amount of processing on it. Iterative code, within a set-based environment. It's a different paradigm, and can turn a nice system into a naughty one, or perhaps even turn a naughty system into a nice one.
Even within the database space, we have different paradigms to apply. I see data warehouses that try to stick to a normalised design like the underlying transactional environment. I see data warehouses that demand a purely star-schema design. I see parallel systems that haven't considered distribution theory, and parallel systems which have pushed distribution theory to the nth degree. I see indexing strategies which help, and indexing strategies which don't.
Usually, this comes down to the paradigm being applied. It's generally not too hard to spot when the wrong paradigm has been used, or when a particular paradigm has been pushed too far, but it's not always easy to quantify and measure empirically. My perspective is that the people involved should feel like things make sense. When sufficiently educated people (people who ask questions rather than blindly accept what they are told) are comfortable with the design decisions, it's generally not a problem. When they find themselves trying to figure out what's going on, and why a particular approach to a query has been taken, then there's an issue. And I don't care whether that's a problem with a T-SQL query, or an MDX query, or a piece of ETL – I simply find that if there are experts in the place who wince a little when describing why something is the way it is, then that's a sign that things aren't quite right.
Now, I'll happily help fight battles to get these things fixed. But as a consultant, I know there are battles worth fighting, and situations worth accepting. And I know that success can be achieved despite things which are less than ideal. But when I think about whether a particular environment is worth getting a lump of coal or a nice elf-created gift, then I often look at the paradigm that was used when the system was designed. Then at least, things will make more sense.
I hope you all have had a terrific 2015. Why not decide to write a few T-SQL Tuesday posts yourself in 2016?