Like physics, medicine, manufacturing, and many other disciplines, software engineering requires the same high level approach for evolving the knowledge of the discipline the cycle of model building, experimentation and learning. We cannot rely solely on observation followed by logical thought. Software engineering is a laboratory science. It involves an experimental component to test or disprove theories, to explore new domains. We must experiment with techniques to seehow and when they really work, to understand their limits, and to understand how to improve them. We must learn from application and improve our understanding.