…please, do let me do my work.
I might be odd. And weird and whichever adjective that comes to your mind for someone who really does not want to pay any attention to its VCS (Version Control System, or SCM source Control Manager or…).
I have been building up my anger silently and steadily for some time now, but the last straw was this otherwise nice and informative article: http://blog.plover.com/prog/git-habits.html. Go read it, there is nothing wrong with the article itself: it is nicely worded, full of examples and uncannily scary for someone who might have landed there with an entry level knowledge of source control management.
Let me articulate my rant
I am a professional software developer. I would not consider for a second calling myself such term if I did not believe or used or advocate the usage of Version Control Systems. Regardless of the size of the project one MUST use a VCS. Period. The entry level is so low that any excuse not to use it embarrasses the hell out of anyone trying.
During my professional career I have always worked with Centralized VCS: SourceSafe , Team Foundation Server and SVN. Lately, I could not resist the hype of Distributed VCSs, and have used Git for fun. I am no guru but I ain’t no virgin either.
One thing I have to say: I know for a fact that I do not use 70% of a VCS features (scientifically measured ). Another thing I have to say: I have absolutely not needed it. The only set of operations I have ever needed are (by that order and in TFS terms):
- check-out
- check-in
- add
- compare
- merge
- branch / tag
- blame
Nothing else. My workflow and the one of any of the teams and OSS projects I have taken part could not be workflow:
- work on a feature in the trunk
- check-in every now and then when nothing is broken
- merge when there is a conflict
- tag the trunk when we are ready to release
- deploy from the tag (or trunk as they are the same)
The only variation of the workflow I have “indulged” myself was to create a feature branch for features that are unlikely to be finished before the next deployment. That is it. No more. And I hope I am not alone.
Go and read the article again.
Where are my sequences of arcane commands?
Where are my rebases, my commit tweaks, my soup of hashes and my beautiful console diffs?
Am I not the most boring VCS user ever? Am I not the worst user you’ve ever met? Am I not a failure of professional developer?
I might not be, but when I read those kind of articles I kind of feel like one.
Do You really need those?
A sign of me aging is that I do not and cannot care anymore about all the details. I do not build my computers anymore from its pieces. I use third party libraries instead of writing everything I use from scratch. I do not feel like pimping my ride (not that I ever did, but you get the point).
For me, all of those are commodities. Not that important for my work/life.
I want a computer? I will buy one from a reputed brand that suits my needs and send it to repair when it breaks. A car? Has four wheels, takes me from A to B though traffic jams and has a huge maintenance bill I have to pay for someone else to care about my plugs, sparks and filters.
VCS feels exactly like that. Like my broad-band provider or my WiFi access point. They are there and should work for me whenever I ask them for, in an easy, non-intrusive way. I could get to understand the nuisances of modulation/demodulation of signals, carriers and protocols that make my emails being received. But I would not care less.
I want to connect to the internet wirelessly to send a phreaking email.
I want a place where I can go back in time to fix a bug in a version of the software that is not the one I am developing right now. Done. Check and tick. Next.
No hashes, no rebases, no cherry picking, no fast-forwards and no multi-paged printed workflows. Put the file in source control, let the cable guys worry about backing it up for when my HDD crashes and move on with my work/life.
Oh, and have good glossaries for when I need those features. Just in case I get too grumpy again.