cloud application development challenges