I never really bothered about UML (not "real" UML anyway). When I start a project, I'm interested in a few things:
- How will my software be used (and by whom)
- What does the software need to do
- How do the different features/components fit together
For 1, you can use UML Use Case diagrams. I normally use my own pseudo use case diagrams. From this you map out who will use your software and in what ways. Different users will use the software in different ways. This is useful because it a) helps you determine who your target users are and b) helps you determine what features are required for 2. Also, if you know who will use your software and how, you can tune it specifically for these users.
For 2, I normally just make a big list. Sometimes it is useful to split the list into categories and/or priorities. This often becomes my "TODO" list then.
For 3, I draw something resembling UML class diagrams, except without the UML annotations. Basically each class/module/component gets its own box and they are linked together with lines. This shows me what components will exist in the system and how they are related/communicate etc. I probably draw it different for every project and some get more detail than others, depending on what I feel I need at the time.
After this, I like to prototype core concepts by writing simple throwaway mockups/prototypes. This will give me some ideas as to how it will work, how to implement it and how not to implement it (often I do the prototype "the wrong way", which I wouldn't have known if I hadn't written one). The important thing here is that the code is NOT used in the real version.