Introduction: The Three Layers of Knowledge

Consider the process of creating a realistic painting. Let’s suppose that we’re painting a still life. Successful completion of the painting requires that several layers of thinking be at work simultaneously:

The Goal

In general terms, the goal is that to which we ultimately aspire: it must be kept clearly in mind, and all other levels of thought must drive toward achieving the goal. The ultimate goal in this instance is to end up with a canvas that realistically depicts a scene.

The Rules

There are various rules that must be followed in order to reach the goal. For example, objects look smaller as they recede into the background. Light reflecting off surfaces looks a certain way. The painter can only achieve the goal if the rules are properly followed – objects are painted so that they follow the rules. Going outside the rules subverts the goal.

Tactics

Tactics are the “bag of tricks” that the painter reaches for on a minute-to-minute basis in achieving the goal. Tactics support Rules: for example, the painter knows that by mixing paint in certain proportions, and applying it in a certain way, the reflection of light from a spherical object may be accurately represented.

Note that all three layers of thought must be at work together – for example, not only must the reflection of light from a single object look convincing, the effect must be consistent across the painting: all objects must reflect the same light source or sources.

The Good Painter

A good painter is one that has a good grasp of all three levels of thought: The Goal, The Rules, and Tactics, and a good grasp of how to use them together. He or she:

More Generally

As you’ve probably guessed, the same three layers of knowledge needed to create a great painting are also needed to complete a great software project. Or to create any other sophisticated quality endeavor.

This Guide

The goal of this book is to equip the technologist and/or manager with some of the rules and tactics of building successful software projects. The goal of each project is different – and thus it is outside of the scope of this book. The rules and tactics needed to achieve these various goals remain fairly consistent from project to project, and these are presented herein.

The rules are fairly inviolable – any of these are ignored only at your peril. Tactics are quite different – these are to be used if, and when, appropriate. Different tactics work for different people in different situations.

A Few Notes:

These rules and tactics have proved to be quite useful, but are certainly imperfect and incomplete. They represent my best efforts at observation and explanation, but are subject to improvement and expansion. Use your best judgment! Explore, and you will likely improve upon them.

While the scope of this book is to present rules and tactics that create better software, much of the material within is also generally useful for managing other types of projects.

This book is not a true substitute for intelligence, enthusiasm, and/or experience. One can teach a parrot a large vocabulary of words, but a parrot cannot write a novel. The trick lies not within the knowledge, but within the application of the knowledge. A good leader knows what to do and when to do it.