Question

I'm curious what tools people have found useful for building flowcharts. Obviously MS Visio and OmniGraffle come to mind but they both feel so bloated and also tend to emphasize the document formatting/printing side and less on helping to organize the actual logic. Is there anything else out there that fellow developers would recommend?

I'm hoping to find something fairly simple that would let me throw together flowcharts on the fly when I'm working through complex logic. I don't care about formatting or fonts or the like, just something that would help me keep my logic organized as I work through it. Even something that would arrange the chart itself and simply allow me to specify where to branch and what to check, etc.

Any OS would be fine, though I personally lean towards OS X apps as this has recently been my primary work environment.

Was it helpful?

Solution

Though you list it as bloated I nonetheless use OmniGraffle.

For quick flowcharting a series of boxes with lines to magnets in the boxes is sufficient, but the rest of the formatting options are good to have later. I find that any flowchart I take the time to draw generally ends up in a document somewhere. Even when I'm just trying to understand some difficult code, I end up with a one page document which attempts to explain that code for the next poor schmuck who has to dig in.

OTHER TIPS

take a look at graphviz.

Example:

digraph finite_state_machine {
    rankdir=LR;
    size="8,5"
    node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
    node [shape = circle];
    LR_0 -> LR_2 [ label = "SS(B)" ];
    LR_0 -> LR_1 [ label = "SS(S)" ];
    LR_1 -> LR_3 [ label = "S($end)" ];
    LR_2 -> LR_6 [ label = "SS(b)" ];
    LR_2 -> LR_5 [ label = "SS(a)" ];
    LR_2 -> LR_4 [ label = "S(A)" ];
    LR_5 -> LR_7 [ label = "S(b)" ];
    LR_5 -> LR_5 [ label = "S(a)" ];
    LR_6 -> LR_6 [ label = "S(b)" ];
    LR_6 -> LR_5 [ label = "S(a)" ];
    LR_7 -> LR_8 [ label = "S(b)" ];
    LR_7 -> LR_5 [ label = "S(a)" ];
    LR_8 -> LR_6 [ label = "S(b)" ];
    LR_8 -> LR_5 [ label = "S(a)" ];
}

produces:

alt text
(source: graphviz.org)

it is particularly well suited to be generated from programs.

How about paper and pencil? Or a whiteboard?

Sometimes the ease and tactile feedback of physical objects is the most appropriate.

I use Dia on Linux. It's quite lightweight and is simple to use, but it doesn't automatically position elements, and I've found the interface to be a bit inhibitive at times.

There's an OS X port at dia.darwinports.com, although I've not used it.

Open Office's Draw is pretty good too. I've used it to create everything from simple flow charts to complex genealogical trees.

I use Microsoft Visio 2003, a tad bit of overkill with all its extra junk I don't need, but I like it's simple UI.

I generally don't do flow charts, but do do state diagrams. I do a high level flow on a white board, then lower levels, on A3 paper.

Once it is all working correctly, I create it in Visio, which becomes part of the release documentation.

For the OmniGraffle, is it good enough for its FREE version? i.e. after its 14 days trial, is it still a good choice?

I am attempting to use the yEd.

I do not use it for programming related tasks but I don't see why it wouldn't work. Mindjet Mindmanager is a great tool for creative thought mapping. (It can be pretty expensive however)

I don't do a lot of complex flowcharts but I when I am flowcharting or putting together a data flow I tend to use Powerpoint. It is simple enough and I know it well enough.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top