I don't feel too comfortable with design tools. Besides, I don't think diagrams make thngs any easier to comprehend or maintain. Large projects tend to have huge diagrams, which intimidate any new developer.
At first I start small and don't care about documentation and create a working prototype. When I have an idea of what it's going to look like, I start writing interfaces and/or class stubs, which I try to document thoroughly in the source code. The documentation generated with tools like doxygen give a good overview of the architecture, especially if you enable DOT graphs. This generates small UML diagrams for parts of the project, which often looks quite ok and get the idea to the reader.
The last step is to implement small parts and improve the documentation at the same time, adding code snippets as examples. IMHO this saves me the pain of squeezing everything into a giant diagram-monster and generates decent documentation that people actually use (!!!).
When the very basic functions are complete and documented, I add more features, refactoring the existing code a bit. This takes some time, but I think the results are worth it.