Prepare a technical specification document based on the functional specification. The technical specification document should cover:
Purpose of the document: e.g. This document will emphasize the customer service functionality.
Overview: This section basically covers background information, scope, any inclusions and/or exclusions, referenced documents etc.
Basic Architecture: discusses or references baseline architecture document. Answers questions like Will it scale? Can this performance be improved? Is it extendable and/or maintainable? Are there any security issues? Describe the vertical slices to be used in the early iterations, and the concepts to be proved by each slice. Etc. For example which MVC [model-1, model-2 etc] paradigms should we use? Should we use Struts, JSF, and Spring MVC etc or build our own framework? Should we use a business delegate to decouple middle tier with the client tier? Should we use AOP (Aspect Oriented Programming) ? Should we use dependency injection? Should we use annotations? Do we require internationalization? Etc.
Assumptions, Dependencies, Risks and Issues: highlight all the assumptions, dependencies, risks and issues. For example list all the risks you can identify.
Design alternatives for each key functional requirement. Also discuss why a particular design alternative was chosen over the others. This process will encourage developers analyze the possible design alternatives without having to jump at the obvious solution, which might not always be the best one.
Processing Logic: discuss the processing logic for the client tier, middle tier and the data tier. Where required add process flow diagrams. Add any pre-process conditions and/or post-process conditions.
UML diagrams to communicate the design to the fellow developers, solution designers, architects etc. Usually class diagrams and sequence diagrams are required. The other diagrams may be added for any special cases.
State Chart diagram: useful to describe behavior of an object across several use cases
Activity diagram: useful to express complex operations. Supports and encourages parallel behavior. Activity and State chart diagram are beneficial for workflow modeling with multi threaded programming.
Collaboration and Sequence diagrams: Use a collaboration or sequence diagram when you want to look at behavior of several objects within a single use case. If you want to look at a single object across multiple use cases then use state chart.
Object diagrams: The Object diagrams show instances instead of classes. They are useful for explaining some complicated objects in detail such as highlighting recursive relationships.
List the package names, class names, database names and table names with a brief description of their responsibility in a tabular form.