Every software product starts with an idea: "I want to build an application to remind me of upcoming appointments," for example. But there's a big gap between the original idea and starting to code. Bridging this gap entails coming up with some sense of just what features the software will include, and how they'll relate to each other. On large, formal projects you might handle this with a requirements management tool such as Borland CaliberRM or Telelogic DOORS/ERS. But on smaller projects, you probably want to use a more freeform process to come up with your requirements. This article shows one tool for this job that I've had success with in the past: the mind map.
It's Brainstorming Time!
To get started with a new project, you need to come up with your basic idea, your "elevator pitch" that can be delivered in thirty seconds. This will help you focus on what you're about to code. But after you've achieved that focus, you need to expand your view. This is the point where I'll typically start brainstorming a more detailed list of the things that the software will do.
There are a lot of ways to do this brainstorming, and choosing between them is largely a matter of personal preference. Some people like to use a text editor or a word processor and just type ideas, perhaps organizing them into an outline. Many developers are happy with a whiteboard for this purpose, although that leaves you with the problem of saving the whiteboard contents for later reference.
My own personal choice for freeform brainstorming is the mind map. Tony Buzan, who invented this form of diagram, describes a mind map as "a powerful graphic technique which provides a universal key to unlock the potential of the brain. It harnesses the full range of cortical skills-word, image, number, logic, rhythm, color and spatial awareness-in a single, uniquely powerful manner." You can think of a mind map as a sort of two-dimensional outline; rather than organizing ideas into a linear list, you spread them around the page and connect them. Mind maps can also use icons, graphics, fonts, colors, hyperlinks, and other techniques to include information that's hard to put into words.
There are several software packages out there to create mind maps, which is a good thing, because most developers don't have the graphic skills to create a nice one by hand. Here are some of the ones that I know about for Windows:
A Product Design MindMap
Let's get right to the meat of this method. Mind maps start small and grow organically. To build a mind map, you start with a central concept - in this case, the name of the application to be built. Then you jot down other related ideas and concepts as they occur to you. Sometimes, these will seem to fit directly with the central concept. Others might be floating around as yet unconnected to anything else. No matter - the important thing is to start putting stuff on the map. Figure 1 shows an early stage of building a mind map for software design.
As you build the mind map, new ideas will occur to you, and you'll start to see how ideas that you've already put down fit together. At the same time, you'll start to get a feel for which parts of the map are important enough to emphasize with different fonts or images. You'll probably end up rearranging a few times as you attempt to capture everything that's tied to your original germ of an idea. Figure 2 shows what our hypothetical reminder tool might look like as it's expanded into a fuller mind map. I used MindManager to build this one, but any of the tools I mentioned can do something equivalent.
Here are a few of the important points about this approach:
- The mind map is a flexible, flowing tool. As you think of new aspects of your subject, you can type them in anywhere and then move them around to fit. This makes it very well suited for brainstorming, where the goal is to get all of your ideas down on paper before you look at them too critically.
- You're not limited to plain text on a mind map. In fact, you almost certainly want to use fonts, icons, bitmaps, colors, and so on to dress up a mind map. It's been my experience that the more playful you make these things, the more likely you are to come up with interesting ideas.
- A good mind map will both record your ideas and provoke them. The one in Figure 1 is just the start of what I'd want for a product design; before writing code, I'd like it to include a lot more detail. After you've gotten your initial thoughts down, print a copy or leave it on screen while you're doing other things. Soon enough you'll find yourself expanding branches and adding new ones as additional features and cautions occur to you.
- Mind maps are not technically intimidating. You can share them with management, testers, and other folks who don't write code without scaring people away. Toss up a mind map on a projector at a meeting and you can even work on it as a group to hone a shared vision.
After the Brainstorming is Over
One of the best features of software-generated mind maps is that they're dynamic. It's easy to move branches around, add or delete text or images, and otherwise update mind maps. If you're using a mind map for brainstorming, consider updating it as your project proceeds to give you a continuously current snapshot of your ideas. If you do this, I suggest you archive a copy of the original version first. When the project is released, it's fun to look back and see how your ideas about it have changed and evolved. In fact, you might even put your mind map under source code control along with the rest of the project artifacts.
But you can go even further than that: depending on your corporate culture, you can turn your mind map into a project management tool. Most of the high-end mind-mapping software these days includes advanced features such as hyperlinking branches to other documents and tracking the percent done for any given branch. Rather than managing with an application such as Microsoft Project, you can turn the mind map itself into the management tool. This requires you to push each branch of the tree out until it's a task that is small enough to be assigned and implemented. Then the project manager can track on the tree exactly what's going on. Combine with some color-coding, and you can get a good feel for which parts of the project are doing well (and which ones are in trouble). Link in project documents like test plans and detailed design specifications, and you have a single place to go to start exploring what's going on.
Mind Mapping as an Essential Tool
Even if you don't have a product to design right now, I urge you to investigate some of the available mind mapping tools. As developers, we're often inclined to store information in a database or a spreadsheet - or, failing that, as a simple list in NotePad. Mind maps provide a nice middle ground to hold unstructured information that needs to break out of the rigidity of a database structure, while being more than a simple list of items. If you do any sort of brainstorming, you'll probably find them a useful tool.
Mike Gunderloy is the author of over 20 books and numerous articles on development topics, and the lead developer for Larkware. Check out his latest books, Coder to Developer (from which this article was partially adapted)and Developer to Designer, both from Sybex. When he's not writing code, Mike putters in the garden on his farm in eastern Washington state.