It sure seems like there’s a lot of miscommunication between developers and database specialists. In fact, the communication can become so poor that outright hostility between the groups is common. At the end of the day we are all working towards a common goal, to add value to whatever organization we are working for. It’s a shame that we all lose sight of this commonality and create such a false dichotomy between the groups. I think there are some ways that we, as database specialists, can use to attempt to cross that gap.
Prior to being suborned to the dark side, I was a developer. I had a little over 10 years experience working in VB, Java & C#. I remember, distinctly, cursing our database team for being so problematic about how they did things. They slowed me down. They got in the way. When I had problems they were slow to respond, unless the problems were on production. I know I even instigated a few fights with them in an attempt to get them to move the way I wanted (hard to believe, I know). Then came the day when I shifted over to all database work.
Suddenly, I’m responsible for making sure the production system stays online and that the data is readily available to the business. Now I’m slowing down development, because I want a chance to review their design and validate their code to ensure it’ll work well and not affect production. Now I’m acting as a gatekeeper to prevent unauthorized access to the systems or at least keep people from making any of the 10,001 simple errors that could impact production. Now when a developer wants something fixed in dev, I’m the guy telling them they have to wait because something in production is wonky. And yeah, I’ve instigated fights from this side as I tried to get devs to understand that simply delivering code is not enough and that data persistence is there for a reason (again, shocking I’m sure).
Remember, both of these groups are more right than wrong, and both are working towards that common goal, value for the business. But they really don’t get along. What’s more, what they work on and how they work with it is frequently at odds. Ever heard of the object-relational impedance mismatch? How about the concept that you don’t have a database, but a persistence layer? What about managing data integrity within the application (one of my abiding favorites)? Never heard of those terms or concepts? Then you’re probably a database specialist and you’re probably not talking to your developers. If they haven’t already, they’ll soon be introducing an Object Relational Mapping tool to your enterprise. Best of luck.
A lot of these communication issues probably can’t be solved, but I know of one place where most database specialists are not communicating well with their dev teams, and database guys, it’s your fault. Source Control. Do you think of the structures and procedures within your database as code? You should, because, to a large degree, it is. The Data Definition Language (DDL) calls that make up your tables, views and procedures are code. That code needs to be checked into a source control management system. There, the individual objects can be versioned and managed. There you can create labeled releases of your code. There you can branch your code to create alternate development or support streams that contain variations of your database. There you can merge changes from multiple users and branches into a single main source for deployment to production. There you can keep your database directly in sync with application developers code.
Did you catch that last one? You can become more tightly coupled with your development team. Best of all, you can do this using their tools and their language. This is the communication problem I want you, the database professional to solve. Very few of us database types are using source control these days. This, despite the fact that there are fantastic tools and methods under development from different vendors that directly address the issue of getting and keeping database code within a source control system.
Years ago, when I first made the jump to databases, I was appalled that I couldn’t keep my code in source control. Then, as I worked more and more with databases, despite the problems, I abandoned the idea of managing the code in source because, frankly, it was way too hard. But several years ago new tools appeared on the market to make it possible (if still somewhat painful) to get the database into source control. I’ve been working that way for years now. It has completely eliminated one of the many problems I used to have with developers. They now know that my code is stored with theirs. That my versions are their versions. That their labels are my labels. That we branch the code together. It’s taken completely for granted, and we share a common language about change and deployment.
This has not solved every problem or conflict with database teams I’ve worked with. It has eliminated a source of friction. It has increased communication. It’s something that I could do, and you can do, to get a little closer to your development team. Not to mention the fact that you will now have your databases in a known state, all the time, that you’ll be deploying from a single location, that you can manage access to your code, and all the other things that having your databases in source control will bring.
For more details on the concept of putting your database in source control, and working better within teams in general, I’d recommend reading the SQL Server Team-based Development book. It’s a free download.
Addendum (3/27/2011): If you got this link through an email, could you post a comment below as to which distribution list it’s from? Thanks.
[…] @GFritchey posts Communication Posted on March 22, 2011 by sqlmashup https://www.scarydba.com/2011/03/21/communication/ […]
Nice article, I have similar expertise as you and my new role as main DBA is just like you describe it.
Nice post! It really is a fundamental paradigm shift, between a dev and a DBA. Finding middle ground is so tough, because both sides are often both stubborn and passionate
Interesting, but the database is not just its definition – it is also the data in it.
If you use source conrtol you also have to backup the system data in the database (i.e. the system tables whose contents change only when a new version of the application comes out).
I think a better way to do it is to backup the database and empty the tables which contain data entered by the Users of the application which accesses the databse.
You can create such a backup whenever you want – it will be small because User data is not present.
You can then use tools to compare one version of the database to another and instantly see which Tables, Views, Stored Procs etc. have changed and how.
This is how I do it anyway.
Thanks Jorge.
I agree Josh. Each side is passionate, which can make trivial problems seem worse than they are.
CGC, that is an approach, but it’s one that’s going to require a lot of set up and maintenance. Deploying straight from source control is something that is very well established in the development community. I’m just trying to suggest that DBAs might want to leverage all that knowledge for their own deploymnets. It really does make a lot of sense if you do it.
If you are still interested to know, I got the link through Brad McGehee’s blog e-mail.
Thank you Alex, but it wasn’t that one. I’ve made Brad’s list before and it didn’t generate 3000 hits.
[…] ReadyRoll, it would be great to help mend the growing divide between Developers (the people creating and changing the databases, trying to keep the business […]
[…] I later learned was quite common among AppDevs (Grant Frichey summed up this quandary well in his article on DBA/Developer communication). But in time I came to appreciate the subtleties of working with relational databases and got to […]
Interesting read. Thanks for sharing.