Computers are discreet and Humans indiscreet.

People in our industry still mix Software Development with Programming. The first is more about social and the later more about technical matter. When you mix or try to interchange these concepts things start to go wrong in software making. To get an idea, think about the advantages of taking your team to a night out. They get a chance to talk about things outside work, know each other better, learn how to communicate more effectively and be more open. But a bad written code cannot careless about getting a night out, if is bad written it will remain bad until someone goes there fix it.

Still we need both for a good software making, first because we need to communicate correctly with the client and our colleagues, second because the code has to be well written with tests, modularity and correct abstractions. I've seen more than once people trying to get away with lack of tests using social skills, the problem is that the software will be hard to change or fail anyway even if the whole hierarchy responsible for the project is satisfied. On the other hand, a pure technical excellence will not guarantee the success of the software because it doesn't deliver what was expected by client at all.

Finding the balance is an ongoing work, like Donald Knuth quote about theory and practice:

If you find that you're spending almost all your time on theory, start turning some attention to practical things; it will improve your theories. If you find that you're spending almost all your time on practice, start turning some attention to theoretical things; it will improve your practice.

So, to be a true developer you need to understand both sides.

Published in Feb 09, 2011