Decomposition in software development