Software design, is the step in the software development process prior to construction. It is the step where you think about what you are going to build, what tools or prebuilt components you need, what components you need to build, and how it all fits together. The amount of time spent on the design of the software depends on the complexity of the software. You would spend some time and money designing a new home but not much time or money designing a tree house for the kids. Same with software. You may not spend much time designing the application to track the names and handicaps for your bowling league, but you will want to take the time to do a careful design of your company's order entry/inventory/invoicing system.
The next obvious question is then "how does one do software design"? The first step is a software design methodology.
Well, if you are developing a one-form application, you may not need a methodology. But very few applications are that simple. Most applications have many forms, lots of data, significant amounts of processing, and tons of business rules. And these components are not independent; they must all work together.
A methodology ensures we logically think through the things we need to consider when designing an application: from forming a team to collecting requirements to designing the components to laying out the user interface to organizing the data to defining development, testing and distribution strategies. It helps us to develop a plan.
So the primary answer to the above question is that we need a methodology to manage the complexity of software design and development.
| topic | How do I go about defining a methodology? |
| issue | OK, you're sold on the need for a methodology. Now, how do you go about defining one? |
The best way to define a methodology is to think logically through the steps needed to design an application. Write all of the steps down. Start from the definition of the project and include everything you need to do including: getting funding, defining a team, detailing the requirements, understanding the business objects, designing the user-interface, and so on.
InStep Technologies uses a methodology called GUIDS. This methodology provides an object-oriented approach to software design and can be used with any languages, technologies, or modeling tools.
| topic | Why No Code? |
| issue | Your boss walks in and asks "Why aren't you coding?" |
You're working on the design phase of a professional-quality application. You're interviewing users, documenting object definitions, and drawing object models. Your boss walks in and asks "Why aren't you coding?" Well, maybe not in those exact words, but it's clear that the boss is not happy with your apparent lack of progress on the application.
Here are several answers to that question. Use any or all that seem appropriate!
With these reusable answers, you're always ready to answer the question, "Why no code?"-From my sidebar to the Programming With Class column in the Visual Basic Programmer's Journal, March 1998.
The GUIDS methodology is a pragmatic approach for the design of an application. Each letter in the word GUIDS represents one of the steps in the design process.
G - Goal-Centered design. This step involves understanding the goals of the application. Then taking those goals, defining the basic "things" involved with the application and how these "things" work together. These are the business objects and the scenarios (or stories). This step results in a clear understanding of the project and a definition of the business objects and scenarios.
U - User-Interface design. This step involves converting the scenarios into features in a user-interface. The focus here is on defining a user-interface that is centered around the user's goals. Like an emergency room has the most needed tools within reach and less used or more dangerous tools hidden within cabinets, so too with a user interface. The most needed features should be easily available on toolbars and less used or more dangerous features should be tucked away in menus. This step results in a user-interface design document.
I - Implementation-Centered design. This is the most difficult step because it is here that the architecture and internals of the application are defined. Should the app use Win Forms, Web Forms, Web services, remoting, Enterprise Services, etc? How many components should be defined and where should each reside? The results of this step is the application architecture and a definition of the components required in the application.
D - Data design. Notice that the data design is *not* first! Many of us learned to design software by first designing the database. We learned how to do entity modeling and normalization. This is a good technique for designing a database, but not for designing the application. Hence, this step is here, but not until after the other parts of the design are complete.
S - Strategies for construction. This is the last step in the design and it encompasses all of the other steps that should be performed before the development process begins. This includes the definition of coding standards, naming conventions, quality control procedures, documentation, and so on.
For a more detailed discussion of each step of the GUIDS methodology with a complete example, see "Doing Objects in Microsoft Visual Basic 6.0" by Deborah Kurata.
To download a sample GUIDS design document, click here.
| topic | Goal-Centered Design Tips |
| issue | Here are a few tips on using the Goal-Centered design techniques. |
| All contents © 2004 InStep Technologies, Inc. All rights reserved. |