To date, we've been writing and testing contracts using JavaScript tests.
Those tests are a lot like our frontend code that we need to create in order to allow users of our decentralized applications (dapps) to talk to the Ethereum Blockchain.
However, there's a lot of initial setup and network configuration code that was automated (black boxed) by our test runner.
User experience, waiting for transactions and returning the updated state to the application and user interface are also a primary concern for developing these dapps.