Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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.

share|improve this question
1  
The Bugzilla question has been asked: programmers.stackexchange.com/questions/9853/… –  JeffO Apr 27 '11 at 15:12
3  
Also, on the question linked by Jeff O, you'd see that redmine (I suppose that trac and many others too, but I have not used it, so I cannot comment) also integrates with version control and has a wiki. –  Carlos Campderrós Apr 27 '11 at 15:20
    
FWIW "free is better" is too vague. Wouldn't you prefer a non-free tool that is robust, supported, and widely used, over a FOSS solution that is not? Your other bullet points are better examples of specific characteristics that you should look for in tools. –  M. Dudley Apr 27 '11 at 16:45
    
@emddudley - Well, given the nature of the organization, "Free is better" means that we don't have a lot of overhead to fund tools. As a developer, I would love to always have the best tools, but that has to be balanced out with what is affordable. I am open to suggestions, but if there is a good, free alternative that will get preference, typically. –  JasCav Apr 27 '11 at 16:46

9 Answers 9

up vote 10 down vote accepted

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.

share|improve this answer
2  
On windows, you're already a second class citizen (unless you're developing on proprietary Microsoft technology). –  Rein Henrichs Apr 27 '11 at 22:20

I can suggest you Redmine .

Redmine is a flexible project management web application, that support these features :

  • Multiple projects support
  • Flexible role based access control
  • Flexible issue tracking system
  • Gantt chart and calendar
  • News, documents & files management
  • Feeds & email notifications
  • Per project wiki
  • Per project forums
  • Time tracking
  • Custom fields for issues, time-entries, projects and users
  • SCM integration (SVN, CVS, Git, Mercurial, Bazaar and Darcs)
  • Issue creation via email
  • Multiple LDAP authentication support
  • User self-registration support
  • Multilanguage support
  • Multiple databases support

As you can see from the feature list, it is a complete development environment that can be integrated with several SCM program, if you feel comfortable with Mercurial you can use Mercurial perfectly integrated with Redmine .

Personally i'm using Redmine from 2 years and i never found something similar in this area, it is simply the best !

share|improve this answer
    
My experience with Redmine is that it tries to be Trac, but fails. But maybe I didn't use it enough. (Disclaimer: Trac certainly is more restricted in your choice of SCM, however). –  Joachim Sauer May 2 '12 at 12:14
    
@JoachimSauer - they're roughly 50/50, they each have benefits that the other fails with and vice versa. Redmine has come a long way, so if you've not looked at it for a while try it again, as with most OSS, its not what it is, but what version you've used. –  gbjbaanb May 2 '12 at 13:16

For source control, I would recommend sticking to SVN until you have a need for DVCS. It's easy to learn, has a lot of community support for both *nix and Windows. And it doesn't tie you in. You can very easily transfer from there to Mercurial or Git when the need arises.

If you can afford the full Atlassian stack, or at least Jira and Confluence, then I would suggest it's the best investment you can make. If you can't then Trac is probably your best bet (and has an integrated Wiki).

I would also recommend Jenkins as a neat, extensible CI tool, although its support for the .NET stack is a bit questionable, if you're going down that route.

Finally, I would suggest getting a copy of Continuous Delivery for a mass of further advice.

share|improve this answer
4  
I'm not sure why you'd specify a "need" for a DVCS. Shouldn't the fact that it has advantages be in its favor, without insisting on an actual need? –  David Thornley Apr 27 '11 at 15:48
    
@David - DVCS is not as easy to learn and none have quite the support network of SVN yet. It also requires that a team works in a particular way, and I'd like to see the team in place and able to work that way before plumping for a DVCS. –  pdr Apr 27 '11 at 16:01
2  
Git is just a simple to use the basics as CVS or SVN. There are tonnes of resources on the web on how to use it, probably better documentation and support than any other system regardless of distributed or not. Git is a complete super-set of SVN, and when paired with a repository manager like Gitorious, it exceeds what you can do with any other system by a large factor. –  Jarrod Roberson Apr 27 '11 at 16:12
1  
Absolutely no argument that DCVS is generally superior --- except for people who don't get the concept of SCM in general. There a centralized one is a bit easier to grok. –  Wyatt Barnett Apr 27 '11 at 16:14
2  
@Wyatt Barnett: You can use a DCVS as a centralized system like SVN. The commands are somewhat different, but you can do the usual checkout, update, merge, status, diff, and commit operations just fine, and that's really all you want to teach beginners. You can use a central version as a repository. –  David Thornley Apr 27 '11 at 17:15

This is my favorite stack for private development right now:

Version Control: Git

Git Repository Management: Gitorious

Documentation Wiki: MoinMoin ( great plugins, easy to hack at, responsive developers )

Continuous Integration: Jenkins

Build/Deployment Management: Maven 3 ( used even for non-Java projects )

Artifact Management: Archiva

Agile Management: Pivotal Tracker ( bug tracking for now, but need something more specific for the QA team )

Bug Tracking: Still deciding on this, must have tight integration with Pivotal Tracker )

share|improve this answer

As for Source Control, I think you are on the right track.

The problem with Defect Tracking Software is, that there is practically no suitable FOSS available. Jira is pretty good but I am not aware of the pricing scheme. I would suggest to take a look at FogBugz which seem quite affordable. Also, I haven't personally tried it but knowing other products from this company, you might want to try out YouTrack.

Others already suggested Continuous Integration. This is a way to go but I would go even further than that - you could think of Continuous Delivery.

share|improve this answer

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.

For source Control, you have to think of how you are using the source control. Mercurial HG is really good, if your developers are offsite. The source control makes merging easier too.

Tortoise SVN is good otherwise. Also, if you are developing in .net and have some money look for VS Team version. If you doing a lot of database work with stored procedures, Team version has SQL debugging. It is really nice. Also you can get svn integrated with VS, but it is not free.

Bug Tracking - I'm at a loss here. I have used Bugzilla in the past, but, it makes me cringe when I use it.

Bugzilla, is very useful and works just fine in my arogant opinion.

Documentation - MediaWiki, Screwturn Wiki, Atlassian (of course, this costs money so that is not ideal)

wiki is a wiki, documentation becomes outdated. If you have a team of four developers, you probably are making them do so much work they won't have time to document much. But if you want to keep a wiki by all means use it. I'd suggest sales force chatter to manage communication/documentation. It is more of collaborative site. I don't know how to configure it but for non technical people to communicate with technical one is works and it is easy UI. Gives you a facebook feel.

Also you didn't mention unit testing. I recommend Nunit case you can configure to run unit tests through the console, if you want to setup a build box for nightly builds. Again this is .net environment.

Also regression testing. Believe me, you will save yourself a lot of headache and better control on moral of the team, if you either have a regression testing tool or give your developers the option and time to build one for your software. You will not regret it and you will have your developers stay with you longer. Again this is in my arrogant opinion.

share|improve this answer

At my previous workplace, we were using Trac (bug tracking, project planning, documentation) with Subversion - they integrate quite well. Not sure how it integrates with Hg or Git.

share|improve this answer

These aren't the most fundamental things, but if I was starting from scratch I would definitely be looking at:

Cloud - something like Amazon Web Services for provisioning and running your environments.

Devops - automating and scripting building of environments in a repeatable way.

Vagrant & virtualisation - speeding up the provisioning of development environments.

Continuous Delivery - setting up your systems, processes, architecture etc such that you can automate and speed up releases and delivery with minimal downtime.

This type of stuff seems orthogonal to a development, but in my experience, can take up a lot of time and deliver a lot of value if you get it right. It's also much easier to do if you are starting with a blank slate.

share|improve this answer

I can tell you about three development setups I know (my own and two of my friends).

My Own Setup (A many programs are good setup):

  • Sublime Text 2 for all programming/text editing. It's cross-platform, and has 'build tools' for several types of programs (my only problem is with Java, it doesn't have a java run, just a java compiler), and is completely customizable when it comes to snippets (text auto-expansion), color schemes, and build tools (my complaint about java is nullified here, because I could just make one myself).

  • If I'm feeling command-line-y, I use nano for my text editor.

  • Git for all version control. I have a 'private' repo section on my own website for personal projects that I don't want people easily finding or messing with. I use GitHub for public repos and projects that I wouldn't mind getting some help with from other people.

  • Terminal (for Linux installs) and Command Prompt (for Windows installs). I control Git through the terminal and not a gui, and I also use it for running my java programs. My only real complaint that I have to use full paths on Windows because it doesn't have symbolic links, but that's only Windows. I personally prefer bash over dos.

  • For documentation I usually write it into the programs or write my own documents for it.

Friend One's Setup (A many programs are good setup):

  • Notepad++ (Windows) or Gedit (Linux) as a text editor. Both are free and extensible, they've both got a plugin api and some good plugins (I like the set that comes with Gedit-Gmate). They've also both got "user tools" or command shortcuts that you can run to execute custom commands on your open documents (or even just custom commands for the system).

  • Git for version control. Pretty much the same setup as myself, also uses the Terminal/Command Prompt/GitBash.

Friend Two's Setup (A One Program to Rule Them All setup):

  • Eclipse for everything. Eclipse is the only program he opens.

  • All documentation is done inline with the code, generally using docblock.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.