Efficient techniques for partitioning software development tasks