synergy is when different entities cooperate advantageously for a final outcome. Simply defined, it means that the effect of the whole is greater than the sum of the effects of the individual parts.

In software, that means that multiple programs or tools work together to accomplish something that wouldn't have been possible if each program had been used individually.

My experience with synergy

For the past few days, I've been working on tools to simplify our release process and help us trouble shoot eventual issues. First, I implemented a system diagnostics page: a page giving us information about the current state of the application. One important thing it gives us is the version of every assembly used by our application. This brings me to the second tool: a version updater. This tool automatically updates the version number after a commit in subversion. So whenever we release some code, it has its own unique version number.

The two used together give us an always up-to-date diagnostics page that we can really use. Without the automatic version updater, the diagnostics page would always tell us the same versions are loaded even though the assemblies would be different. And without the diagnostics page, the version number wouldn't have been as useful. Now that we have both, they're immensely useful.

On top of those two, we also have an automatic build system. We really believe in the second point of The Joel Test:

2. Can you make a build in one step?

We can in zero steps (simply committing in the right branch which is part of our normal process anyway) and we even have a release package built automatically ready to be sent to the client.

Synergy is everywhere

You may not be aware, but software synergy is omnipresent. Every day you use a multitude of applications that you use for one goal: creating software. You use an OS, one or more browsers, an IDE, a versioning system, a database manager, a text editor, etc. Without one or the other, making software would be much more difficult and a lot more boring.