Distributed & concurrent systems have grown exponentially in popularity in recent years. However the vast majority of these systems are designed as untestable whiteboard drawings. This leads to fundamental design flows that go unnoticed in the design phase leading to hard to find bugs that are expensive to correct. This talk is about using formal methods modeling systems which are exhaustively-testable. The objective of the talk is to demonstrate how formal methods can be used to eliminate design flaws before system implementation is underway.