The design document should include the description of the design. It has 2 parts:
Every system has its own bottlenecks and limitations:
You should identify the system bottlenecks and design the system to handle them properly.
Usually there is a tradeoff between execution time and memory usage. You can decrease execution time by using more memory - when using lookup tables for example.
Bottlenecks identification may be required also in the implementation and testing stages, you may run a profiler to identify the runtime bottlenecks.
Object oriented language will produce better code and has several advantages:
Remember that the estimation is not precise.
Update the schedule when you advance in development.
Divide the task to subtasks.
(figure the best way to achieve it
travel example
Prefer to use prepared modules and libraries, then build it yourself. Getting the prepared modules has several advantages:
The module was already developed. You will save you the time to develop it.
Since you get a tested module, you will have less bugs with it.
Usually you have to buy the module, but it usually worth it.
It can be a problem to persuade the management to invest money to buy the package, since it looks like an additional expense and the advantage may not be clear to some managers.
Design patterns are common patterns that are reused in many designs.
Simulation is an important tool for system design and analysis. By building a model of the system and algorithms, you will find the hidden problem before the implementation and testing stages. Using simulations you can:
Good simulation language allows the developer to focus on the algorithm.
MATLAB is a great simulation language for mathematical calculations and signal processing. MATLAB has an interpreter programming language with toolbox packages that reduce development time and let you focus on the algorithm instead of the coding. Using C++ instead will usually require much more work. Excel sheet may be good for simple simulations.
If your design is neat and your code is ordered and clean, then the chance you will have hidden problems is smaller.
The design should be open for changes when the system grows and more features are added.
Restricting the design for a specific system, will make it hard to apply design changes.
Before implementing the module it is important to define the external interface of the module.