concurrent application design