ProgrammingEpisode

Making the possible decision now: what kind of candy can I buy with my nickel?

... you have a good idea on where to start and perhaps even some fledgling pieces of code. Now you need to get on to establishing a rhythm of productive development that can engage and fuel the team.

✥ ✥ ✥

Programming is the act of deciding now what will happen in the future, but it always seems like parts of the future don't happen soon enough and parts of it are always too far off and out of reach. A programming language offers an operationally precise way to encode decisions through a process called simply coding. Programmers reason about future behavior by interpreting previously coded decisions and integrating these with their own decisions and their interpretations of other sources like TechnicalMemos and domain experts. The depth, quality and value of programming decisions will be limited by the programmers ability to concentrate.

Therefore:

Develop a program in discrete episodes. Select appropriate deliverables for an episode and commit sufficient mind share to deliver them. Do this by making the possible decisions now, and coding those decisions.** Be aware of the rise in concentration as the episode progresses. Consider each source (above) and consciously include or exclude its recommendations.

✥ ✥ ✥

Use the fear that often accompanies a decision not-yet-made as a motivation. Try to compare your position within an episode to similar points in previously successful episodes.

Example:

"I feel like we've been around twice now on the possible ways we can bind the six terms of this bond analytic to the four calculation classes we have in our library."

"Yeah, right now I'd be happy if we could place the four primary terms, look at the error cases, and see if that gives us a hint how to proceed after lunch."

Push for the decisions that can be made. Don't abandon an episode; that will leave you feeling defeated and unable to achieve even the same level of concentration at a future time. Make the decisions that seem possible. Code the decisions. Then review the code to be sure that the extent of your decisions and your confidence in them is apparent in the code. Coding occurs on the down-hill side of a programming episode. Coding is the most direct way to promulgate programming decisions.

A version of this pattern first appeared as [BibRef-Cunningham1996].