P/PC: a productivity principle for programmers (and other people)

It’s so easy to make your dreams come true. All you need are goals! Just write them down - promise to read one book per week, do 100 push ups every morning, and learn French fluently. The next day, do less than half of what you planned. After one week, do none and forget about everything completely. Then wait until the next crisis has you scribbling new goals optimistically at 3am. Have you done this before? I have. Many times in fact. The problem is that if your ambition is not in harmony with your ability, your goals have no means to come to light. And you find yourself face-down on the floor wondering why you even started.

A still of David Mitchell as Mark Corrigan, from Peep Show I was gonna get to grips with the Roman Republic… do some sit-ups, learn the clarinet.

Achieving your goals is all about balancing what you want out of them with what you are capable of. Stephen Covey calls it the P/PC balance. It’s about balancing what you Produce (P) with your Production Capacity (PC). P can be anything: number of shoes mended, bushels of apples from the orchard, number of laughs with your friends, quantity of bugs fixed, etc. PC is your production capacity. It is the machine that mends the shoe or the tree that grows the apples. Like a machine or plant PC must be well-maintained and cared for so that it continues to yield P. If the PC function is overworked, it starts to break down. Fewer shoes are mended and fewer apples grow on the tree.

Good programmers maintain a high P by increasing PC. We read, try out new technologies, imbibe problem-solving patterns, and do whatever else necessary to keep up with our vast field. Some of us are put under pressure by our bosses or even ourselves. We might work long days to fix lots of bugs, fight fires, and deploy new features quickly. But if you don’t give yourself time to study, to network, and to express yourself then your PC suffers. Being a top performer means working on skills that increase your power for the future, as well as the now.

A variant of the ‘This is fine’ meme Too much time spent fighting fires can prevent you fighting the cause.

PC is an intrisic property in your software. I worked in a programming team that inherited a web component adapted off-the-shelf from a library. The previous team delivered the component (a pivot table) swifty, which pleased our customers. P was therefore high. Yet soon we were under pressure to make customisations which the underlying library made impractical or impossible. There was no time to refactor or rewrite. To deliver on time we layered ugly customisations on top of the library component. But these made further changes very difficult, to the point that a simple layout fix could take days to get done. Some of the time spent on delivering a pivot table (P) could have been devoted to making the underlying platform better, which would have increased PC.

Goals are good. That’s why all the the successful folk are always going on about them. Understanding the P/PC balance helps you achieve your goals. It will help you understand how to be a better programmer. Yet it is not a secret whose unlocking will fulfill your dreams. It is a physical law grounded in reality. Admit you can’t do everything you want but don’t beat yourself up for it. Make a few small goals that you can achieve, and build on them. You can never escape the P/PC balance, but you will be rewarded when you work harmoniously with it.