I'll write bad code. I know it will happen. I'll produce a bad query, incorrect logic, or the wrong data transformation being returned.
This won't be a malicious act. It might be because of ignorance, or perhaps just a simple mistake. My code might be the result of short-sightedness or not accounting for a potential situation. I might even misinterpret poorly written specifications and place the blame on others. Maybe I'll misread the code and won't realize there's a problem.
And, for sure, this code will get deployed to production.
At some point I know this will happen, to me or someone else. And for whatever reason, I need to account for that fact in my software development process. I can't prevent mistakes, as decades of software development have proven. Despite my best efforts, code reviews, the tests implemented in QA and elsewhere, bad code is going to get deployed.
The important thing in any software development project is how you handle the mistakes. How do you move forward, and certainly, how do you apply a patch? Can you do it quick enough to minimize the impact to clients? Or must they deal with the issues, developing the workaround or missing functionality for a significant portion of time? Or will they consider abandoning your software for some other vendor?
One of the reasons I continue to advocate for a DevOps approach is that a known process can enable you to fix your mistakes in a timely manner. With a consistent approach to writing, testing, and deploying software, you can apply a patch when it is needed. Certainly the code needs to be logically fixed, but a reliable process will help ease all the overhead of getting your code to a production system.
DevOps can be implemented many ways, and if applied in name only, things won't improve. We can't say we're using DevOps, or we're coding faster, or we release every week. We need to really implement the three ways. However, if you approach your project and staff with the idea that although things are flawed, they can be improved and made better, you'll find that you can deliver those fixes for clients in an extremely timely manner with a minimum of risk.
DevOps allows us to move faster, but that's not the goal. The goal is that we improve things and have confidence that we can release when we want to, in a repeatable, reliable, less risky fashion.
The Voice of the DBA podcast features music by Everyday Jones. No relation, but I stumbled on to them and really like the music.
The best career move you can make
On the new Redgate Hub, we’ve gathered together a wealth of information to help you solve problems, share ideas and discover the latest insights. Whatever you need to know about to advance your career, the answer is probably right here. Move to the Redgate Hub
SQL Clone: Now supporting databases up to 64TB
Create copies of production databases and SQL backups in seconds and save up to 99% of disk space using SQL Clone. Redgate’s new tool removes much of the time and resource needed to create and manage database copies, allowing teams to work on local environments to develop, test and diagnose issues faster. Try it free
In this webinar, Microsoft MVP Steve Jones and Redgate’s Arneh Eskandari will show you how Redgate’s Database DevOps solution can work to improve your database development and deployment processes. You'll see a demo of the following Redgate tools - ReadyRoll, DLM Automation and DLM Dashboard - and see how they plug into GIT. There will also be plenty of time to ask Steve and Arneh questions. More »
This book shows how to deliver eye-catching Business Intelligence with Microsoft Power BI Desktop. You can now take data from virtually any source and use it to produce stunning dashboards and compelling reports that will seize your audience’s attention. Slice and dice the data with remarkable ease then add metrics and KPIs to project the insights that create your competitive advantage.
Yesterday's Question of the Day
(by Steve Jones):
I have a simple matrix of values that represent some data. The data looks like this:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 1 2 2 2 1
[3,] 1 2 5 5 1
[4,] 1 2 5 5 1
[5,] 1 1 1 1 1
I'd like to get a quick visualization of this. If I run the image(m) function, what type of image to I get?
This newsletter was sent to you because you signed up at SQLServerCentral.com.
Feel free to forward this to any colleagues that you think might be interested.
If you have received this email from a colleague, you can register to receive it here.