If you write code to SQL Server then you might be interested in this: at the end of 2017 I wrote a tSQLt tdd training course which has helped over 300 people learn both tSQLt and how to apply TDD practices to their SQL Server T-SQL development, you can join the course at https://courses.agilesql.club. The course is free if you are happy to wait 10 weeks to complete it, with 1 lesson being made available per week - if you are in more of a hurry or you would like to help support the project you can purchase the course which makes it instantly available to you.
DevOps isn’t running SQL Server in a container and pushing code to it from Jenkins
When we talk about DevOps we envision that we have the ability to check-in code, spin up a new environment, deploy, test and push that code to production and be in the pub at 4.
We know that by having the right tooling in place we can make releases more reliable and more frequent enabling us to deploy the changes that the business want when they want them rather than every x days/weeks/months/years/decades. This outcome is best for everyone, no one loses and the path to fun and profit is that, fun and profitable.
So what do we need to do, run SQL Server in containers and write and deploy our code using SSDT? Yes do it, but you don’t need to you can do DevOps and work on doing frequent releases with a standard sql server instance and manually written deploy scripts that are emailed around.
So what is DevOps if you can do it without source control?
DevOps is about enabling frequent releases - that is the core element of it and to enable frequent releases we need:
- A way to deploy code (a DBA wearing out the F5 key in SSMS is a way to deploy code)
- A way to be confident about the changes we are about to make (hint tests, lots of them)
- A way to know when there is a problem with production (monitoring and alerting)
- The ability to identify bottlenecks, work together and make improvements to the process
The last point is most important, for me it stems from kanban and the kaizen approach of identifying bottlenecks and working together to remove the bottlenecks.
If you look at your existing approach to making changes what are your bottlenecks? How can these be improved? When you deploy changes and they go wrong what stopped you finding out about those problems earlier? When you look at the different stages of a change from business analysis to troubleshooting issues reported by customers, how many of those and how much time and money could have been saved by not having that issue or by identifying it in developer tests or when it was rolled out rather than when the user complained about it.
If you truly start looking at bottlenecks in your entire release process it will more than likely lead you to an end position of a DevOps culture and practices including the tools required to do it but without the underlying kaizen approach, to continually remove bottlenecks in your processes, you will simply pay for tooling you don’t need and covering your laptop with stickers but not deliver the value that the business needs.
Which one of these are you?