I am planning to design software, and I have two questions:
- Do I need to write all the documents before development?
- What else do you do when you are going to develop software?
I am planning to design software, and I have two questions:
This is a rather broad question, but you might want to start somewhere like here:
http://en.wikipedia.org/wiki/Software_development_methodology
Plan out as much as you can. Write everything out: what the demands are, what needs to be done, deadline, budget, etc. Then start getting into HOW the project will be done. Map out your objects, design the general pattern of the program. The forethought is sometimes more important than the actual coding. :D
Rule number 1:
Rule number 2:
Rule number 3:
Rule number 4:
Use pen and paper to write mock ups of the expected interface. Draw one sheet for each "visual state" of your GUI, so that you can "click" from one page to the other.
Let other people interact with the paper interface, ask them if they find it intuitive or not. Check for violations of HIG standards of the target platform.
Loosely, and deemed to be adapted
Applications in general have three layers: the GUI, the "computation part" (business logic), and the storage/IO. You should approximately have these three parts as loosely coupled as possible.
How you actually perform these steps, how much documentation you do, how you organize your work and those of your colleagues, depends on the development strategy you adopt: waterfall, iterative, XP, whatever.
What documents? You make it sound like there's agreed-upon documentation for all projects.
If you must write documentation, start with a paragraph or two that's the 'elevator pitch' for what you're trying to accomplish. If you can't boil it down to something that would make it clear to a customer or another teammate, perhaps you don't understand the problem so well.
Most people will at least sketch out screen shots of a UI, just to have an idea of the flow that users will see.
UML fans will have a class diagram of the objects that you think you'll need to solve your problem.
That might be enough to code the first bit of functionality you want. Get one working, test it until it's solid, move onto the next. Try to do the high-risk items first.
There are many documents that typically need to be written..but not always before software can be written. Things like requirement documents, design documents, implementation details, etc. Depending on your role you may or may not write any of these.
One thing I would say before real development is do some research. Try writing some simple test apps and such to get familiar with technologies, libraries, and possibly languages you have either never dealt with or have limited time with.
Stefano's answer above...rules 1 and 2 are research rules. Read about and learn about possible solutions to the problem at hand. Don't reinvent the wheel...just improve upon it. See what solutions other people may have come up with and see if they fit your problem.
I agree with Stefano in that software can never be designed correctly the first time. In fact even after you code I don't think you can ever be more than 95% complete. There is always room for improvement.
If you have never designed a program, then the simplest approach is to create a user story, http://www.extremeprogramming.org/rules/userstories.html, and allow the developers to figure out the best way to implement your vision.
You may want to take the initial story, and break it down into parts to help them, to get rid of some of the ambiguity.
By using XP programming they can then ask you questions, you should see a mock-up of the UI quickly, and then a prototype, and through repeated iterations you will see what you envision completed.
If you start with a great deal of documentation, then you seem to be going down the waterfall model path. For a nice article on comparing agile to waterfall you can look at Wikipedia: http://en.wikipedia.org/wiki/Agile_software_development#Contrasted_with_the_waterfall_model
You will find that you will generate a great deal of documentation, but, unless you are solving a well-known problem, such as designing a calculator, or something for the life insurance industry, then odds are that what you end up with is not exactly what you want, so time and money is wasted.