Development Environment – Setting Up a Development Environment

development-environmentdocumentationissue-trackingversion control

I am part of an organization that is formalizing their software development processes/capabilities/etc. While the organization is not traditionally a software organization, they want to do this right and provide the developers who work in the organization (which includes me) a solid set of tools in which to work from.

In particular, we are looking at standing up: source control, bug tracking software, documentation tools (for the developers – not for end-users), and, in general, project management software (continuous integration, project tracking, code review, software push). Some of the high-level requirements are:

  • Free is better. While we will consider purchasing tools, there is so much support in the FOSS community for development tools, I want to look there first.
  • Integration across systems. (For example, the bug tracking software should be able to link back to the source control.)
  • Easy to Import To and Export From. I do not want lock-in.
  • (Relatively) Easy to learn.

At this point, here is what I am looking at so far as my recommendations:

  1. Source Control – Mercurial or Git – I am personally leaning more towards Mercurial based on my research and the fact that Mercurial appears to be easier to setup in our environment.
  2. Bug Tracking – I'm at a loss here. I have used Bugzilla in the past, but, it makes me cringe when I use it.
  3. Documentation – MediaWiki, Screwturn Wiki, Atlassian (of course, this costs money so that is not ideal)

I am looking for other suggestions of productivity tools/development tools that you have used. Please remember that we are a small organization, so I don't want to go over the top, but I do want to give developers good tools to use.

Best Answer

Been through this before. Actually still living in it. You've generally got a good idea of where you are heading -- most folks doing this barely use source control. Alot of exactly what to use depends on which stack(s) you use. Can you share that?

Anyhow, running down your list:

  1. SCM: really depends on environment. If you are on windows, Mercurial tends to make a lot more sense as you aren't a 2nd class citizen. I would seriously consider using a hosted solution here if your software isn't too top secret and you've got solid bandwidth to take advantage of it. One other side to this -- SVN isn't really that bad in internal scenarios where you know you have connectivity and central control make sense. And it has the advantage of being much easer to grok for the uninitiated. I can get my art department to somewhat use SVN. Good luck with git.
  2. Bug Tracking/Documentation: I'm lumping these together because I'd generally contend you want them in the same system. For small teams, the best choice IMHO is Redmine (or Chili depending on which fork you want to back). They both handle bugs and do wiki/discussion type stuff. Moreover, it is easy to link from bugs to the discussion or wiki and vice-versa. They can also easily take tickets over email and hook up to LDAP, which makes it pretty easy to get your end users submitting trackable tickets rather than random emails to the wrong person at 2am on a sunday. Oh, and it will talk to your SCM too.
  3. You didn't mention Continuous Integration but I'd argue that is perhaps more important than anything here but source control -- it keeps you honest. To some extent what to use depends on what you are building, but in general the best option out there IMHO is TeamCity. The free SKU probably works for most internal uses as 20 projects and users is typically more than enough. The beauty of it is it is so disturbingly easy to setup it is scary -- you can go from zero to continuously integrated goodness in 5 minutes. 4 of which are spent watching the installer go.

The other angle here would be to ask your developers what they want to use. Or setup some sort of slushy tools fund budget for them. New stuff pops up all the time and it is very, very app/platform/language specific what people want.

Related Topic