views:

617

answers:

12

I recently joined the IT department of a big insurance company. Although the department's title is "IT", a lot of code gets written here; Java, JSP, JavaScript, COBOL and even some C++ from what I've heard. All the programs that allow insurers, brokers and the rest of the tie-wearing, white-collar workers to issue new contracts and deal with clients runs on the code produced by this department. I've been told that the department is pretty good by the parent company's standards and that we've even received an internal award or two. We're 17 people in the department, split in smaller groups of 2 or 3. As you might've guessed from the COBOL part further up, the average age is over 40 years (as a point of reference I'm 29 yo).

Right now, there is no version control system in place (there exists a general backup scheme though). When needed, files are passed around through shared folders. Usually there's one person in every group responsible for copying the "final" version of the files back to the production server. I find this absurd and even a bit dangerous.

How may I try to convince management that we should implement a VCS scheme in our department? I've never deployed a VCS myself but every other place I've worked at had one. I think I'll hit a "we've been OK until now, why bother" wall from the first step, coupled with the age of most of my co-workers that will feel this step is an unnecessary hurdle.

I know the basic advantages of VCS (traceability, granular backups, accountability etc). I'm looking to back my case with realistic cases and examples of real added value over the implementation costs, not just a "but-but-but, we must have a VCS you fools!" :-)

+27  A: 

You don't necessarily need their permission.

Install svn on your machine, start using it, and then start convincing your fellow team members to use it too.

Then watch and see what happens.

Edits

  • The basic idea of this is that it's easier to show than to tell.
  • It's a great idea to support your ideas with a working implementation/solution.
  • Of course, if you succeed, and they want the system used department/company wide, you must be prepared to support the transition, know how the software is to be installed and used.
  • Going ahead and using something accepted in the industry is faster than having discussions on what system should be used.
  • There is a good change that this will get you noticed. You may also get your peers respect and support.

As suggested, the same approach can be made on other areas:

.. any item that will visibly add quality to your work, but doesn't (yet) disrupt existing methodologies and practices.

Mercer Traieste
Same goes for bug tracking software.
Paul Alexander
+1 But in many large organisations developer machines are locked down by IT Security, so this is not an option for those environments.
anon
Preaching by showing sounds like the best approach and the least disruptive from my side, as a newcomer in the team.
Antonis Lamnatos
Hope that everything will turn out ok.
Mercer Traieste
+1  A: 

I would point out the hazards of not having one - lost code, developers over writing each other changes, ability to rollback problems, etc.

Also since Subversion and some others are free, point out there is no real cost to purchase, jsut the time to implement.

The biggest issue you will have as the new guy is that you will be seen as rockign the boat, if they had no issues to date they will be hard to convince. Perhaps start using it locally jsut for yourself and maybe they will like what they see and start to adopt it.

I would try small steps, maybe ask the others if they ever used one, point out the benefits, when an issue arises that a system would have prevented or aided in point it out delicately.

schooner
+2  A: 

As Joel points out on one of his articles, start using your own one man version control system and market its benefit on every opportunity you get. Show them the benefits of traceability, granular backups etc from your single instance. People will start realizing its benefits irrespective of their age.

msvcyc
This is the article you're referring to: Getting Things Done When You're Only a Grunt
NomeN
A: 

Remember, there are plenty of version control systems that are absolutely free. And the amount of time spent installing and maintaining a version control system should be somewhere near 0 (they shouldn't require any maintenance). There isn't even a space penalty for most systems, as they can compress things internally.

You have listed some advantages, and there are others. But more importantly, I can't think of a single disadvantage.

Adam Batkin
You're not very creative then. VCS-hating bears are now more likely to attack. ... Also, it adds another step into the employee's process, and it's a bunch of new terminology and commands that they have to learn. Considering they're mostly over 40, that could be a big disadvantage!
Ryan Fox
Didn't it happen to them that somebody stomped over their changes? Don't they have to describe what they did? Working with well deployed (and integrated) VCS is not much work than pressing 'Commit' in addition to 'Save', and describing the change (which they probably need anyway).
Jakub Narębski
+11  A: 

Joel Spolsky has an excellent article: Getting Things Done When You're Only a Grunt

Quote

Nobody on your team wants to use source control? Create your own CVS repository, on your own hard drive if necessary. Even without cooperation, you can check your code in independently from everybody else's. Then when they have problems that source control can solve (someone accidentally types rm * ~ instead of rm *~), they'll come to you for help. Eventually, people will realize that they can have their own checkouts, too.

Kobi
+5  A: 

Management? I will put bold the expressions and words you should use:

Your should display some examples how a VCS will prevent losing money to the company if some error/bugs or disaster happens. It will be faster to solve all problems, so maintaning the systens won't be so lazy and people become more productive.

You should also mention that implementing a VCS has no costs.

VCS will also give advantages for backup all the existing code. So, all the code will be safe.

Ricardo
Good point. Also try 'value added', 'quality improvement' etc. Basically, every keyword used in *Buzzword Bingo* is a good cadidate.
Treb
VCS does too have cost:1) Licensing the software2) Paying the person in charge of maintaining the repository3) Training your users on how to use the new system
Ryan Fox
@Ryan Fox - 1.) Most popular VCS are open source (SVN,CVS,Git,etc.) so no need to license. 2.) In this case (and in most I've experienced) the person maintaining the repository will probably be an existing developer/system administrator/manager - especially just starting out there's no need to hire someone just to manage the repository. (Yes, you have to pay for the time that person is working with VCS, but you'd be paying them to work with the backup anyway) 3.) This is the only one that is a cost, but should be minor and offset by benefits gained from VCS vs. file backups.
Nate
+1 for suggesting the effective wording of my approach :-)
Antonis Lamnatos
Phrase it in terms that businesses are geared to understand: money. What's more expensive: losing weeks/months of work or licensing and upkeep costs? Good suggestion to change the language when speaking to management.
s1n
A: 

Look for another job.

Seriously.

There are way better jobs out there that don't require you to teach the existing staff.
Ones where you could go into work and just, y'know, work.

Also, keep in mind that 30 isn't far off. That's the age at which most people
stop suffering fools gladly.

Just a heads up.

EDIT

It's been suggested that quitting a bad job is for quitters.

Maybe so, and down-vote if you like, but keep in mind that you're supposed to
put your employer to the Joel test before you accept the job, not after.

Rhythmic Fistman
That will not help him to convince the management...
Treb
Just trying to save the guy some time.
Rhythmic Fistman
If you do it properly you can get great satisfaction from teaching existing staff. It's a great feeling to leave a job knowing you've set up their development team to be hugely more productive than when you arrived.
Russell Troywest
Or you could draw satisfaction from working with people who are already competent. Depends on your point of view.
Rhythmic Fistman
You can't just leave a job over a small thing you don't like, and you certainly can't declare them all incompetent. Every company (besides maybe your own company) will have something that should be improved, or that seams strange to a new developer (e.g. here all db tables start with `t_`. stupid, isn't it?). Quitting is hardly a good solution. And what about the question "Why did you quit your last job after two weeks?" - try to find an answer that doesn't display you as a self-declared know-it-all who'd quit at the first thing they don't like...
Kobi
-1 because as Kobi said, just because there's this thing that I don't like (among a much bigger list of things that I do like and that's why I joined) does not mean that I should quit. This "solution" is even more absurd than the lack of a VCS in the first place.
Antonis Lamnatos
@kobi, good point. I would not start the job if they did not use a VCS. Antonis should've put the employer to the Joel test. @Antonis, +1 for enthusiasm, don't lose that! I've tried to fix up a clown shop before. Version control and a bug tracker stuck, less noise, fewer distractions and performant PCs did not. Wasted time. Of course yours may not be a clown shop, YMMV.
Rhythmic Fistman
Plus if you get them to start using version control and it turns out to be a big hit ... You've already got a really big foot in the door for moving on up
s_hewitt
Good point. I was labouring under the misapprehension that OP wanted to continue being a programmer, rather than getting into management.
Rhythmic Fistman
+2  A: 

I agree with the answer that are referring to the Joel Guerrilla article.

  1. Install/Use some thing with a low overhead. Hg (Mercurial) is easy in a mixed eniroment and is good because you can bail out and use something else in an easy way.
  2. You must share your things without making a fuzz about it. When someone needs your code, export it and use the "standard" corporate method (shared folder or whatever)
  3. When you get code, always import it into a repos, if you think it is a new commit of a repos you already have, try to get it into that one.
  4. Sooner or later you will have a code for several project and hopefully some commits on some repos. Then you can expose those with the mercurials webserver interface (hg serve -p XXXX).
  5. When the times comes when someone don't know why something suddenly don't works as it should be and is trying to figure out why becase it was working last monday ... and you know that you have that code in a repos step up and ask if you can be of any assistance. Get the falty code, commit it into your repos and expose with hg serve. Look at it in the browser.

My point is that you must prove with real cases to your colleges that this stuff has a value. If the haven't figured it out by themselves after some many years you have a mountain to climb but it can be done. You must be patience though. It could very well take a year to convert one man (old dog). If you have any younger coworkers try to do this together, the more code you can get hold on the better.

Jonke
+1 for the positively stealthy approach
Antonis Lamnatos
A: 

I would also recommend starting with implementing VCS (Version Control System) for yourself first. I'd recommend using one of distributed VCS (Git, Mercurial, Bazaar) rather than centralized Subversion, because it would be easier to create central repository (or repositories) by cloning than moving your Subversion repository to central place. Distributed SCM can be also used in a smaller group to exchange ideas.

A few advantages of (modern) version control systems:

  • You can always revert (go back) to last working version of your code (provided that you follow some sane version control conventions, like at least tagging only tested code). With code shared via folders it might turn out that no one version works, backup copies were deleted to save space, and recovering code from backup is tedious / was never tested.

  • You can switch between working on some new feature (some experimental work), and working on urgent fix in currently deployed version (maintenace work) thanks to branches (and stash / shelve for uncommitted work).

  • If you follow good practices for version control (small and often commits, changes being about one single thing, writing good commit message describing change and whys of change) you would have much, much easier finding bugs, be it by bisecting history to find which change introduced bug, or by using version control system to look up who was responsible for given area of code (annotate / blame).

Jakub Narębski
+3  A: 

My opinion on how to go about doing this, is that you should try to convince your fellow developers first. The way I see it, there are two ways this might go about:

  1. You give the right arguments to the other developers (possibly only the head developers will suffice), they like the idea, and the suggest it to management. Management is easy to convince at that point, so everyone is happy.

  2. You give the right arguments to management, who get all excited (great!) and mandate that version control has to be installed and used by everyone. Here's the thing: If at this point the other developers are not sold to the idea already, then (a) they might be hostile to an idea that management is forcing upon them, and (b) they might not like you for being the cause of it all.

So what are good arguments to convince fellow developers? As someone who uses subversion (which is the one I recommend in this case, by the way) even for his solo projects, here's a few advantages I can think of:

  1. Using version control forces people to think of code modification in terms of a series of small, self-contained changes. This is an extremely beneficial way of working: where otherwise people would be inclined to make lots of changes all over the place, leaving the code in a mess, version control kinda forces them to change the code in bite-size, easy-to-swallow bits, keeping the code compiling at all times, easing the cost of integration with other modules, etc.

  2. Version control makes it very easy to see what has changed in the code each time. This might sound trivial, but when you start modifying code it's easy to lose track after a while. But with VC it's all an "svn diff" (or equivalent) away, always.

  3. Version control makes it very easy to see who has changed the code each time. So that, for example, when something breaks, you know who to blame. (It's not an accident that the subversion command which shows who last changed each line is called "svn blame".)

  4. Version control makes it very easy to see why a piece of code was changed. Commit messages, if used properly, essentially provide continual documentation of the ongoing development process. Documentation that otherwise wouldn't be written.

  5. Version control makes it very easy to track down regressions and see where they appeared. In the easy case, you just track down commit messages and spot the culprit. In the average case, you have to consult the diffs too. In the hard case, you have to do regression testing of previous versions using what amounts to binary search, which is still better than the no-VC case, where you simply have no clue.

This list is not exhaustive, of course, but these are the main benefits that come to mind right now. Obviously, as others have already mentioned, it's easier to show all this to your colleagues than to describe it to them, and setting it up for yourself first (but importing everyone's code, mind) sounds like a great idea.

+1 For the thorough analysis and approach on the advantages
Antonis Lamnatos
+1  A: 

From a purely business perspective, and depending on the size and nature of your parent company an IT auditor may consider your lack of a VCS a finding (i.e. something that needs fixing). I believe you could improve your pitch to management by telling them that any CVS is a great way of showing that your department respects its resources and works in a structured way and efficient way, something auditors always like to see.

I don't know how your corporate culture works but I'd be careful about rolling out your own CVS since if it does see use it suddenly becomes your responsibility when things go wrong, even if you were not at fault. To cover your ass (and keep the aforementioned auditors even happier) I'd roll the system out with a full set of written procedures for its use and maintenance.

Finally while I myself am a big fan of initiative at any level of the enterprise don't expect people to remember to say thanks when they figure out how great it is. Some might, but for the most part you're doing this to make your own life easier and for your own karma.

Antonis Lamnatos
A: 

Start talking to the other developers about problems thay have had in the past as a way to get to know the system and how it evolved (sneaky, sneaky, sneaky, but hey this information will probably come in handy at some poitn even aside from the version control issue). You are bound to sooner or later find some wonderful examples of things that have already happened which would have been far less painful if you had version control. Use these examples when you present the idea to management.

I agree with the idea that you can probably start using your own version control and eventually will be able to help thm out of a fix, but I'd bet money they have been in some of those fixes already and if they already remember how painful the problme was before, it will help sell the new idea.

HLGEM