Adaptive software development