Ok:
Para "especificaciones/objetivo del sistema" sirve el word o cualquier editor de texto...
Para las BD, interface(grafica) una herramienta como Visio va bien.
Para la parte compleja, o sea la parte interna del sistema una herramienta como ModelMaker.
Procedimiento:
1-Leete la informacion que hay en http://www.agilealliance.com/home, luego Articles. Tambien http://www.extremeprogramming.org/. Porque? Lo mas tremendo de documentar es que es MUY facil dejar de hacerlo. En estas paginas aprendes tecnicas de ingenieria que ayudan a manejar proyectos y codigos de una mejor manera.
2- Documenta los objetivos principales: Es lo mas facil y MUY importante. Un ejemplo: http://spanish.joelonsoftware.com/Articles/PainlessFunctionalSpecifi-2.html (muy bueno, lee esto primero porque es mas facil de diregir)
3- Lee una introduccion a UML, una buena: http://community.borland.com/article/0,1410,31863,00.html
De todo eso, lo mas practico son los casos de usos y los diagramas de clase.
Por ultimo, documenta solo lo que se necesita, y de ello, aquello que realmente haya compromiso de actualizarse de acuerdo a los cambios. Una documentacion no actualizada es casi peor que ninguna!