I intend for this series of posts to be short tidbits leading up to my presentation at the upcoming Tampa Code Camp called “Factoring Your Code”.

Design

Design is an innovative and highly iterative process. It is also a decision-making process. Decisions sometimes have to be made with too little information, […goldilocks]. Decisions are sometimes made tentatively, with the right reserved to adjust as more becomes known.

If you had to guess the source of this quote, you may guess some kind of article on agile development as it talks about iteration and unknowns.

Here’s another, to get a better idea of the philosophy being expounded.

A designer’s personal resources of creativeness, communicative ability, and problem-solving skill are intertwined with knowledge of technology and first principles. Engineering tools (such as mathematics, statistics, computers, graphics, and languages) are combined to produce a plan that, when carried out, produces a product that is functional, safe, reliable […]

So? What’s your guess as to the quotes’ origin?

As luck would have it, I recently cracked a few of my old college textbooks, and I pulled this from the first chapter of “Shigley’s Mechanical Engineering Design”. Which at the time I was learning it seemed kind of narrowly focused, but now that I look at it through a developers eyes it really speaks to the struggles of problem solving and decision-making.

So, design is a creative, collaborative, technical process which results in a product. But even working with physical objects, and well defined physical laws it sounds far from straight forward. In fact, I’ll quote one more passage:

Real problems resist compartmentalization. A simple journal bearing involves fluid flow, heat transfer, friction, energy transport, material selection, thermomechanical treatments, statistical descriptions, and so on.

FYI - this is a journal bearing: Journal Bearing

So, all in all, design is hard.

We need some strategies for making it easier, and factoring (and refactoring) can be the go to strategy in your toolkit.

(Cliffhanger for part 2…)