views:

289

answers:

10

In our environment, there are loads of 3rd party components. Setting up the development environment is a lengthy process, and it can be difficult for a new developer. Do you think:

1 - We should make a preconfigured VM with all the setup already done, and give it to a new dev?

or

2 - Make them do it from scratch?

or

3 - Some other alternative?

I lean towards #2 myself, b/c I think that it is a good learning experience. But I don't want to waste their time. What do you think?

+2  A: 

How soon do you want them up to speed for development?

I'd personally vote for #1, and then allow him to make changes as he sees fit - new tools, etc.

If he has a baseline to go from, you'll also know if it was something he did that broke his dev box :)

warren
+1  A: 

If your hardware is the same you can use ghost or some other image server/sofware.

I think there are other methods of creating an image as well,

I have never tried working on a VM as a dev environment.

At the very least you need to document all the tools needed and provide easy access to them.

Tim
+10  A: 

Give the new developer instructions on how to set up his environment. It lets him start developing a good understanding of how the system works. If he's never exposed to the different third party components, it's much harder for him to get a good understanding of what's not working properly whenever things go bad.

Additionally, by maintaining the instructions the organization has a much better understanding of all the dependencies in both a product and a development environment.

Sometimes these dependencies include installing license keys, preparing connection strings, or other minutia that can easily get lost in just shipping a stock environment (whether a Ghost image or a VM). By explicitly setting these things up whenever there's a new hire (or new machine rollout) everyone gains.

Edit: Let me clarify (based on some other answers below) that the machine can come with the OS, Visual Studio, version control tools, database tools, etc. already installed. It's the 3rd party controls/add-ons/etc. (think COM+, GAC, etc.) that they should be installing/configuring.

BQ
+1: This works really well for getting experience folks familiar with subtle problems and getting the n00b familiar with what's REALLY going on. A premade VM hides too much.
S.Lott
+1: and if the process is on the team Wiki, have the developer update or comment with any new insight, gotchas or corrections.
Ken Gentle
A: 

Are they going to be administering the production environment(s) as well?

Do you have the resources to assist in troubleshooting configuration and compatibility issues?

Is there clear documentation on how to setup the environment?

Are the dev's salary or hourly and can the company afford to wait for the dev's to be setup?

Are you looking to augment the install documentation with new environment configurations and use the dev's as testing platforms to say, find out how the system would run on Windows when its designed on Linux, etc.

For the sake of everyone, if you have a VM ready to go, copy it for all your dev's. If you have a dev who might be a part of production, or is willing to sacrifice some time to set it up on their own, then by all means let them.

Adam
A: 

If you think it is a good learning experience then really is it a waste of time? I think this depends though on how if it is a long term contract, how soon you need them up and running, if they are going to have to configure other systems later and if you have the time to assist if they run into difficulties.

With a junior developer I would probably lean towards giving them the VM to start and having them go through setting up an environment at a later date. With a senior person I would like them to start off with a broader understanding of the system so I would have them set it up.

Our system is set-up in such a way that it is possible just to set-up a portion of the environment to start. So depending on how quickly I need the person up and running we do that option.

wonderchook
A: 

Anything that can be done to speed up the "get familiar with new work environment" is a good idea.

Of course it's great for a developer to have an intimate working knowledge of the environment he/she is using, to be able to pick his own tools, etc... but anything you can do to enable him/her to hit the ground running is a good idea.

Plus, I think being able to deliver a pre-made VM to a new developer also shows that you, as an organization, have given some thought to the "new developer" experience and are looking to make the transition easier. I think it might help make a favorable impression.

matt b
A: 

At the place I worked previously, I was given all the hardware components, a bunch of CDs / DVDs and told, "Your first test is to put the machine together and get the basics up and running. We'll give you any help you need." This worked out pretty well, it was a chance for them to gauge the level I was at, as well as a chance to see that they could help when needed. It made communication easier, and it ended up with a good working relationship with my colleagues. If this is what you are after, maybe give the new dev some basic instructions and then give them the responsibility to set the machine up for themselves. It will create a sense of pride and ownership, and hopefully they might work to impress you

Furis
A: 

If your company is large and has a contract with a big computer supplier, e.g. Dell or HP, then I think I'd suggest a hybrid of 1 and 2 where there is a precofigured machine that is rather basic in its setup which a developer then takes and adds various components on top, e.g. the developer installs the IDE, source control client, and other tools that may be common for them to use. This lets them know which things are to be used as well as have an idea of how long it may take to rebuild should that eventually come.

The preconfigured VM does have a certain maintenance penalty to it from my view. To keep the image up to date, e.g. keeping the latest patches from Microsoft, may not be worth it if the developer can spend their first day installing some things while also either reading some documentation or seeing what the status is on some projects.

If your company is small and there aren't that many things to install, then it can be a good initial exercise to see the developer go through all the basics of setting up their machine.

JB King
A: 

Please don't make a developer run in a VM. When doing the compile/test/debug cycle you really want them to have every inch of performance they can get.

You can, however, use Norton Ghost to prepare a baseline image of Windows+Dev Tools that can be written to the new developers disk. From here he can go nuts with his own favorite tools (vi, notepad++, emacs, ed).

In my oppinion this approach mixes best of both worlds. Developer can start working immediatly (1-2 hours tops to install new ghost image), and has the main dev tools setup the same way as other developers, while retaining control of his machine to install his own favorite secondary tools.

Also, when (or if) his disk crashes he can be back in action in 1-2 hours, instead of the umpteen hours of installing visual studio or the like.

Soraz
A: 

First of all I thik, that every developer likes to have a full control over his/her machine. Well, at least I do, and I don't consider myself a control freak. Still, I wouldn't work in a company where I couldn't configure my computer just the way I want.

On the other hand, I don't find it particularly fun to configure a development environment of a product, that I'm not really familiar with. Instead I would like to have a script, that would make the whole installing procedure a one-click. Or some really-really simple instructions.

So, there are some things, that I am used to configuring to my liking (like my editor) but there are also some other things (like the settings of the particular project under development), that I don't really care so much.

Rene Saarsoo