Expressing software requirements is hard. Software is abstract and intangible, you can't touch it see it or feel it, so talking about it can become very difficult.
There are plenty of tools and techniques that people use to make communicating about software easier like UML diagrams or software state diagrams. Today I'd like to talk about a software development technique my team has been using for communication: Test Driven Development.