Deep Learning and Craftsmanship Matter

There’s concern about the future of AI and how it may affect jobs and employment for the masses. I see plenty of people on both sides of the issue. Some are sure AI technologies won’t replace people; some are concerned their jobs will be eliminated, and some are hoping that we will eliminate some jobs and create many more.

Sometimes that’s the same person.

A GenAI can replicate a human, or maybe more accurately, mimic one. That might work well enough for some people to trust the technology more than humans. Or maybe it works well enough, enough of the time, and lots of us are OK with well-enough. After all, I think a lot of us already work with “well-enough” or “good-enough” code on a daily basis.

However, the GenAI is based on what other humans have already done. It’s “trained” on lots of existing ideas, decisions, codebases, etc. It can recall and use those quicker, and often as well as many humans. It might be a light craftsman, but it can’t be a great one.

Humans will be able to deeply understand problems and create better craftsmanship for many systems. Across time, an AI can learn from these craftsman and repeat their work in other systems, but an AI will often struggle to understand the entire context of whether we would apply that solution or a slightly different one this time.

That’s the human advantage. Deep learning and craftsmanship will differentiate us from the AIs because we can contextualize things better than an AI. Or really, we can internalize the context better than another human can express it to the AI. That will be the difficult part of working with AI LLMs, agents, and whatever comes next: explaining what is really needed in a new situation.

Communication is hard. Because many humans aren’t good at communicating, they won’t be able to use an AI to replace other humans. They’ll struggle with the results, and they will need to hire a craftsman to help. However, that also implies that more of us need to become craftsmen, not only for the advantage it gives us over AI, but because those skills will help us better judge AI output, as well as express what we want to see the AI do.

There will be lots of work in the future, even with AI, but I also believe that the jobs that are desired, that will pay better, will go to those who learn to use AI tech and who can judge when the quality of the work is appropriate for the situation.

Steve Jones

Listen to the podcast at Libsyn, Spotify, or iTunes.

Note, podcasts are only available for a limited time online.

Posted in Editorial | Tagged , , | Leave a comment

Using AI for Git Hooks

Recently I had someone internally ask about whether SQL Source Control supports Git Hooks. Since it was after UK work hours, I decided to run a quick test. One problem, I haven’t setup a Git hook in a few years.

Could AI help me? See what I did.

This is part of a series of experiments with AI systems.

Asking for Help

Claude is my go-to AI. I don’t have a good reason why I don’t lean on Copilot or ChatGPT or anything else, but I’ve become more comfortable with how Claude works and responds to me. When I have something that doesn’t have any PII or other sensitive requests, I tend to start with the free Claude site.

Here was my prompt: what is an example of a git precommit hook

Simple, easy, no punctuation or big setup. I just needed something. I got some code:

2026-01_0150

and an explanation. Here’s the’s the text of the explanation (italics from me):

This hook:

  1. Prevents commits with console.log statements

  2. Catches trailing whitespace

  3. Runs your linter

To set it up, save this as .git/hooks/pre-commit and make it executable with chmod +x .git/hooks/pre-commit.

If the hook exits with a non-zero status (like exit 1), the commit is aborted. You can bypass hooks temporarily with git commit --no-verify if needed.

Many teams use tools like Husky to manage hooks in a project, making them easier to share across the team since .git/hooks isn’t version-controlled by default.

This shows some bash, which I don’t think runs natively in Windows. That makes sense as a lot of coders are likely using Linux/MacOS for complex stuff and the default training for Claude likely assumes that. I asked about Windows and got two options: Node.js and Husky. Since I don’t like to install things, I went with Node. Here’s the next question I asked.

2026-01_0151

I didn’t want to lint or worry about whitespace, since I’m depending on SQL Source Control to create the files, so I asked a different question: can you create a pre-commit hook using node (for Windows) that checks for a commit message between 1 and 50 characters?

The response is good. I didn’t want this, and reading this, I realize Claude is right. I wasn’t quite thinking through the process here. I also didn’t want the code for a commit-msg hook, so I ignored the code.

2026-01_0152

I could see that I was getting generic hooks, mostly for other code, so I rephrased a prompt: I want a sample pre-commit hook for .sql files to test something, what is a good example

The response was a practical hook for SQL files. The code had a couple of messages printing our errors when I failed things, and the code here isn’t important, but here was the explanation. The bottom of the code is shown, and then the list of things that are checked.

2026-01_0153

At the top there is a comment about the hook, and since I’d done this a few years ago, I thought I know what to do, but I asked. I mean, why not ask the AI for more help? I liked that it noted not only do I need to add this to my .git folder, but I need to track this if I want to share it. That’s important. I do want other team member, or in this case, me on another machine, to have this hook.

2026-01_0154

Testing the Hook

I then went to SQL Source Control and made a change. In this case, I added a file that I knew would fail the check. Here’s my code:

ALTER PROCEDURE dbo.GetAllCustomers
AS
SELECT * FROM dbo.customer

I could see this code change in the SQL Source Control GUI, but no error. I thought this might be staged, and I somewhat assumed the hook would fire on staging, so I asked.

My new prompt: when does this hook fire?

The response let me know that I had to commit this to get the hook to fire. It runs on the commit command, as before the commit succeeds. That’s good to know. Thanks, Claude, for helping me learn something.

2026-01_0157

In checking from the CLI, I realized that SQL Source Control at this point hasn’t staged the file. It also hasn’t written the file, so there’s nothing to stage. One of the downsides (one fo the few) of SQL Source Control is very limited git configuration. The write, stage, and commit happen at once.

I tested this and sure enough, I got a failure when I tried to commit. The hook fired and saw my SELECT *, and my lack of a semi-colon.

2026-01_0146

I tested this further by fixing these elements individually, and I could correct the SELECT *, but I couldn’t fix the semi-colon. I realized with testing that when SQL Source Control writes the file, it always includes a “GO” at the end. So my hook doesn’t work.

Asking for Modification

I decided to see if Claude would fix this, as I wasn’t sure what to change myself. I’m not a Node nor RegEx person, and I’d be googling a bunch to figure this out (or find someone else’s code). Instead I tried this: can you adjust this hook to ignore the missing semi-colon if the file ends with a GO, or check for a semi-colon before the GO

The response was interesting. The explanation said this:

Now it handles both cases:

  • File ends with GO: Checks that the line before GO has a semicolon

  • File doesn’t end with GO: Checks that the last line has a semicolon

The relevant code is here:

2026-01_0158

I can read this and it makes some sense, but I would have struggled a bit to get this done in a reasonable time. Instead, it was seconds for Claude to produce this.

When I re-tested, this passed the SQL Source Control GUI and I had a working git hook looking for a couple of simple silly mistakes I might code.

Summary

This is an area that I have a little experience, but not a lot. I’m a junior dev when it comes to Git, and Claude is definitely more skilled. However, I have to know what to ask to get a result and I thought the answers and explanations were good in helping me setup this test in a few minutes rather than the better part of an hour (or longer) if I were searching and trying to assemble code.

This is one of those areas where AI was very useful to me. It built a fairly trivial coding item I needed, it helped explain things when I had questions, and it was helpful in adjusting code quickly when I realized I needed something else.

Imagine asking a colleague this, realizing you’d asked the wrong thing, and then asking them again for new code. How slow, and annoying, would this be for both of you? AI is a game changer here, for things that are too simple to work with a colleague on, yet complex enough that you’d waste a decent chunk of time googling.

That time savings went into me testing the code and testing SQL Source Control. I verified that SQL Source Control can work with git hooks in minutes.

Posted in Blog | Tagged , , , , | Leave a comment

Republish: Chopping Off Data

It’s our first big volleyball tournament of the season. Today, Saturday, and Sunday I’ll be downtown in Denver coaching a team of 13 year olds.

My break is your break (from me). Re-read Chopping Off Data today.

Posted in Editorial | Tagged | Leave a comment

Flyway Tips: AI Helps with Commit Messages

At Redgate, we’re experimenting with how AI can help developers and DBAs become better at their jobs. Everyone is asking for AI, as well as the ability to turn AI off. We’re working hard to accommodate both requests as we look for ways to leverage AI.

One of the areas we’ve started to add some AI is in Flyway Desktop (FWD), with a few features designed to help reduce the cognitive load and save time as they work with databases.

I wrote about summaries of migrations scripts and migration script naming recently. This post looks at another of those changes, which is the generation of a commit message..

I’ve been working with Flyway and Flyway Desktop for work more and more as we transition from older SSMS plugins to the standalone tool. This series looks at some tips I’ve gotten along the way.

Summarizing My Changes

Commit messages are hard. There are numerous posts on the art of writing one, as well as no shortage of examples showing poorly structured messages. As I look through my own messages in the SQL Saturday repo, I’m somewhat surprised at times at ow well I’ve described something, or how poorly. I’ve certainly had the “fix” messages creep into my work.

When we start making database changes, we often have a number of things we might touch. A new column could necessitate view and stored proc changes. One view might impact another, or a function. A piece of work might include alterations of a few tables, and fixes that might not be obvious need a bit of a description in the commit message.

If nothing else, we need to ensure we’re linking commits to planned work on Azure DevOps boards, in Jira, or wherever a project manager might be assigning tasks.

Flyway has added an AI feature to help us summarize our changes. It’s in preview as of Jan 12, 2026, and is designed to help ensure we get a better commit message than “fixed.”

Generating Commit Messages

When I go to the VCS tab in Flyway Desktop (FWD), I see all my changes listed. In this case, I’ve been demoing and testing a lot of things that I haven’t committed. Bad practice, and I’m a little upset with myself for not keeping my repo clean.

2026-01_0186

Notice the little sparkle below the Commit button? This is where the AI help lives. If I select a few files, in a few seconds I’ll get a message generated for me. This is a decent summary, at just over 50 characters.

2026-01_0187

If I don’t like this and want to edit it I can. If I do that, the AI won’t overwrite this. I’ll change the wording and select another file. Notice that the message remains the same.

2026-01_0188

If I want a new message, I can click the AI sparkle and it will regenerate this. I’ll show this in the video below.

2026-01_0189

If I select all the files, the AI summary isn’t great, but then again, I don’t know how I’d summarize all these changes. I might not do any better.

2026-01_0190

This is a small thing, but I often find that I struggle to come up with a meaningful message at times. Sometimes I do a good job and add something relevant with a work item number. Sometimes I want to just type “new table” or “fixed bug”.

This reduces some of the creativity burden when I’m working through database changes.

Enabling AI Features in Flyway

This is a preview feature as of Jan 5, 2026 as I write this. To get this in your FWD, your organization needs to have enabled AI features in your portal. I’m just a member, but whoever is an admin for your Redgate products would find it here.

2026-01_0173_thumb[1]_thumb

In FWD, you need to look at the Preview Features item under the config menu.

2026-01_0171_thumb_thumb

In this area, you can enable or disable features as needed. I see these marked as Red-gate only, but I think they are supposed to be released to some customers by this time. It’s likely I need to upgrade my FWD, which I’ll do when I have time.

2026-01_0172_thumb[1]_thumb

Once you do this, you should start seeing some AI stuff with the purple/pink shaded area and the sparkle icon that we’re all seeing everywhere.

2026-01_0174_thumb_thumb

Summary

Getting meaningful commit messages can be hard, but it’s also a tedious thing. I find that developers often get lazy and do the minimum. That AI might not be much better, but it does reduce the need for a user to think of a message and gives them a starting point from which to work.

To me, this is one of the better uses of AI, handling a common, but tedious task. Now to go clean up my repo and take advantage of this with a bunch of smaller commits.

This feature is documented, but we are likely to enhance and change it a bit, so all feedback is welcome. If your organization doesn’t want you using AI, and you could share some schema from a migration script, I’d be happy to test it for you and see what summary is produced and send it back to you. Ping me on X/LinkedIn/BlueSky if you want.

Flyway is an incredible way of deploying changes from one database to another, and now includes both migration-based and state-based deployments. You get the flexibility you need to control database changes in your environment. If you’ve never used it, give it a try today. It works for SQL Server, Oracle, PostgreSQL and nearly 50 other platforms.

Video Walkthrough

See a video of me looking at this feature below.

Posted in Blog | Tagged , , , , | Leave a comment