DEV Community

Cover image for Changelogs Should Be Automated, Not Remembered
Francesco Sardone
Francesco Sardone

Posted on

Changelogs Should Be Automated, Not Remembered

Changelogs are one of those engineering practices that look simple until you are actually preparing a release.

In theory, a changelog is just a list of what changed. In practice, it often becomes a last-minute reconstruction exercise. Someone has to scan commits, read pull requests, group changes, rewrite messages, identify breaking changes, and turn weeks of development into something users can actually understand.

So the real question is not only:

“Do we have a changelog?”

It is also:

“Can we trust the changelog to accurately explain the release?”

That distinction matters because a changelog should not depend on memory. It should be produced from the same source of truth that already records how the project changed: the Git history.

That is why tools like git-cliff are useful. git-cliff generates changelogs from Git history, supports Conventional Commits, allows custom parsing, and gives teams control over the final output through templates and configuration.

The important idea is not just automation. The important idea is turning release communication into part of the development system.

The Problem With Manual Changelogs

Manual changelogs fail in quiet ways. They are not always completely wrong, but they often become inconsistent.

One release has detailed notes. Another has vague bullets. One maintainer groups changes by feature area. Another groups them by pull request. Some breaking changes are clearly explained, while others are hidden inside generic “Changed” sections.

That inconsistency matters because users read changelogs to make decisions. They want to know whether they can upgrade safely, whether a bug was fixed, whether an API changed, or whether a release affects the part of the system they depend on.

If the changelog is unreliable, users stop trusting it. Then they fall back to Git logs, merged pull requests, issues, or release discussions. That is a worse experience for everyone.

The problem is not that maintainers do not care. The problem is that manual changelog writing asks people to do repetitive, error-prone work at the most compressed point in the release process.

That is exactly the kind of work that should be automated.

Git History Is Release Data

A Git history is usually treated as an implementation log, but with the right discipline it can also become release data.

A commit like fix(parser): handle empty commit messages contains structure. It tells the system that this is a fix, that it affects the parser, and that it should probably appear under a bug-fix section in the changelog.

A commit like fix stuff does not give the same signal. Someone has to recover the meaning later.

This is where structured commits become useful. Conventional Commits are not just a naming preference. They create a contract between developers and automation. A feat commit can become a feature entry. A fix commit can become a bug-fix entry. A breaking-change marker can become a release warning.

The more release intent you encode when the change is made, the less you have to reconstruct when the release is published.

Where git-cliff Fits

git-cliff sits exactly in this space. It reads the Git history and turns it into a structured changelog.

The useful part is that it does not require every project to look the same. It can work with Conventional Commits, but it also supports custom parsers and templates. That matters because real repositories are messy. They have old commits, squash merges, mixed styles, different contributors, backports, and project-specific conventions.

A good changelog tool should not force every team into one rigid format. It should let the team define the release policy once and then apply it consistently.

That is the value of git-cliff: Git remains the source of truth, configuration defines how changes are interpreted, and the changelog becomes a repeatable output of the release process.

Automation Without Losing Judgment

Automating changelogs does not mean removing human judgment.

A generated changelog can still need editing. Some features deserve better wording. Some breaking changes need migration notes. Some security fixes need careful handling. Some releases need a human-written summary at the top.

But that is the right role for humans.

Maintainers should review, refine, and approve release notes. They should not have to manually rediscover every change from scratch.

The goal is not to replace communication with automation. The goal is to remove the boring reconstruction work so maintainers can focus on the parts that actually require judgment.

That is a better division of labor. Tools should collect, group, and format the raw change data. Humans should make sure the final message is clear.

Why This Matters

Release notes are not just documentation. They are part of the interface between a project and its users.

For libraries, SDKs, CLI tools, infrastructure projects, and internal platforms, a changelog tells people how much risk a release carries. It helps users decide whether to upgrade now, test first, wait, or prepare for migration work.

When changelogs are manual, the process depends too much on attention and memory. When changelogs are automated, the process becomes easier to repeat, easier to review, and easier to improve.

That is the real benefit. If the generated changelog is wrong, you can improve the commit convention, parser, or template. The solution becomes systemic instead of personal.

Instead of saying “we need to be more careful next release,” the team can improve the release pipeline.

Conclusion

A changelog should not be a last-minute writing task. It should be a structured output of how the team already works.

git-cliff is useful because it treats Git history as release data. It helps turn commits into changelog entries, applies consistent rules, and gives teams control over the final format.

The important shift is this:

Stop thinking of changelogs as something you write after the release. Start thinking of them as something your development process produces.

Once you do that, release notes become less dependent on memory, less dependent on manual cleanup, and more aligned with how engineering teams should work: with systems, not rituals.

Repo: https://github.com/orhun/git-cliff

If you like to discover more, I share these technical posts every week so be sure to hit follow.

Top comments (0)