Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

What do you use when designing how everything in a program will work together? Do you use a program? Pencil and paper? A whiteboard? Your mind? And how do you represent these designs? UML? UML2? Something else?

And if this isn't too broad, what do you usually define in your designs?

share|improve this question

closed as off topic by Yannis Rizos Feb 11 '12 at 23:01

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

7 Answers 7

up vote 3 down vote accepted

I've had alot of success with just a whiteboard and Visio (or open office draw when I don't have Visio).

I use Visio to draw out state diagrams, object relationship models, database designs. I usually just detail out the high level objects and their relationships to child objects using the "Has A" and "Is A" labels. I find that these types of diagrams help me in designing a flexible model that can be easily translated to objects and interfaces.

The whiteboard is the perfect tool for getting your thoughts down on "paper" (per se), but it also allows for quick erasures because designs can change in a heartbeat. I would LOVE to work in an office with a smartboard (printable whiteboard) but they're very expensive and our company just can't afford it so we resort to taking pictures of the whiteboard and printing out the results.

share|improve this answer

A piece of paper and a pencil.

share|improve this answer
+1. This is one of the two methods I'll use, primarily when doing it alone. In group sessions, we have those nifty whiteboards with built in printers. I've always found that most "tools" get in the way of what I'm trying to do. –  paxdiablo Dec 18 '10 at 0:24

mindmapping tools like mindnode for brainstorming and organizing thoughts, Visio or Gliffy for organizing them into something formal and presentable, Microsoft Word to writeup the text docs.

share|improve this answer

Fountain pen and ink on paper.

Currently: A Namiki Vanishing Point, some Noodlers ink, and a good bagasse (a smooth paper made from sugar cane pulp).

share|improve this answer

I use a whiteboard for working things out, and take a photo if I want to keep it for reference.

To share with others, I draw it up with http://www.simplediagrams.com/

share|improve this answer
Alas, not working in Linux. Adobe Air is closed for Linux for some reason. –  YumYumYum Dec 18 '11 at 12:53

Combination of legal pads and white board for brainstorming and initial organization.

I use a UML tool (Enterprise Architect from Sparx) to capture the details and then generate a HTML or document report with a template. I also capture the requirements and architecture in the UML tool so I get some nice traceability. The code can be forward engineered from the design (although I usually reverse engineer the actual design from the code). Any documentation can be generated from the UML.

share|improve this answer
Same, nothing for Linux? –  YumYumYum Dec 18 '11 at 12:54

StarUML is pretty nice, and free. It can be very helpful to model your design as objects and then "debug" your design by running it through sequence diagrams depicting all the major use-cases. This is not only good documentation, but it also uncovers design errors that are otherwise hard to catch until you reach development.

share|improve this answer
Not for Linux, bad luck. –  YumYumYum Dec 18 '11 at 12:52
Astah community edition is a UML 2 tool that is similar to StarUML but in my personal experience works more reliably. –  Ant Apr 19 '13 at 16:05

Not the answer you're looking for? Browse other questions tagged or ask your own question.