Take me HOME
Crazed(Sanity)
Semantic Versioning in a Technical Debt
Friday, February 07, 2014 10:55 AM

So I'm still working on paying off my Technical Debt.  There's a lot to figure out, things that need to get updated to work with newer systems that make life easier... and I'm getting there.  Slowly, but surely, I'm getting there.

I've followed a fairly strict practice of versioning in the past.  I've followed the spirit of Semantic Versioning, without even realizing it, though technically only about 90% of the way there.  Most of this has to do with committing all the time, where I don't always update the version.

The problem has reared it's ugly head because I've recently changed my methodology for handling dependencies.  With Subversion, I would "simply" use externals (svn:externals) to pull in external libraries using a fairly strict versioning system.  Unfortunately (or maybe fortunately), each application was very much linked to a very specific version number. Technically each project should have been compatible only to the Major + Minor version (not all the way down to patch level).

Currently, I'm handling dependencies using Composer and Packagist (here's my public profile on Packagist).  This way of dependency handling allows me to use automatic continuous integration testing systems like Travis-CI (I can't link to my profile, since it just goes to a blank screen, so search for "crazedsanity"), so I can be even more confident that my code will work on other systems.  Oh, and I can put cool images up like this, which shows current and VALID values for build status on my projects:

CS-WebAppLibs:

CS-Content:
CS-MultiProc:
CS-PHPXML:

(I totally understand if your eyes jumped to that grid right away)

Anyway, I've made significant strides toward code test coverage.  That is to say that I've added unit testing to my systems in a more pronounced way, striving for TDD (test-driven-development), so that I can get to a point where I'm fairly confident in what ways any new changes will affect existing code.  This will also help determine whether I need to release the code as a patch, minor version, or even a major version.

Hopefully this article gives you some insight into what I'm working on.  Maybe it'll even give you some ideas, or help you, or encourage you to help me.