Monday, May 13, 2013

The Best Job They Know How To Do


Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand.
-- "The Retrospective Prime Directive" by Norm Kerth


Software, as Dr. Ralph Johnson informed us, is distilled experience.

Writing software, Ray Scheufler reminds us, is a process of making decisions.

To make decisions, we have to understand the system we're working in, and the consequences of our decisions. That means that most of the work of a programmer is learning, and very little of it actually involves typing.

Understanding any existing body of software is involves understanding
  • the domain, 
  • the user being served, 
  • the specific problem being solved, 
  • the solution chosen, 
  • the techniques of safe software development, 
  • the organization producing the project, and 
  • the technology (language, operating system, network architecture, etc) in which the program is written. 
When I mention the organization producing the product, I'm implying that it is different to work on a project with your three closest friends than it is to work with 300 other programmers divided into 30 teams with three management groups (each with its own budget and agenda). The more vast and complex the organization is, the more simple and clear the code must be in order to avoid the errors that arise from misunderstanding of the code. People moving from small teams to large companies are often surprised at the difference context makes.

Business people appreciate the need for domain and technical knowledge. Programmers used to be expected to operate on nothing more than a specific design and their raw technical skills; these days they are routinely given more information and context.

It's hard to measure understanding, but if we increase the knowledge and understanding in a team, we have a mechanism for increasing the output in terms of running, tested features.

Note that managers are in the same pickle. They have to make decisions based on the information that is available to them. It would by hypocritical to expect managers to make decisions without feedback and with no opportunity to vet ideas, and then expect them to respect developers needs for more information.

If we are all part of a system of development, then our information value to those around us is a major asset. It's long past the time when it was enough for people to separate and do their own work quietly in the corner. There has to be a system of shared learning and communication if we are to improve as a team, a company, or a field.

"It is not enough to do your best; you must know what to do, and then do your best."
-- W.E.Deming