Diagramming is very handy too. Depending on how complex your code is, it may seem a waste of time; it's not, a good diagram can greatly increase programming efficiency. For example, the simplest diagram is just a block diagram that defines various 'blocks' of code and their interactions, and once you have a block-level diagram you can then set each programmer to develop a different 'block.' If the diagram is good enough, with defined interblock interfaces, all the programmers can be working on and completing code independent of each other.
There are many other types of diagrams, but I feel most are probably not worthwhile in our application. The only other one I can think of that is worthwhile is the 'Use Case Model'--essentially a stimulus-response chart. A use case diagram diagrams out how a program will respond to users inputs.
A decent, free program for diagramming is
Dia. Check it out, it has more type of diagramming than a programming team could ever need. (unless you dabble in cybernetics, telephony, and hydraulics)