Scmbug helps write software in a disciplined way. It ties what changed in the software source code with why it changed.

This helps establish a software change management process. To track changes, plan what to work on next, and trace problems back to their root.

The most noticeable change in your workflow is that Scmbug rejects (a) commits missing a bug number in the commit log, and (b) commits against bugs you shouldn't be working on. Rejecting commits is instant. If you are changing software when you are not supposed to, you get to know it immediately.

It feels somewhat silly to use software that forbids you from writing software. But it feels less silly than not remembering what you were thinking when you first wrote the software. You make many decisions you soon forget when you are programming and at some point you can't tell how to backtrack or what to do next.

With Scmbug you can find your way back. You leave a trace back to why you wrote each line like Theseus left a thread back to the entrance of Minotaur's labyrinth. You also leave a trace towards the opposite direction. For each bug you file, Scmbug inserts commit logs in the bug comments so you know what changed in the source code to fix it.

The biggest advantage though is that it gets you to act. Since you can't commit source code unless you first file a bug, it makes you start typing to file one. And since filing bugs is easier than fixing them, it gets you to plan ahead. By the time you type the details of what you plan to do, you also work up the willpower to do it.

Besides pushing you to keep going and actually fix that big, hairy bug you just discovered, it also pulls you to start programming if you are just sitting down unmotivated and tired. A bug list is a bait to start, if only for the cheap satisfaction of crossing something off.

The biggest surprise for me is the indirect effect on how you choose what the software you are writing should do. Since you can't make changes at will, you have to justify why you are doing them. You are forced to stop and think. You stop to find a bug number for the change and soon can't help but think: why am I doing this?

Scmbug pulls you back to look at the big picture. It gets you in the habit of stopping to rethink as soon as you think of making a change. If you are tempted to go down an unpromising path, you are pulled back to the todo list that is your issue tracker, and most times, you notice soon enough. And if you are already working on something interesting you often realize your assumptions are incomplete. That leads to filing new bugs about what you just discovered, which helps make progress in your design before you resume programming.

So not only does Scmbug deter you from writing bad programs, it also helps you think through writing the good ones.

Scmbug can't help if you commit changes for separate issues against the same bug number. It can't always protect a change management process from developers aiming to subvert it. But it catches honest mistakes. If you want to write software in a disciplined way, Scmbug gets you halfway there.

Of course Scmbug can only help with thoughts circling in your mind. It'd be miraculous if it also generated ideas but unfortunately it doesn't. There are other ways to do that.

There are two parts to Scmbug. Integration glue is added as hooks in your source code version control system like CVS, SVN and Git that lets Scmbug control commits. The glue talks to a server daemon to integrate with an issue tracking system like Bugzilla, MantisBT, and RequestTracker.

The latest version 0.26.22 is available here, there is a user manual [HTML single] [HTML multiple] [PDF], and an issue-tracker.

Neither DynAMOS nor UpStare would exist without Scmbug.