The paper presents a methodology for software engineering. This methodology recognizes the existence of two separate and distinctive phases (architecture and implementation) of a software engineering task. These two phases are interfaced by a formalized but descriptive design specification described by a language called ADL (architectural design language). This ADL description would serve a similar purpose as that served by the blueprint. Implementation can then be accomplished from the `software blueprint' in any of three possibilities: software, hardware, or microwave. Design of a lexical scanner is chosen as an example to illustrate this methodology.