You don't need a UML tool
But they can be useful
When tasked with the job of coming up with an architecture and design for a new software system, one of the first questions people ask is about which tool they should use. Such discussions usually focus around the Unified Modeling Language (UML) and whether their organisation has any licenses for some of the more well-known UML tools.
There are many types of UML tool
Unfortunately this isn't an easy question to answer because there are lots of commercial and open source tools that can help you to do software architecture and design, all tending to approach the problem from a different perspective. At a high-level, they can be categorised as follows.
- Diagrams only: There are many standalone UML tools and plug-ins for major IDEs that let you sketch simple UML diagrams of your designs. These are really useful if you want to be in control of your diagrams and what they portray but it's easy for such diagrams to get out of date with reality over time. Microsoft Visio 2007 with the UML templates is a good starting point if you have access to it.
- Reverse engineering: There are standalone UML tools and IDE plug-ins that allow you to create UML diagrams from code. This is great because it keeps the code and diagrams in sync, but often these diagrams become cluttered quickly because they typically include all of the detail (e.g. every property, method and relationship) by default.
- Round-trip engineering: Many reverse engineering tools also allow you to do round-trip engineering, where changes made to the model are reflected in the code. This is usually achieved by code generation.
- Model-driven: There are many model-driven tools that let you drive the implementation of a software system from a model itself, usually by annotating the diagrams with desired characteristics and behaviours. These tools can offer a full end-to-end solution but you do need to follow a different and often rigid development process in order to benefit from them.
What about the whiteboard?
This short summary of the categories of tools available makes for an overwhelming number of options, which means that it can be hard to choose where to start. The other thing to remember is that you don't need a UML tool in order to architect and design software. Often a blank sheet of paper, flipchart or whiteboard is all you need, particularly when you have a group of people that want to undertake the design process in a collaborative way. Many people, myself included, prefer to design using a whiteboard because it frees them from worrying about the complexities of using a tool and lets them focus on the creative job of designing software. Simply start by sketching out the big picture and work down to the lower levels of detail where necessary. Having said that, UML tools are a great way to record the resulting designs in a more formal way.
Once you're confident that you understand how to approach architecture and design, then it's time to perhaps start looking at software tools to help you and improve your design process. Unfortunately there's no silver-bullet when it comes to design tools because everybody and every organisation works in a different way. You don't *need* UML tools to do architecture and design, but they can be useful.

