Architectural programming is an objective approach to understanding the nature of the task so that a specific problem can be identified as something for space planners and designers to solve. The programmer establishes goals, collects and analyzes facts, uncovers and tests concepts, determines needs, and states the problem. The programmer's responsibilities include: client interviews, research and understanding of emerging technologies, reviews of case studies, budget planning, scheduling long-term deadlines, anticipating the future, and formulating functional requirements. The research results in a program document that specifically outlines the limits of the project and any unique problems.