Abstract :
Railroad tracks offer guidance and support. There are various tools that can give our software the same handling. The main tool for guiding the code´s direction is the language´s type system. For values, the type system can help us by establishing a separate type for each distinct class; for code, interfaces and abstract classes ensure that we won´t forget some crucial methods when we add functionality through a new class. With domain-specific languages or even suitably initialized data structures we can efficiently express exactly what the designer intended and nothing more. At a higher level, architectures that enforce a particular open-ended but well-defined interface will also guide a software´s progress. Finally, the most flexible track-laying approach is a tool-supported software development process.