The downstream activities of large scale software systems life-cycle require team effort of several people over extended time periods. Current computing environments, exemplified by Unix, provide limited support for such team activities. Matisse is a knowledge-based team programming environment that addresses this issue. Matisse models source code, associated documents, people, and tasks as objects in an information system. Relationships between these objects provide associative information retrieval and navigational support; rules defined on object attributes facilitate team coordination and configuration management. We describe the design, implementation, and experimental use of Matisse. Matisse represents a novel information management architecture for team programming: It uses database technology for team information management and expert system technology for individual information management; some experimental data on accesses from the individual to the team information space is presented. Three hard scenarios: semiautomatic design history maintenance, dynamic object composition, and adaptive use of existing software, illustrate the power of Matisse, with respect to team programming, over traditional programming environments.