Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have heard about many techniques which are used by developer/software manager to solve hard programming logic or to create flow of an application and this flow will be implemented by developers to create an actual application.

Some of the technique which i know, are:

  1. Flowchart
  2. Screen-Layout
  3. Data Flow Diagram
  4. E-R Diagram
  5. Algorithm of every programs

I'd like to know about two facts: (1) Are there any techniques other than this ? (2) Which one is the most suitable to solve hard programming logic and process of application creation?

share|improve this question
Paresh, I don't anybody should be using flowcharts these days, as they are inherently single threaded in design. We live in a multi cpu age now. – user225 Sep 8 '10 at 21:26
Flowcharts are not good high-level design tools. I still find them invaluable in method, or even class-level, design. Data flow diagrams and class relationships are my tool of choice higher up. – Michael K Nov 9 '10 at 13:27
Hard problems require creative solutions. There is no simple formula for a creative solution. A key phrase is: try to "manage complexity". SICP lectures would introduce you to philosophy and techniques for managing the complexity, but that is only an introduction. – Job Feb 17 '12 at 17:24
@Job good info. – Paresh Mayani Feb 20 '12 at 5:45
up vote 5 down vote accepted

All that you mentioned is great, I personally find at least the initial phase to start is best by identifying the use cases present from the requirements. If you can identify (which you probably will not) all the possible scenarios, and then design your class/ER diagrams from this along with flow the rest will mostly fall into place.

For problems that are extremely challenging I find it best to use the divide and conquer by making the problem/challenge and bunch of smaller problems and define dependencies of them. Solve each smaller problem and then combine to come up with a final solution.

share|improve this answer
ya i think UML is the best-one solution.... – Paresh Mayani Sep 9 '10 at 5:18
Also, that approach helps you to a. create reusable code, and b. make a better design, because there's less dependency between different parts of the system. – Michael K Nov 9 '10 at 13:29

For hard problems, I almost always fall back on TDD (Test Driven Development). That way, I can explicitly assert how I want my program to work and then test and validate that it's doing what I expect.

share|improve this answer

What about UML. Does nobody use it for analysis? For years I used it on and off and detested it, I thought it was a waste of time, couldn't see the benefit of it. But that changed. In the last couple of years i've been developing some really duty multithreaded code, and sometime it was really driving me up the wall to get some stuff working right. One day, I said.right lets document what we have. We'll use UML, and suddenly the problems surfaced and were fixed. It was a pure revelation.

Now if I have a really difficult problem, I choose the appropriate model type and fire a model, and see how it looks. These days I very rarely get stuck with difficult complex code. Done right, you can simplify the code right out.

share|improve this answer
+1 Yep, it pays off to spend time thinking/drawing it out, no matter what model you use to do it. – Michael K Nov 9 '10 at 13:31

I think the best option is to just start writing. Write about the requirements and write about the limitations. Write about the various tradeoffs between options. After you finish, you should have a very good understanding of the situation. Dot points are good for scanning

share|improve this answer

I think flowcharts can be used for small programs, and if the programs are lengthy or even complicated we can make use of divide and conquer method.

Use of UML is also the good one. When compared to the flowcharts, UML is good because it shows the requirements and other details in the model format.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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