Document {
	Chapter Functional {
		Section Context {
			What is this all about ?
			How does this fit in the existing environment ?
			You may include *rough and simple* block diagram describing the system and how
			it interfaces with all the other system.
		}

		Section System purpose {
			What does the system do ?
		}

		Section Key Functions {
			What are the key functions of the system ?
		}

		Section Related Business Processes {
			Does the software implement a given business process ? How does it
			integrates with other business processes.
		}

		Section Actor and Roles {
			Who are they and how the system caters their need ?
		}

		Section Significant Scenarios {
			What are the use and functions which are significant for the architecture
			?
			Those should be described as scenarios in the form of "Given
			[CONTEXT], then
		}
	}
	Chapter Non-functional {
		Section {		}
	}
	Chapter Architecture {
		Section Constraints {
			If you have constraints, how do they affect the architecture?
			Constraints might be related to Time, budget, resource, approved
			technology lists, standards, skill profile of the development team.
		}
		Section Principles {
			What principles do you want to adopt ?
			
			Example principles include; architectural layering, use of frameworks
			and libraries, common design patterns and templates for
			building components and common approaches (e.g. error handling,
			logging, etc)		
		}
		Section Logical {
			This section purpose is to describe your software big picture.

			Typically, you should document here major components, 
			interfaces or models.
		}
		Section Key Internal Interfaces {
			Synchronous or asynchronous, who has the ownership of the interfaces?
		}
		Section Key External Interfaces {
			Synchronous or asynchronous, who has the ownership of the interfaces?

			Is the interface always available or do you (e.g.) need to cache data
			locally?
		}
		Section Evolutions and Versioning {
			How often does the interface change and how is versioning handled?
		}
	}
	Chapter Design Guidelines {	
	}
	Chapter Operational {
	}
	Chapter Architecture Justification {				
	}
}
