views:

828

answers:

20

Years ago, I used to use Rational Rose. It was big and bulky, and I only used a subset of the features, but it got the job done. Lately (last few years or so), I've just been sitting down with sheets of plain white paper and a pencil. I usually break out a UML cheat sheet and just iterate over the problem.

What tools do people use today? (class diagrams and state diagrams would be essential, code generation not so much).

+13  A: 

A whiteboard or three.

Galwegian
A: 

I use StarUML and some extensions once I get into the deeper design phases. But I start with OpenOffice's word processor and spreadsheet for documenting requirements and laying out a ground work for a project.

Thomas Owens
+9  A: 

A piece of paper or a whiteboard is always a good start...

But: We use Enterprise Architect to model class diagrams (and generate code), data contracts (XSD), and data models (and generate sql scripts from that) The code generation templates can be customized to your own needs.

And the tool integrates with TFS too (to keep the version history of your model)

thijs
We use Enterprise Architect too. A great program for a decent price.
nportelli
A: 

Whiteboard + Paper + Windows Journal in a tablet pc.

Artur Carvalho
+2  A: 

Whiteboard with a digital camera nearby to capture the whiteboard content. I also find that OneNote is incredibly useful to capture requirements and design meeting content.

codewright
+2  A: 

I start with doing a bunch of proof-of-concept's on the user-interfaces. And then I fit the underlying data-structure and code. (Most projects go awry when you start coding and when you're done; fit the presentation-layer on top of that code. Very bad idea.).

When doing proof-of-concepts, I use paper and a pencil.

roosteronacid
+1  A: 

Normally, I write all my design stuff in a notebook (using a fountain pen because it is much more enjoyable to write with). If I'm working with others, I'll design on a whiteboard and then either copy to my notebook or take photos of the whiteboard before it is erased. For more complex UML-type stuff, I use Umbrello, which is an open source UML modeler. The feature set is pretty good for class diagrams, but less complete for other types of UML diagrams (but it's rapidly evolving).

rmeador
A: 

Whiteboard, and paper. I used VPUML, but it got in the way more often than it did not. Nothing can beat the free hand drawing - yet.

I am looking forward of a really working tablet style computer though...

FooLman
A: 

Paper and pencil, whiteboards, then StarUML when it solidifies.

Jeff Kotula
A: 

Whiteboard, pens, papers, stickies & index cards. Along with being in the same room with the people who understand the business goals.

Software - for design work - just slows you down in the vast majority of situations.

adrianh
+1  A: 

My brain. Mostly.

Cristian Libardo
This seems obvious but I've seen enough to know this needs to be said.
Cervo
A: 

I typically use Adobe Illustrator as my pen and paper. Whatever tool you use, you ought to be nearly an expert so the tool itself doesn't slow down your thought process.

Larsenal
+1  A: 

Prototyping

Most of my job involves a lot of SQL reports and stored procedures. I sit down and begin writing a bunch of queries against the database. Basically a bunch of small prototypes, then I bang them together into a full report or stored procedure for data processing.

When writing applications I often write tricky bits of code in Python or Perl first because I can do it quicker and play around. Sometimes I also just start writing C# or C++ and do the same thing, write the trickiest parts first and then once done I string it all together into the application. Basically a prototype that does what I want that is then integrated with my application.

So basically I perform a bunch of "experiments" and slap together a working application from them. In the case of using Python/Perl you could say a scripting language (power shell/vbscript/ruby/lua/tons of other languages also fit the bill). But something that leets you play around without having to write tons of boiler plate code is useful.

My tool is prototyping. It often lets me identify problem areas in the application early on so I can give feedback to the higher ups much earlier and we have more time to decide what to do.

Cervo
+2  A: 

Believe it or not, besides notebooks and whiteboards, I've actually found Visio to be pretty decent. It has a bunch of templates and its pretty straight forward to use. Also, most microsoft shops (at least the ones I've worked for) all seem to have it so there's no additional cost...

scootdawg
A: 

InkSeine, MindJet, Visio, and Word.

I use InkSeine to organize everything. Notes, file links, web clips, etc. I use MindJet to "sketch" my ideas about things and figure out how they are linked together. I use Visio for UML and database design. And of course I use Word to produce more formal documentation.

I link everything together in InkSeine (which I use on a Tablet PC) so I have easy access to organized info. But the products of each individual application stand on their own.

Robert S.
+1  A: 

OmniGraffle. Paddy o' paper.

David Grant
A: 

Umbrello.
Nothing much more to say, really :)

gnud
+9  A: 

Paper, whiteboard, prototyping.

I also use a tool that nobody else has mentioned.

Once upon a time, I was put in charge of a development project that was going to cost on the order of $2-3M. The company had already lost about 10x that much on an earlier version of the project, which they were throwing away and starting over from scratch. Senior management was determined not to make that mistake again, and so from the start they wanted the design reviewed. So they got a very senior (and fabulously expensive) technical consultant from one of the most heavy-duty consulting firms in the world, and they paid an ungodly sum for him to spend three days going over the design with me. (Nerve-wracking? You bet!) I spent three days talking and drawing on the whiteboard, and he spent three days capturing everything in...PowerPoint.

But PowerPoint sucks, you say. Its drawing tools are primitive compared to Visio or Illustrator or practically anything else, you say. You can't make a drawing of any complexity. All true.

On the other hand:

It may seem a little tautological, but the main thing that using PowerPoint does for you is that it enables - and forces - you to construct your design documentation in a way that can be presented to other people.

It's not possible to draw a huge and complex drawing in PowerPoint. What you have to do instead is break things down into simple pieces and present those pieces and their interrelationships. It's very hard to make a drawing in PowerPoint with more than six or seven boxes, true, but on the other hand it's also very hard to understand a drawing with more than six or seven boxes.

Another thing that using PowerPoint lets you do is start with a simple drawing and gradually add complexity to it, explaining each addition of complexity on its own slide or set of slides.

Once you get good at that, you can also use it to make "animations" of the system you're designing, illustrating changes of state at each step in the process as you move from slide to slide. In essence, you can create a visual prototype of your design that other people can examine and step through.

I've found this immensely useful in communicating the behavior of interfaces between disparate applications to non-technical users of the individual applications. It made it possible for them to see how the changes I was proposing to the one application they understood were necessary to support its interoperation with the other applications. I could see these people going from confusion and disinterest to engagement and even enthusiasm as we walked through the process step by step. This has gotten me buy-in that I wouldn't have gotten otherwise. In more than one case, a non-technical person has taken a copy of the presentation home, played with it on his own time, and gotten back to me with questions and ideas that I really needed to hear.

(Another nice thing about this is that you end up making PowerPoint presentations that don't look like any PowerPoint presentation anyone else has ever seen. That alone keeps peoples' attention.)

It's certainly not the first tool that I reach for. In fact, I don't use it unless I really, really have to. Because PowerPoint is frustrating and awful to use. But haven't yet found myself leading a design review and thinking "man, I wish I hadn't used PowerPoint to do this."

Robert Rossney
+1 for that great insight.
m_oLogin
A: 

BOUML is one of the best UML design tools that I have found. It's open source for Java, C++, Python, and PHP. It can do round-trip software engineering. In other words, it can read in code and put it in a tree structure. You can then drag-n-drop from the tree structure into diagrams. It can generate code from diagrams. It can do both with the same set of code (which is the meaning of round-trip engineering).

The UML allows me to quickly design the basic class structure. I then generate the initial batch of code and use ordinary IDE's like NetBeans (for Java) from that point.

I often use BOUML to create some pictures to document my code. Once the pictures are made, I can just put them on the developers' wiki.

Pen and paper for the basic flow charts.

Master1588
A: 

If you'd like to focus on building your model and not manipulating objects on diagram, you must try Red Koda Community. Check the one minute sequence diagram video, you can see how easy and fast you can use it with the aid of short cut keys.

Red Koda Software